diff --git a/.assets/manifest.json b/.assets/manifest.json
deleted file mode 100644
index e69de29..0000000
diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml
index 29f7987..f658c29 100644
--- a/.github/workflows/docker-build.yaml
+++ b/.github/workflows/docker-build.yaml
@@ -8,12 +8,18 @@ on:
types: [published]
jobs:
- build-amd64:
+ build-and-push:
runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ service: [backend, app]
steps:
- name: Checkout code
uses: actions/checkout@v3
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v2
+
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
@@ -30,109 +36,38 @@ jobs:
id: version
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
- - name: Build and push AMD64 Docker image
+ - name: Build and push Docker image for ${{ matrix.service }}
if: github.ref == 'refs/heads/master' && github.event_name == 'push'
run: |
- DOCKERFILE=app.dockerfile
- IMAGE_NAME=perplexica
- docker buildx build --platform linux/amd64 \
- --cache-from=type=registry,ref=itzcrazykns1337/${IMAGE_NAME}:amd64 \
+ docker buildx create --use
+ if [[ "${{ matrix.service }}" == "backend" ]]; then \
+ DOCKERFILE=backend.dockerfile; \
+ IMAGE_NAME=perplexica-backend; \
+ else \
+ DOCKERFILE=app.dockerfile; \
+ IMAGE_NAME=perplexica-frontend; \
+ fi
+ docker buildx build --platform linux/amd64,linux/arm64 \
+ --cache-from=type=registry,ref=itzcrazykns1337/${IMAGE_NAME}:main \
--cache-to=type=inline \
- --provenance false \
-f $DOCKERFILE \
- -t itzcrazykns1337/${IMAGE_NAME}:amd64 \
+ -t itzcrazykns1337/${IMAGE_NAME}:main \
--push .
- - name: Build and push AMD64 release Docker image
+ - name: Build and push release Docker image for ${{ matrix.service }}
if: github.event_name == 'release'
run: |
- DOCKERFILE=app.dockerfile
- IMAGE_NAME=perplexica
- docker buildx build --platform linux/amd64 \
- --cache-from=type=registry,ref=itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }}-amd64 \
+ docker buildx create --use
+ if [[ "${{ matrix.service }}" == "backend" ]]; then \
+ DOCKERFILE=backend.dockerfile; \
+ IMAGE_NAME=perplexica-backend; \
+ else \
+ DOCKERFILE=app.dockerfile; \
+ IMAGE_NAME=perplexica-frontend; \
+ fi
+ docker buildx build --platform linux/amd64,linux/arm64 \
+ --cache-from=type=registry,ref=itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }} \
--cache-to=type=inline \
- --provenance false \
-f $DOCKERFILE \
- -t itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }}-amd64 \
+ -t itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }} \
--push .
-
- build-arm64:
- runs-on: ubuntu-24.04-arm
- steps:
- - name: Checkout code
- uses: actions/checkout@v3
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v2
- with:
- install: true
-
- - name: Log in to DockerHub
- uses: docker/login-action@v2
- with:
- username: ${{ secrets.DOCKER_USERNAME }}
- password: ${{ secrets.DOCKER_PASSWORD }}
-
- - name: Extract version from release tag
- if: github.event_name == 'release'
- id: version
- run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
-
- - name: Build and push ARM64 Docker image
- if: github.ref == 'refs/heads/master' && github.event_name == 'push'
- run: |
- DOCKERFILE=app.dockerfile
- IMAGE_NAME=perplexica
- docker buildx build --platform linux/arm64 \
- --cache-from=type=registry,ref=itzcrazykns1337/${IMAGE_NAME}:arm64 \
- --cache-to=type=inline \
- --provenance false \
- -f $DOCKERFILE \
- -t itzcrazykns1337/${IMAGE_NAME}:arm64 \
- --push .
-
- - name: Build and push ARM64 release Docker image
- if: github.event_name == 'release'
- run: |
- DOCKERFILE=app.dockerfile
- IMAGE_NAME=perplexica
- docker buildx build --platform linux/arm64 \
- --cache-from=type=registry,ref=itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }}-arm64 \
- --cache-to=type=inline \
- --provenance false \
- -f $DOCKERFILE \
- -t itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }}-arm64 \
- --push .
-
- manifest:
- needs: [build-amd64, build-arm64]
- runs-on: ubuntu-latest
- steps:
- - name: Log in to DockerHub
- uses: docker/login-action@v2
- with:
- username: ${{ secrets.DOCKER_USERNAME }}
- password: ${{ secrets.DOCKER_PASSWORD }}
-
- - name: Extract version from release tag
- if: github.event_name == 'release'
- id: version
- run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
-
- - name: Create and push multi-arch manifest for main
- if: github.ref == 'refs/heads/master' && github.event_name == 'push'
- run: |
- IMAGE_NAME=perplexica
- docker manifest create itzcrazykns1337/${IMAGE_NAME}:main \
- --amend itzcrazykns1337/${IMAGE_NAME}:amd64 \
- --amend itzcrazykns1337/${IMAGE_NAME}:arm64
- docker manifest push itzcrazykns1337/${IMAGE_NAME}:main
-
- - name: Create and push multi-arch manifest for releases
- if: github.event_name == 'release'
- run: |
- IMAGE_NAME=perplexica
- docker manifest create itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }} \
- --amend itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }}-amd64 \
- --amend itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }}-arm64
- docker manifest push itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }}
diff --git a/.gitignore b/.gitignore
index 9fb5e4c..240381c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,11 +2,12 @@
node_modules/
npm-debug.log
yarn-error.log
+package-lock.json
# Build output
-.next/
-out/
-dist/
+/.next/
+/out/
+/dist/
# IDE/Editor specific
.vscode/
@@ -38,4 +39,5 @@ Thumbs.db
db.sqlite
/searxng
-certificates
\ No newline at end of file
+# Dev
+docker-compose-dev.yaml
diff --git a/.prettierrc.js b/.prettierrc.js
index 8ca480f..1937ff1 100644
--- a/.prettierrc.js
+++ b/.prettierrc.js
@@ -6,6 +6,7 @@ const config = {
endOfLine: 'auto',
singleQuote: true,
tabWidth: 2,
+ semi: true,
};
module.exports = config;
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 7bbb280..b16eccf 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,43 +1,32 @@
# How to Contribute to Perplexica
-Thanks for your interest in contributing to Perplexica! Your help makes this project better. This guide explains how to contribute effectively.
-
-Perplexica is a modern AI chat application with advanced search capabilities.
+Hey there, thanks for deciding to contribute to Perplexica. Anything you help with will support the development of Perplexica and will make it better. Let's walk you through the key aspects to ensure your contributions are effective and in harmony with the project's setup.
## Project Structure
-Perplexica's codebase is organized as follows:
+Perplexica's design consists of two main domains:
-- **UI Components and Pages**:
- - **Components (`src/components`)**: Reusable UI components.
- - **Pages and Routes (`src/app`)**: Next.js app directory structure with page components.
- - Main app routes include: home (`/`), chat (`/c`), discover (`/discover`), library (`/library`), and settings (`/settings`).
- - **API Routes (`src/app/api`)**: API endpoints implemented with Next.js API routes.
- - `/api/chat`: Handles chat interactions.
- - `/api/search`: Provides direct access to Perplexica's search capabilities.
- - Other endpoints for models, files, and suggestions.
-- **Backend Logic (`src/lib`)**: Contains all the backend functionality including search, database, and API logic.
- - The search functionality is present inside `src/lib/search` directory.
- - All of the focus modes are implemented using the Meta Search Agent class in `src/lib/search/metaSearchAgent.ts`.
- - Database functionality is in `src/lib/db`.
- - Chat model and embedding model providers are managed in `src/lib/providers`.
- - Prompt templates and LLM chain definitions are in `src/lib/prompts` and `src/lib/chains` respectively.
-
-## API Documentation
-
-Perplexica exposes several API endpoints for programmatic access, including:
-
-- **Search API**: Access Perplexica's advanced search capabilities directly via the `/api/search` endpoint. For detailed documentation, see `docs/api/search.md`.
+- **Frontend (`ui` directory)**: This is a Next.js application holding all user interface components. It's a self-contained environment that manages everything the user interacts with.
+- **Backend (root and `src` directory)**: The backend logic is situated in the `src` folder, but the root directory holds the main `package.json` for backend dependency management.
+ - All of the focus modes are created using the Meta Search Agent class present in `src/search/metaSearchAgent.ts`. The main logic behind Perplexica lies there.
## Setting Up Your Environment
Before diving into coding, setting up your local environment is key. Here's what you need to do:
+### Backend
+
1. In the root directory, locate the `sample.config.toml` file.
-2. Rename it to `config.toml` and fill in the necessary configuration fields.
-3. Run `npm install` to install all dependencies.
-4. Run `npm run db:push` to set up the local sqlite database.
-5. Use `npm run dev` to start the application in development mode.
+2. Rename it to `config.toml` and fill in the necessary configuration fields specific to the backend.
+3. Run `npm install` to install dependencies.
+4. Run `npm run db:push` to set up the local sqlite.
+5. Use `npm run dev` to start the backend in development mode.
+
+### Frontend
+
+1. Navigate to the `ui` folder and repeat the process of renaming `.env.example` to `.env`, making sure to provide the frontend-specific variables.
+2. Execute `npm install` within the `ui` directory to get the frontend dependencies ready.
+3. Launch the frontend development server with `npm run dev`.
**Please note**: Docker configurations are present for setting up production environments, whereas `npm run dev` is used for development purposes.
diff --git a/README.md b/README.md
index 5eb0713..3b80e58 100644
--- a/README.md
+++ b/README.md
@@ -1,22 +1,6 @@
# 🚀 Perplexica - An AI-powered search engine 🔎
-
-
Special thanks to:
-
-
-
-
-
-
-### [Warp, the AI Devtool that lives in your terminal](https://www.warp.dev/perplexica)
-
-[Available for MacOS, Linux, & Windows](https://www.warp.dev/perplexica)
-
-
-
-
-
-[](https://discord.gg/26aArMy8tT)
+[](https://discord.gg/26aArMy8tT)

@@ -90,9 +74,6 @@ There are mainly 2 ways of installing Perplexica - With Docker, Without Docker.
- `OLLAMA`: Your Ollama API URL. You should enter it as `http://host.docker.internal:PORT_NUMBER`. If you installed Ollama on port 11434, use `http://host.docker.internal:11434`. For other ports, adjust accordingly. **You need to fill this if you wish to use Ollama's models instead of OpenAI's**.
- `GROQ`: Your Groq API key. **You only need to fill this if you wish to use Groq's hosted models**.
- `ANTHROPIC`: Your Anthropic API key. **You only need to fill this if you wish to use Anthropic models**.
- - `Gemini`: Your Gemini API key. **You only need to fill this if you wish to use Google's models**.
- - `DEEPSEEK`: Your Deepseek API key. **Only needed if you want Deepseek models.**
- - `AIMLAPI`: Your AI/ML API key. **Only needed if you want to use AI/ML API models and embeddings.**
**Note**: You can change these after starting Perplexica from the settings dialog.
@@ -112,13 +93,14 @@ There are mainly 2 ways of installing Perplexica - With Docker, Without Docker.
1. Install SearXNG and allow `JSON` format in the SearXNG settings.
2. Clone the repository and rename the `sample.config.toml` file to `config.toml` in the root directory. Ensure you complete all required fields in this file.
-3. After populating the configuration run `npm i`.
-4. Install the dependencies and then execute `npm run build`.
-5. Finally, start the app by running `npm run start`
+3. Rename the `.env.example` file to `.env` in the `ui` folder and fill in all necessary fields.
+4. After populating the configuration and environment files, run `npm i` in both the `ui` folder and the root directory.
+5. Install the dependencies and then execute `npm run build` in both the `ui` folder and the root directory.
+6. Finally, start both the frontend and the backend by running `npm run start` in both the `ui` folder and the root directory.
**Note**: Using Docker is recommended as it simplifies the setup process, especially for managing environment variables and dependencies.
-See the [installation documentation](https://github.com/ItzCrazyKns/Perplexica/tree/master/docs/installation) for more information like updating, etc.
+See the [installation documentation](https://github.com/ItzCrazyKns/Perplexica/tree/master/docs/installation) for more information like exposing it your network, etc.
### Ollama Connection Errors
@@ -135,7 +117,7 @@ If you're encountering an Ollama connection error, it is likely due to the backe
3. **Linux Users - Expose Ollama to Network:**
- - Inside `/etc/systemd/system/ollama.service`, you need to add `Environment="OLLAMA_HOST=0.0.0.0:11434"`. (Change the port number if you are using a different one.) Then reload the systemd manager configuration with `systemctl daemon-reload`, and restart Ollama by `systemctl restart ollama`. For more information see [Ollama docs](https://github.com/ollama/ollama/blob/main/docs/faq.md#setting-environment-variables-on-linux)
+ - Inside `/etc/systemd/system/ollama.service`, you need to add `Environment="OLLAMA_HOST=0.0.0.0"`. Then restart Ollama by `systemctl restart ollama`. For more information see [Ollama docs](https://github.com/ollama/ollama/blob/main/docs/faq.md#setting-environment-variables-on-linux)
- Ensure that the port (default is 11434) is not blocked by your firewall.
@@ -156,13 +138,12 @@ For more details, check out the full documentation [here](https://github.com/Itz
## Expose Perplexica to network
-Perplexica runs on Next.js and handles all API requests. It works right away on the same network and stays accessible even with port forwarding.
+You can access Perplexica over your home network by following our networking guide [here](https://github.com/ItzCrazyKns/Perplexica/blob/master/docs/installation/NETWORKING.md).
## One-Click Deployment
[](https://usw.sealos.io/?openapp=system-template%3FtemplateName%3Dperplexica)
[](https://repocloud.io/details/?app_id=267)
-[](https://template.run.claw.cloud/?referralCode=U11MRQ8U9RM4&openapp=system-fastdeploy%3FtemplateName%3Dperplexica)
## Upcoming Features
diff --git a/app.dockerfile b/app.dockerfile
index c3c0fd0..488e64b 100644
--- a/app.dockerfile
+++ b/app.dockerfile
@@ -1,35 +1,15 @@
-FROM node:20.18.0-slim AS builder
+FROM node:20.18.0-alpine
+
+ARG NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001
+ARG NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api
+ENV NEXT_PUBLIC_WS_URL=${NEXT_PUBLIC_WS_URL}
+ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL}
WORKDIR /home/perplexica
-COPY package.json yarn.lock ./
-RUN yarn install --frozen-lockfile --network-timeout 600000
+COPY ui /home/perplexica/
-COPY tsconfig.json next.config.mjs next-env.d.ts postcss.config.js drizzle.config.ts tailwind.config.ts ./
-COPY src ./src
-COPY public ./public
-
-RUN mkdir -p /home/perplexica/data
+RUN yarn install --frozen-lockfile
RUN yarn build
-RUN yarn add --dev @vercel/ncc
-RUN yarn ncc build ./src/lib/db/migrate.ts -o migrator
-
-FROM node:20.18.0-slim
-
-WORKDIR /home/perplexica
-
-COPY --from=builder /home/perplexica/public ./public
-COPY --from=builder /home/perplexica/.next/static ./public/_next/static
-
-COPY --from=builder /home/perplexica/.next/standalone ./
-COPY --from=builder /home/perplexica/data ./data
-COPY drizzle ./drizzle
-COPY --from=builder /home/perplexica/migrator/build ./build
-COPY --from=builder /home/perplexica/migrator/index.js ./migrate.js
-
-RUN mkdir /home/perplexica/uploads
-
-COPY entrypoint.sh ./entrypoint.sh
-RUN chmod +x ./entrypoint.sh
-CMD ["./entrypoint.sh"]
\ No newline at end of file
+CMD ["yarn", "start"]
\ No newline at end of file
diff --git a/backend.dockerfile b/backend.dockerfile
new file mode 100644
index 0000000..b6ab95a
--- /dev/null
+++ b/backend.dockerfile
@@ -0,0 +1,17 @@
+FROM node:18-slim
+
+WORKDIR /home/perplexica
+
+COPY src /home/perplexica/src
+COPY tsconfig.json /home/perplexica/
+COPY drizzle.config.ts /home/perplexica/
+COPY package.json /home/perplexica/
+COPY yarn.lock /home/perplexica/
+
+RUN mkdir /home/perplexica/data
+RUN mkdir /home/perplexica/uploads
+
+RUN yarn install --frozen-lockfile --network-timeout 600000
+RUN yarn build
+
+CMD ["yarn", "start"]
\ No newline at end of file
diff --git a/docker-compose.yaml b/docker-compose.yaml
index b32e0a9..38c3f5d 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -4,27 +4,46 @@ services:
volumes:
- ./searxng:/etc/searxng:rw
ports:
- - 4000:8080
+ - '4000:8080'
networks:
- perplexica-network
restart: unless-stopped
- app:
- image: itzcrazykns1337/perplexica:main
+ perplexica-backend:
build:
context: .
- dockerfile: app.dockerfile
+ dockerfile: backend.dockerfile
+ image: itzcrazykns1337/perplexica-backend:main
environment:
- SEARXNG_API_URL=http://searxng:8080
- - DATA_DIR=/home/perplexica
+ depends_on:
+ - searxng
ports:
- - 3000:3000
- networks:
- - perplexica-network
+ - '3001:3001'
volumes:
- backend-dbstore:/home/perplexica/data
- uploads:/home/perplexica/uploads
- ./config.toml:/home/perplexica/config.toml
+ extra_hosts:
+ - 'host.docker.internal:host-gateway'
+ networks:
+ - perplexica-network
+ restart: unless-stopped
+
+ perplexica-frontend:
+ build:
+ context: .
+ dockerfile: app.dockerfile
+ args:
+ - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api
+ - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001
+ image: itzcrazykns1337/perplexica-frontend:main
+ depends_on:
+ - perplexica-backend
+ ports:
+ - '3000:3000'
+ networks:
+ - perplexica-network
restart: unless-stopped
networks:
diff --git a/docs/API/SEARCH.md b/docs/API/SEARCH.md
index b67b62b..9405bc5 100644
--- a/docs/API/SEARCH.md
+++ b/docs/API/SEARCH.md
@@ -6,9 +6,9 @@ Perplexica’s Search API makes it easy to use our AI-powered search engine. You
## Endpoint
-### **POST** `http://localhost:3000/api/search`
+### **POST** `http://localhost:3001/api/search`
-**Note**: Replace `3000` with any other port if you've changed the default PORT
+**Note**: Replace `3001` with any other port if you've changed the default PORT
### Request
@@ -20,11 +20,11 @@ The API accepts a JSON object in the request body, where you define the focus mo
{
"chatModel": {
"provider": "openai",
- "name": "gpt-4o-mini"
+ "model": "gpt-4o-mini"
},
"embeddingModel": {
"provider": "openai",
- "name": "text-embedding-3-large"
+ "model": "text-embedding-3-large"
},
"optimizationMode": "speed",
"focusMode": "webSearch",
@@ -32,26 +32,24 @@ The API accepts a JSON object in the request body, where you define the focus mo
"history": [
["human", "Hi, how are you?"],
["assistant", "I am doing well, how can I help you today?"]
- ],
- "systemInstructions": "Focus on providing technical details about Perplexica's architecture.",
- "stream": false
+ ]
}
```
### Request Parameters
-- **`chatModel`** (object, optional): Defines the chat model to be used for the query. For model details you can send a GET request at `http://localhost:3000/api/models`. Make sure to use the key value (For example "gpt-4o-mini" instead of the display name "GPT 4 omni mini").
+- **`chatModel`** (object, optional): Defines the chat model to be used for the query. For model details you can send a GET request at `http://localhost:3001/api/models`. Make sure to use the key value (For example "gpt-4o-mini" instead of the display name "GPT 4 omni mini").
- `provider`: Specifies the provider for the chat model (e.g., `openai`, `ollama`).
- - `name`: The specific model from the chosen provider (e.g., `gpt-4o-mini`).
+ - `model`: The specific model from the chosen provider (e.g., `gpt-4o-mini`).
- Optional fields for custom OpenAI configuration:
- `customOpenAIBaseURL`: If you’re using a custom OpenAI instance, provide the base URL.
- `customOpenAIKey`: The API key for a custom OpenAI instance.
-- **`embeddingModel`** (object, optional): Defines the embedding model for similarity-based searching. For model details you can send a GET request at `http://localhost:3000/api/models`. Make sure to use the key value (For example "text-embedding-3-large" instead of the display name "Text Embedding 3 Large").
+- **`embeddingModel`** (object, optional): Defines the embedding model for similarity-based searching. For model details you can send a GET request at `http://localhost:3001/api/models`. Make sure to use the key value (For example "text-embedding-3-large" instead of the display name "Text Embedding 3 Large").
- `provider`: The provider for the embedding model (e.g., `openai`).
- - `name`: The specific embedding model (e.g., `text-embedding-3-large`).
+ - `model`: The specific embedding model (e.g., `text-embedding-3-large`).
- **`focusMode`** (string, required): Specifies which focus mode to use. Available modes:
@@ -64,8 +62,6 @@ The API accepts a JSON object in the request body, where you define the focus mo
- **`query`** (string, required): The search query or question.
-- **`systemInstructions`** (string, optional): Custom instructions provided by the user to guide the AI's response. These instructions are treated as user preferences and have lower priority than the system's core instructions. For example, you can specify a particular writing style, format, or focus area.
-
- **`history`** (array, optional): An array of message pairs representing the conversation history. Each pair consists of a role (either 'human' or 'assistant') and the message content. This allows the system to use the context of the conversation to refine results. Example:
```json
@@ -75,13 +71,11 @@ The API accepts a JSON object in the request body, where you define the focus mo
]
```
-- **`stream`** (boolean, optional): When set to `true`, enables streaming responses. Default is `false`.
-
### Response
The response from the API includes both the final message and the sources used to generate that message.
-#### Standard Response (stream: false)
+#### Example Response
```json
{
@@ -106,28 +100,6 @@ The response from the API includes both the final message and the sources used t
}
```
-#### Streaming Response (stream: true)
-
-When streaming is enabled, the API returns a stream of newline-delimited JSON objects. Each line contains a complete, valid JSON object. The response has Content-Type: application/json.
-
-Example of streamed response objects:
-
-```
-{"type":"init","data":"Stream connected"}
-{"type":"sources","data":[{"pageContent":"...","metadata":{"title":"...","url":"..."}},...]}
-{"type":"response","data":"Perplexica is an "}
-{"type":"response","data":"innovative, open-source "}
-{"type":"response","data":"AI-powered search engine..."}
-{"type":"done"}
-```
-
-Clients should process each line as a separate JSON object. The different message types include:
-
-- **`init`**: Initial connection message
-- **`sources`**: All sources used for the response
-- **`response`**: Chunks of the generated answer text
-- **`done`**: Indicates the stream is complete
-
### Fields in the Response
- **`message`** (string): The search result, generated based on the query and focus mode.
diff --git a/docs/architecture/WORKING.md b/docs/architecture/WORKING.md
index 6bad4f9..75b20fd 100644
--- a/docs/architecture/WORKING.md
+++ b/docs/architecture/WORKING.md
@@ -4,7 +4,7 @@ Curious about how Perplexica works? Don't worry, we'll cover it here. Before we
We'll understand how Perplexica works by taking an example of a scenario where a user asks: "How does an A.C. work?". We'll break down the process into steps to make it easier to understand. The steps are as follows:
-1. The message is sent to the `/api/chat` route where it invokes the chain. The chain will depend on your focus mode. For this example, let's assume we use the "webSearch" focus mode.
+1. The message is sent via WS to the backend server where it invokes the chain. The chain will depend on your focus mode. For this example, let's assume we use the "webSearch" focus mode.
2. The chain is now invoked; first, the message is passed to another chain where it first predicts (using the chat history and the question) whether there is a need for sources and searching the web. If there is, it will generate a query (in accordance with the chat history) for searching the web that we'll take up later. If not, the chain will end there, and then the answer generator chain, also known as the response generator, will be started.
3. The query returned by the first chain is passed to SearXNG to search the web for information.
4. After the information is retrieved, it is based on keyword-based search. We then convert the information into embeddings and the query as well, then we perform a similarity search to find the most relevant sources to answer the query.
diff --git a/docs/installation/NETWORKING.md b/docs/installation/NETWORKING.md
new file mode 100644
index 0000000..ae39e3f
--- /dev/null
+++ b/docs/installation/NETWORKING.md
@@ -0,0 +1,109 @@
+# Expose Perplexica to a network
+
+This guide will show you how to make Perplexica available over a network. Follow these steps to allow computers on the same network to interact with Perplexica. Choose the instructions that match the operating system you are using.
+
+## Windows
+
+1. Open PowerShell as Administrator
+
+2. Navigate to the directory containing the `docker-compose.yaml` file
+
+3. Stop and remove the existing Perplexica containers and images:
+
+ ```bash
+ docker compose down --rmi all
+ ```
+
+4. Open the `docker-compose.yaml` file in a text editor like Notepad++
+
+5. Replace `127.0.0.1` with the IP address of the server Perplexica is running on in these two lines:
+
+ ```bash
+ args:
+ - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api
+ - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001
+ ```
+
+6. Save and close the `docker-compose.yaml` file
+
+7. Rebuild and restart the Perplexica container:
+
+ ```bash
+ docker compose up -d --build
+ ```
+
+## macOS
+
+1. Open the Terminal application
+
+2. Navigate to the directory with the `docker-compose.yaml` file:
+
+ ```bash
+ cd /path/to/docker-compose.yaml
+ ```
+
+3. Stop and remove existing containers and images:
+
+ ```bash
+ docker compose down --rmi all
+ ```
+
+4. Open `docker-compose.yaml` in a text editor like Sublime Text:
+
+ ```bash
+ nano docker-compose.yaml
+ ```
+
+5. Replace `127.0.0.1` with the server IP in these lines:
+
+ ```bash
+ args:
+ - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api
+ - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001
+ ```
+
+6. Save and exit the editor
+
+7. Rebuild and restart Perplexica:
+
+ ```bash
+ docker compose up -d --build
+ ```
+
+## Linux
+
+1. Open the terminal
+
+2. Navigate to the `docker-compose.yaml` directory:
+
+ ```bash
+ cd /path/to/docker-compose.yaml
+ ```
+
+3. Stop and remove containers and images:
+
+ ```bash
+ docker compose down --rmi all
+ ```
+
+4. Edit `docker-compose.yaml`:
+
+ ```bash
+ nano docker-compose.yaml
+ ```
+
+5. Replace `127.0.0.1` with the server IP:
+
+ ```bash
+ args:
+ - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api
+ - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001
+ ```
+
+6. Save and exit the editor
+
+7. Rebuild and restart Perplexica:
+
+ ```bash
+ docker compose up -d --build
+ ```
diff --git a/docs/installation/UPDATING.md b/docs/installation/UPDATING.md
index 66edf5c..a4651df 100644
--- a/docs/installation/UPDATING.md
+++ b/docs/installation/UPDATING.md
@@ -39,8 +39,11 @@ To update Perplexica to the latest version, follow these steps:
2. Navigate to the project directory.
3. Check for changes in the configuration files. If the `sample.config.toml` file contains new fields, delete your existing `config.toml` file, rename `sample.config.toml` to `config.toml`, and update the configuration accordingly.
-4. After populating the configuration run `npm i`.
-5. Install the dependencies and then execute `npm run build`.
-6. Finally, start the app by running `npm run start`
+
+4. Execute `npm i` in both the `ui` folder and the root directory.
+
+5. Once the packages are updated, execute `npm run build` in both the `ui` folder and the root directory.
+
+6. Finally, start both the frontend and the backend by running `npm run start` in both the `ui` folder and the root directory.
---
diff --git a/drizzle.config.ts b/drizzle.config.ts
index a029112..9ac3ec5 100644
--- a/drizzle.config.ts
+++ b/drizzle.config.ts
@@ -1,11 +1,10 @@
import { defineConfig } from 'drizzle-kit';
-import path from 'path';
export default defineConfig({
dialect: 'sqlite',
- schema: './src/lib/db/schema.ts',
+ schema: './src/db/schema.ts',
out: './drizzle',
dbCredentials: {
- url: path.join(process.cwd(), 'data', 'db.sqlite'),
+ url: './data/db.sqlite',
},
});
diff --git a/drizzle/0000_fuzzy_randall.sql b/drizzle/0000_fuzzy_randall.sql
deleted file mode 100644
index 0a2ff07..0000000
--- a/drizzle/0000_fuzzy_randall.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-CREATE TABLE IF NOT EXISTS `chats` (
- `id` text PRIMARY KEY NOT NULL,
- `title` text NOT NULL,
- `createdAt` text NOT NULL,
- `focusMode` text NOT NULL,
- `files` text DEFAULT '[]'
-);
---> statement-breakpoint
-CREATE TABLE IF NOT EXISTS `messages` (
- `id` integer PRIMARY KEY NOT NULL,
- `content` text NOT NULL,
- `chatId` text NOT NULL,
- `messageId` text NOT NULL,
- `type` text,
- `metadata` text
-);
diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json
deleted file mode 100644
index 850bcd3..0000000
--- a/drizzle/meta/0000_snapshot.json
+++ /dev/null
@@ -1,116 +0,0 @@
-{
- "version": "6",
- "dialect": "sqlite",
- "id": "ef3a044b-0f34-40b5-babb-2bb3a909ba27",
- "prevId": "00000000-0000-0000-0000-000000000000",
- "tables": {
- "chats": {
- "name": "chats",
- "columns": {
- "id": {
- "name": "id",
- "type": "text",
- "primaryKey": true,
- "notNull": true,
- "autoincrement": false
- },
- "title": {
- "name": "title",
- "type": "text",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "createdAt": {
- "name": "createdAt",
- "type": "text",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "focusMode": {
- "name": "focusMode",
- "type": "text",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "files": {
- "name": "files",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false,
- "default": "'[]'"
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {},
- "uniqueConstraints": {},
- "checkConstraints": {}
- },
- "messages": {
- "name": "messages",
- "columns": {
- "id": {
- "name": "id",
- "type": "integer",
- "primaryKey": true,
- "notNull": true,
- "autoincrement": false
- },
- "content": {
- "name": "content",
- "type": "text",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "chatId": {
- "name": "chatId",
- "type": "text",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "messageId": {
- "name": "messageId",
- "type": "text",
- "primaryKey": false,
- "notNull": true,
- "autoincrement": false
- },
- "type": {
- "name": "type",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- },
- "metadata": {
- "name": "metadata",
- "type": "text",
- "primaryKey": false,
- "notNull": false,
- "autoincrement": false
- }
- },
- "indexes": {},
- "foreignKeys": {},
- "compositePrimaryKeys": {},
- "uniqueConstraints": {},
- "checkConstraints": {}
- }
- },
- "views": {},
- "enums": {},
- "_meta": {
- "schemas": {},
- "tables": {},
- "columns": {}
- },
- "internal": {
- "indexes": {}
- }
-}
diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json
deleted file mode 100644
index 5db59d1..0000000
--- a/drizzle/meta/_journal.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "version": "7",
- "dialect": "sqlite",
- "entries": [
- {
- "idx": 0,
- "version": "6",
- "when": 1748405503809,
- "tag": "0000_fuzzy_randall",
- "breakpoints": true
- }
- ]
-}
diff --git a/entrypoint.sh b/entrypoint.sh
deleted file mode 100644
index 9f9448a..0000000
--- a/entrypoint.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-set -e
-
-node migrate.js
-
-exec node server.js
\ No newline at end of file
diff --git a/next-env.d.ts b/next-env.d.ts
deleted file mode 100644
index 1b3be08..0000000
--- a/next-env.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-///
-///
-
-// NOTE: This file should not be edited
-// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/package.json b/package.json
index 5715c2a..1a53d8f 100644
--- a/package.json
+++ b/package.json
@@ -1,70 +1,53 @@
{
- "name": "perplexica-frontend",
- "version": "1.11.0-rc2",
+ "name": "perplexica-backend",
+ "version": "1.10.0-rc3",
"license": "MIT",
"author": "ItzCrazyKns",
"scripts": {
- "dev": "next dev",
- "build": "npm run db:push && next build",
- "start": "next start",
- "lint": "next lint",
- "format:write": "prettier . --write",
- "db:push": "drizzle-kit push"
- },
- "dependencies": {
- "@headlessui/react": "^2.2.0",
- "@iarna/toml": "^2.2.5",
- "@icons-pack/react-simple-icons": "^12.3.0",
- "@langchain/anthropic": "^0.3.24",
- "@langchain/community": "^0.3.49",
- "@langchain/core": "^0.3.66",
- "@langchain/google-genai": "^0.2.15",
- "@langchain/groq": "^0.2.3",
- "@langchain/ollama": "^0.2.3",
- "@langchain/openai": "^0.6.2",
- "@langchain/textsplitters": "^0.1.0",
- "@tailwindcss/typography": "^0.5.12",
- "@xenova/transformers": "^2.17.2",
- "axios": "^1.8.3",
- "better-sqlite3": "^11.9.1",
- "clsx": "^2.1.0",
- "compute-cosine-similarity": "^1.1.0",
- "compute-dot": "^1.1.0",
- "drizzle-orm": "^0.40.1",
- "html-to-text": "^9.0.5",
- "jspdf": "^3.0.1",
- "langchain": "^0.3.30",
- "lucide-react": "^0.363.0",
- "mammoth": "^1.9.1",
- "markdown-to-jsx": "^7.7.2",
- "next": "^15.2.2",
- "next-themes": "^0.3.0",
- "pdf-parse": "^1.1.1",
- "react": "^18",
- "react-dom": "^18",
- "react-text-to-speech": "^0.14.5",
- "react-textarea-autosize": "^8.5.3",
- "sonner": "^1.4.41",
- "tailwind-merge": "^2.2.2",
- "winston": "^3.17.0",
- "yet-another-react-lightbox": "^3.17.2",
- "zod": "^3.22.4"
+ "start": "npm run db:push && node dist/app.js",
+ "build": "tsc",
+ "dev": "nodemon --ignore uploads/ src/app.ts ",
+ "db:push": "drizzle-kit push sqlite",
+ "format": "prettier . --check",
+ "format:write": "prettier . --write"
},
"devDependencies": {
- "@types/better-sqlite3": "^7.6.12",
+ "@types/better-sqlite3": "^7.6.10",
+ "@types/cors": "^2.8.17",
+ "@types/express": "^4.17.21",
"@types/html-to-text": "^9.0.4",
- "@types/jspdf": "^2.0.0",
- "@types/node": "^20",
+ "@types/multer": "^1.4.12",
"@types/pdf-parse": "^1.1.4",
- "@types/react": "^18",
- "@types/react-dom": "^18",
- "autoprefixer": "^10.0.1",
- "drizzle-kit": "^0.30.5",
- "eslint": "^8",
- "eslint-config-next": "14.1.4",
- "postcss": "^8",
+ "@types/readable-stream": "^4.0.11",
+ "@types/ws": "^8.5.12",
+ "drizzle-kit": "^0.22.7",
+ "nodemon": "^3.1.0",
"prettier": "^3.2.5",
- "tailwindcss": "^3.3.0",
- "typescript": "^5"
+ "ts-node": "^10.9.2",
+ "typescript": "^5.4.3"
+ },
+ "dependencies": {
+ "@iarna/toml": "^2.2.5",
+ "@langchain/anthropic": "^0.2.3",
+ "@langchain/community": "^0.2.16",
+ "@langchain/google-genai": "^0.0.23",
+ "@langchain/openai": "^0.0.25",
+ "@xenova/transformers": "^2.17.1",
+ "axios": "^1.6.8",
+ "better-sqlite3": "^11.0.0",
+ "compute-cosine-similarity": "^1.1.0",
+ "compute-dot": "^1.1.0",
+ "cors": "^2.8.5",
+ "dotenv": "^16.4.5",
+ "drizzle-orm": "^0.31.2",
+ "express": "^4.19.2",
+ "html-to-text": "^9.0.5",
+ "langchain": "^0.1.30",
+ "mammoth": "^1.8.0",
+ "multer": "^1.4.5-lts.1",
+ "pdf-parse": "^1.1.1",
+ "winston": "^3.13.0",
+ "ws": "^8.17.1",
+ "zod": "^3.22.4"
}
}
diff --git a/public/icon-100.png b/public/icon-100.png
deleted file mode 100644
index 98fa242..0000000
Binary files a/public/icon-100.png and /dev/null differ
diff --git a/public/icon-50.png b/public/icon-50.png
deleted file mode 100644
index 9bb7a0e..0000000
Binary files a/public/icon-50.png and /dev/null differ
diff --git a/public/icon.png b/public/icon.png
deleted file mode 100644
index f6fe3c7..0000000
Binary files a/public/icon.png and /dev/null differ
diff --git a/public/screenshots/p1.png b/public/screenshots/p1.png
deleted file mode 100644
index 02f01e5..0000000
Binary files a/public/screenshots/p1.png and /dev/null differ
diff --git a/public/screenshots/p1_small.png b/public/screenshots/p1_small.png
deleted file mode 100644
index 13d9a42..0000000
Binary files a/public/screenshots/p1_small.png and /dev/null differ
diff --git a/public/screenshots/p2.png b/public/screenshots/p2.png
deleted file mode 100644
index 1171675..0000000
Binary files a/public/screenshots/p2.png and /dev/null differ
diff --git a/public/screenshots/p2_small.png b/public/screenshots/p2_small.png
deleted file mode 100644
index bd8d673..0000000
Binary files a/public/screenshots/p2_small.png and /dev/null differ
diff --git a/public/weather-ico/clear-day.svg b/public/weather-ico/clear-day.svg
deleted file mode 100644
index d97d28b..0000000
--- a/public/weather-ico/clear-day.svg
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/clear-night.svg b/public/weather-ico/clear-night.svg
deleted file mode 100644
index 005ac63..0000000
--- a/public/weather-ico/clear-night.svg
+++ /dev/null
@@ -1,159 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/cloudy-1-day.svg b/public/weather-ico/cloudy-1-day.svg
deleted file mode 100644
index 823fea1..0000000
--- a/public/weather-ico/cloudy-1-day.svg
+++ /dev/null
@@ -1,178 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/cloudy-1-night.svg b/public/weather-ico/cloudy-1-night.svg
deleted file mode 100644
index 3fe1541..0000000
--- a/public/weather-ico/cloudy-1-night.svg
+++ /dev/null
@@ -1,206 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/fog-day.svg b/public/weather-ico/fog-day.svg
deleted file mode 100644
index ed834cf..0000000
--- a/public/weather-ico/fog-day.svg
+++ /dev/null
@@ -1,244 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- F
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/fog-night.svg b/public/weather-ico/fog-night.svg
deleted file mode 100644
index d59f98f..0000000
--- a/public/weather-ico/fog-night.svg
+++ /dev/null
@@ -1,309 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/frost-day.svg b/public/weather-ico/frost-day.svg
deleted file mode 100644
index 16d591c..0000000
--- a/public/weather-ico/frost-day.svg
+++ /dev/null
@@ -1,204 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- F
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/frost-night.svg b/public/weather-ico/frost-night.svg
deleted file mode 100644
index ff2c8dc..0000000
--- a/public/weather-ico/frost-night.svg
+++ /dev/null
@@ -1,269 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/rain-and-sleet-mix.svg b/public/weather-ico/rain-and-sleet-mix.svg
deleted file mode 100644
index 172010d..0000000
--- a/public/weather-ico/rain-and-sleet-mix.svg
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/rainy-1-day.svg b/public/weather-ico/rainy-1-day.svg
deleted file mode 100644
index 2faf06e..0000000
--- a/public/weather-ico/rainy-1-day.svg
+++ /dev/null
@@ -1,179 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/rainy-1-night.svg b/public/weather-ico/rainy-1-night.svg
deleted file mode 100644
index ee8ffd8..0000000
--- a/public/weather-ico/rainy-1-night.svg
+++ /dev/null
@@ -1,243 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/rainy-2-day.svg b/public/weather-ico/rainy-2-day.svg
deleted file mode 100644
index affdfff..0000000
--- a/public/weather-ico/rainy-2-day.svg
+++ /dev/null
@@ -1,204 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/rainy-2-night.svg b/public/weather-ico/rainy-2-night.svg
deleted file mode 100644
index 9c3ae20..0000000
--- a/public/weather-ico/rainy-2-night.svg
+++ /dev/null
@@ -1,256 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/rainy-3-day.svg b/public/weather-ico/rainy-3-day.svg
deleted file mode 100644
index b0b5754..0000000
--- a/public/weather-ico/rainy-3-day.svg
+++ /dev/null
@@ -1,206 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/rainy-3-night.svg b/public/weather-ico/rainy-3-night.svg
deleted file mode 100644
index 4078e7d..0000000
--- a/public/weather-ico/rainy-3-night.svg
+++ /dev/null
@@ -1,270 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/scattered-thunderstorms-day.svg b/public/weather-ico/scattered-thunderstorms-day.svg
deleted file mode 100644
index 0cfbccc..0000000
--- a/public/weather-ico/scattered-thunderstorms-day.svg
+++ /dev/null
@@ -1,374 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/scattered-thunderstorms-night.svg b/public/weather-ico/scattered-thunderstorms-night.svg
deleted file mode 100644
index 72cf7a6..0000000
--- a/public/weather-ico/scattered-thunderstorms-night.svg
+++ /dev/null
@@ -1,283 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/severe-thunderstorm.svg b/public/weather-ico/severe-thunderstorm.svg
deleted file mode 100644
index 223198b..0000000
--- a/public/weather-ico/severe-thunderstorm.svg
+++ /dev/null
@@ -1,307 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/snowy-1-day.svg b/public/weather-ico/snowy-1-day.svg
deleted file mode 100644
index fb73943..0000000
--- a/public/weather-ico/snowy-1-day.svg
+++ /dev/null
@@ -1,241 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/snowy-1-night.svg b/public/weather-ico/snowy-1-night.svg
deleted file mode 100644
index 039ea2e..0000000
--- a/public/weather-ico/snowy-1-night.svg
+++ /dev/null
@@ -1,269 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/snowy-2-day.svg b/public/weather-ico/snowy-2-day.svg
deleted file mode 100644
index 323a616..0000000
--- a/public/weather-ico/snowy-2-day.svg
+++ /dev/null
@@ -1,273 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/snowy-2-night.svg b/public/weather-ico/snowy-2-night.svg
deleted file mode 100644
index 10dcbfa..0000000
--- a/public/weather-ico/snowy-2-night.svg
+++ /dev/null
@@ -1,301 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/snowy-3-day.svg b/public/weather-ico/snowy-3-day.svg
deleted file mode 100644
index 846c17a..0000000
--- a/public/weather-ico/snowy-3-day.svg
+++ /dev/null
@@ -1,334 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/public/weather-ico/snowy-3-night.svg b/public/weather-ico/snowy-3-night.svg
deleted file mode 100644
index b3c8c24..0000000
--- a/public/weather-ico/snowy-3-night.svg
+++ /dev/null
@@ -1,361 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/sample.config.toml b/sample.config.toml
index ba3e98e..d51889e 100644
--- a/sample.config.toml
+++ b/sample.config.toml
@@ -1,7 +1,14 @@
[GENERAL]
+PORT = 3001 # Port to run the server on
SIMILARITY_MEASURE = "cosine" # "cosine" or "dot"
KEEP_ALIVE = "5m" # How long to keep Ollama models loaded into memory. (Instead of using -1 use "-1m")
+[SEARCH_ENGINE_BACKENDS] # "google" | "searxng" | "bing" | "brave" | "yacy"
+SEARCH = "searxng"
+IMAGE = "searxng"
+VIDEO = "searxng"
+NEWS = "searxng"
+
[MODELS.OPENAI]
API_KEY = ""
@@ -17,19 +24,22 @@ API_KEY = ""
[MODELS.CUSTOM_OPENAI]
API_KEY = ""
API_URL = ""
-MODEL_NAME = ""
[MODELS.OLLAMA]
API_URL = "" # Ollama API URL - http://host.docker.internal:11434
-[MODELS.DEEPSEEK]
+[SEARCH_ENGINES.GOOGLE]
+API_KEY = ""
+CSE_ID = ""
+
+[SEARCH_ENGINES.SEARXNG]
+ENDPOINT = ""
+
+[SEARCH_ENGINES.BING]
+SUBSCRIPTION_KEY = ""
+
+[SEARCH_ENGINES.BRAVE]
API_KEY = ""
-[MODELS.AIMLAPI]
-API_KEY = "" # Required to use AI/ML API chat and embedding models
-
-[MODELS.LM_STUDIO]
-API_URL = "" # LM Studio API URL - http://host.docker.internal:1234
-
-[API_ENDPOINTS]
-SEARXNG = "" # SearxNG API URL - http://localhost:32768
+[SEARCH_ENGINES.YACY]
+ENDPOINT = ""
diff --git a/searxng/settings.yml b/searxng/settings.yml
index 54d27c4..7f04b6a 100644
--- a/searxng/settings.yml
+++ b/searxng/settings.yml
@@ -15,3 +15,5 @@ server:
engines:
- name: wolframalpha
disabled: false
+ - name: qwant
+ disabled: true
diff --git a/src/app.ts b/src/app.ts
new file mode 100644
index 0000000..96b3a0c
--- /dev/null
+++ b/src/app.ts
@@ -0,0 +1,38 @@
+import { startWebSocketServer } from './websocket';
+import express from 'express';
+import cors from 'cors';
+import http from 'http';
+import routes from './routes';
+import { getPort } from './config';
+import logger from './utils/logger';
+
+const port = getPort();
+
+const app = express();
+const server = http.createServer(app);
+
+const corsOptions = {
+ origin: '*',
+};
+
+app.use(cors(corsOptions));
+app.use(express.json());
+
+app.use('/api', routes);
+app.get('/api', (_, res) => {
+ res.status(200).json({ status: 'ok' });
+});
+
+server.listen(port, () => {
+ logger.info(`Server is running on port ${port}`);
+});
+
+startWebSocketServer(server);
+
+process.on('uncaughtException', (err, origin) => {
+ logger.error(`Uncaught Exception at ${origin}: ${err}`);
+});
+
+process.on('unhandledRejection', (reason, promise) => {
+ logger.error(`Unhandled Rejection at: ${promise}, reason: ${reason}`);
+});
diff --git a/src/app/api/chat/route.ts b/src/app/api/chat/route.ts
deleted file mode 100644
index ba88da6..0000000
--- a/src/app/api/chat/route.ts
+++ /dev/null
@@ -1,310 +0,0 @@
-import crypto from 'crypto';
-import { AIMessage, BaseMessage, HumanMessage } from '@langchain/core/messages';
-import { EventEmitter } from 'stream';
-import {
- getAvailableChatModelProviders,
- getAvailableEmbeddingModelProviders,
-} from '@/lib/providers';
-import db from '@/lib/db';
-import { chats, messages as messagesSchema } from '@/lib/db/schema';
-import { and, eq, gt } from 'drizzle-orm';
-import { getFileDetails } from '@/lib/utils/files';
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import { ChatOpenAI } from '@langchain/openai';
-import {
- getCustomOpenaiApiKey,
- getCustomOpenaiApiUrl,
- getCustomOpenaiModelName,
-} from '@/lib/config';
-import { searchHandlers } from '@/lib/search';
-
-export const runtime = 'nodejs';
-export const dynamic = 'force-dynamic';
-
-type Message = {
- messageId: string;
- chatId: string;
- content: string;
-};
-
-type ChatModel = {
- provider: string;
- name: string;
-};
-
-type EmbeddingModel = {
- provider: string;
- name: string;
-};
-
-type Body = {
- message: Message;
- optimizationMode: 'speed' | 'balanced' | 'quality';
- focusMode: string;
- history: Array<[string, string]>;
- files: Array;
- chatModel: ChatModel;
- embeddingModel: EmbeddingModel;
- systemInstructions: string;
-};
-
-const handleEmitterEvents = async (
- stream: EventEmitter,
- writer: WritableStreamDefaultWriter,
- encoder: TextEncoder,
- aiMessageId: string,
- chatId: string,
-) => {
- let recievedMessage = '';
- let sources: any[] = [];
-
- stream.on('data', (data) => {
- const parsedData = JSON.parse(data);
- if (parsedData.type === 'response') {
- writer.write(
- encoder.encode(
- JSON.stringify({
- type: 'message',
- data: parsedData.data,
- messageId: aiMessageId,
- }) + '\n',
- ),
- );
-
- recievedMessage += parsedData.data;
- } else if (parsedData.type === 'sources') {
- writer.write(
- encoder.encode(
- JSON.stringify({
- type: 'sources',
- data: parsedData.data,
- messageId: aiMessageId,
- }) + '\n',
- ),
- );
-
- sources = parsedData.data;
- }
- });
- stream.on('end', () => {
- writer.write(
- encoder.encode(
- JSON.stringify({
- type: 'messageEnd',
- messageId: aiMessageId,
- }) + '\n',
- ),
- );
- writer.close();
-
- db.insert(messagesSchema)
- .values({
- content: recievedMessage,
- chatId: chatId,
- messageId: aiMessageId,
- role: 'assistant',
- metadata: JSON.stringify({
- createdAt: new Date(),
- ...(sources && sources.length > 0 && { sources }),
- }),
- })
- .execute();
- });
- stream.on('error', (data) => {
- const parsedData = JSON.parse(data);
- writer.write(
- encoder.encode(
- JSON.stringify({
- type: 'error',
- data: parsedData.data,
- }),
- ),
- );
- writer.close();
- });
-};
-
-const handleHistorySave = async (
- message: Message,
- humanMessageId: string,
- focusMode: string,
- files: string[],
-) => {
- const chat = await db.query.chats.findFirst({
- where: eq(chats.id, message.chatId),
- });
-
- const fileData = files.map(getFileDetails);
-
- if (!chat) {
- await db
- .insert(chats)
- .values({
- id: message.chatId,
- title: message.content,
- createdAt: new Date().toString(),
- focusMode: focusMode,
- files: fileData,
- })
- .execute();
- } else if (JSON.stringify(chat.files ?? []) != JSON.stringify(fileData)) {
- db.update(chats)
- .set({
- files: files.map(getFileDetails),
- })
- .where(eq(chats.id, message.chatId));
- }
-
- const messageExists = await db.query.messages.findFirst({
- where: eq(messagesSchema.messageId, humanMessageId),
- });
-
- if (!messageExists) {
- await db
- .insert(messagesSchema)
- .values({
- content: message.content,
- chatId: message.chatId,
- messageId: humanMessageId,
- role: 'user',
- metadata: JSON.stringify({
- createdAt: new Date(),
- }),
- })
- .execute();
- } else {
- await db
- .delete(messagesSchema)
- .where(
- and(
- gt(messagesSchema.id, messageExists.id),
- eq(messagesSchema.chatId, message.chatId),
- ),
- )
- .execute();
- }
-};
-
-export const POST = async (req: Request) => {
- try {
- const body = (await req.json()) as Body;
- const { message } = body;
-
- if (message.content === '') {
- return Response.json(
- {
- message: 'Please provide a message to process',
- },
- { status: 400 },
- );
- }
-
- const [chatModelProviders, embeddingModelProviders] = await Promise.all([
- getAvailableChatModelProviders(),
- getAvailableEmbeddingModelProviders(),
- ]);
-
- const chatModelProvider =
- chatModelProviders[
- body.chatModel?.provider || Object.keys(chatModelProviders)[0]
- ];
- const chatModel =
- chatModelProvider[
- body.chatModel?.name || Object.keys(chatModelProvider)[0]
- ];
-
- const embeddingProvider =
- embeddingModelProviders[
- body.embeddingModel?.provider || Object.keys(embeddingModelProviders)[0]
- ];
- const embeddingModel =
- embeddingProvider[
- body.embeddingModel?.name || Object.keys(embeddingProvider)[0]
- ];
-
- let llm: BaseChatModel | undefined;
- let embedding = embeddingModel.model;
-
- if (body.chatModel?.provider === 'custom_openai') {
- llm = new ChatOpenAI({
- apiKey: getCustomOpenaiApiKey(),
- modelName: getCustomOpenaiModelName(),
- temperature: 0.7,
- configuration: {
- baseURL: getCustomOpenaiApiUrl(),
- },
- }) as unknown as BaseChatModel;
- } else if (chatModelProvider && chatModel) {
- llm = chatModel.model;
- }
-
- if (!llm) {
- return Response.json({ error: 'Invalid chat model' }, { status: 400 });
- }
-
- if (!embedding) {
- return Response.json(
- { error: 'Invalid embedding model' },
- { status: 400 },
- );
- }
-
- const humanMessageId =
- message.messageId ?? crypto.randomBytes(7).toString('hex');
- const aiMessageId = crypto.randomBytes(7).toString('hex');
-
- const history: BaseMessage[] = body.history.map((msg) => {
- if (msg[0] === 'human') {
- return new HumanMessage({
- content: msg[1],
- });
- } else {
- return new AIMessage({
- content: msg[1],
- });
- }
- });
-
- const handler = searchHandlers[body.focusMode];
-
- if (!handler) {
- return Response.json(
- {
- message: 'Invalid focus mode',
- },
- { status: 400 },
- );
- }
-
- const stream = await handler.searchAndAnswer(
- message.content,
- history,
- llm,
- embedding,
- body.optimizationMode,
- body.files,
- body.systemInstructions,
- );
-
- const responseStream = new TransformStream();
- const writer = responseStream.writable.getWriter();
- const encoder = new TextEncoder();
-
- handleEmitterEvents(stream, writer, encoder, aiMessageId, message.chatId);
- handleHistorySave(message, humanMessageId, body.focusMode, body.files);
-
- return new Response(responseStream.readable, {
- headers: {
- 'Content-Type': 'text/event-stream',
- Connection: 'keep-alive',
- 'Cache-Control': 'no-cache, no-transform',
- },
- });
- } catch (err) {
- console.error('An error occurred while processing chat request:', err);
- return Response.json(
- { message: 'An error occurred while processing chat request' },
- { status: 500 },
- );
- }
-};
diff --git a/src/app/api/chats/[id]/route.ts b/src/app/api/chats/[id]/route.ts
deleted file mode 100644
index 6891454..0000000
--- a/src/app/api/chats/[id]/route.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import db from '@/lib/db';
-import { chats, messages } from '@/lib/db/schema';
-import { eq } from 'drizzle-orm';
-
-export const GET = async (
- req: Request,
- { params }: { params: Promise<{ id: string }> },
-) => {
- try {
- const { id } = await params;
-
- const chatExists = await db.query.chats.findFirst({
- where: eq(chats.id, id),
- });
-
- if (!chatExists) {
- return Response.json({ message: 'Chat not found' }, { status: 404 });
- }
-
- const chatMessages = await db.query.messages.findMany({
- where: eq(messages.chatId, id),
- });
-
- return Response.json(
- {
- chat: chatExists,
- messages: chatMessages,
- },
- { status: 200 },
- );
- } catch (err) {
- console.error('Error in getting chat by id: ', err);
- return Response.json(
- { message: 'An error has occurred.' },
- { status: 500 },
- );
- }
-};
-
-export const DELETE = async (
- req: Request,
- { params }: { params: Promise<{ id: string }> },
-) => {
- try {
- const { id } = await params;
-
- const chatExists = await db.query.chats.findFirst({
- where: eq(chats.id, id),
- });
-
- if (!chatExists) {
- return Response.json({ message: 'Chat not found' }, { status: 404 });
- }
-
- await db.delete(chats).where(eq(chats.id, id)).execute();
- await db.delete(messages).where(eq(messages.chatId, id)).execute();
-
- return Response.json(
- { message: 'Chat deleted successfully' },
- { status: 200 },
- );
- } catch (err) {
- console.error('Error in deleting chat by id: ', err);
- return Response.json(
- { message: 'An error has occurred.' },
- { status: 500 },
- );
- }
-};
diff --git a/src/app/api/chats/route.ts b/src/app/api/chats/route.ts
deleted file mode 100644
index 986a192..0000000
--- a/src/app/api/chats/route.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import db from '@/lib/db';
-
-export const GET = async (req: Request) => {
- try {
- let chats = await db.query.chats.findMany();
- chats = chats.reverse();
- return Response.json({ chats: chats }, { status: 200 });
- } catch (err) {
- console.error('Error in getting chats: ', err);
- return Response.json(
- { message: 'An error has occurred.' },
- { status: 500 },
- );
- }
-};
diff --git a/src/app/api/config/route.ts b/src/app/api/config/route.ts
deleted file mode 100644
index f117cce..0000000
--- a/src/app/api/config/route.ts
+++ /dev/null
@@ -1,127 +0,0 @@
-import {
- getAnthropicApiKey,
- getCustomOpenaiApiKey,
- getCustomOpenaiApiUrl,
- getCustomOpenaiModelName,
- getGeminiApiKey,
- getGroqApiKey,
- getOllamaApiEndpoint,
- getOpenaiApiKey,
- getDeepseekApiKey,
- getAimlApiKey,
- getLMStudioApiEndpoint,
- updateConfig,
- getOllamaApiKey,
-} from '@/lib/config';
-import {
- getAvailableChatModelProviders,
- getAvailableEmbeddingModelProviders,
-} from '@/lib/providers';
-
-export const GET = async (req: Request) => {
- try {
- const config: Record = {};
-
- const [chatModelProviders, embeddingModelProviders] = await Promise.all([
- getAvailableChatModelProviders(),
- getAvailableEmbeddingModelProviders(),
- ]);
-
- config['chatModelProviders'] = {};
- config['embeddingModelProviders'] = {};
-
- for (const provider in chatModelProviders) {
- config['chatModelProviders'][provider] = Object.keys(
- chatModelProviders[provider],
- ).map((model) => {
- return {
- name: model,
- displayName: chatModelProviders[provider][model].displayName,
- };
- });
- }
-
- for (const provider in embeddingModelProviders) {
- config['embeddingModelProviders'][provider] = Object.keys(
- embeddingModelProviders[provider],
- ).map((model) => {
- return {
- name: model,
- displayName: embeddingModelProviders[provider][model].displayName,
- };
- });
- }
-
- config['openaiApiKey'] = getOpenaiApiKey();
- config['ollamaApiUrl'] = getOllamaApiEndpoint();
- config['ollamaApiKey'] = getOllamaApiKey();
- config['lmStudioApiUrl'] = getLMStudioApiEndpoint();
- config['anthropicApiKey'] = getAnthropicApiKey();
- config['groqApiKey'] = getGroqApiKey();
- config['geminiApiKey'] = getGeminiApiKey();
- config['deepseekApiKey'] = getDeepseekApiKey();
- config['aimlApiKey'] = getAimlApiKey();
- config['customOpenaiApiUrl'] = getCustomOpenaiApiUrl();
- config['customOpenaiApiKey'] = getCustomOpenaiApiKey();
- config['customOpenaiModelName'] = getCustomOpenaiModelName();
-
- return Response.json({ ...config }, { status: 200 });
- } catch (err) {
- console.error('An error occurred while getting config:', err);
- return Response.json(
- { message: 'An error occurred while getting config' },
- { status: 500 },
- );
- }
-};
-
-export const POST = async (req: Request) => {
- try {
- const config = await req.json();
-
- const updatedConfig = {
- MODELS: {
- OPENAI: {
- API_KEY: config.openaiApiKey,
- },
- GROQ: {
- API_KEY: config.groqApiKey,
- },
- ANTHROPIC: {
- API_KEY: config.anthropicApiKey,
- },
- GEMINI: {
- API_KEY: config.geminiApiKey,
- },
- OLLAMA: {
- API_URL: config.ollamaApiUrl,
- API_KEY: config.ollamaApiKey,
- },
- DEEPSEEK: {
- API_KEY: config.deepseekApiKey,
- },
- AIMLAPI: {
- API_KEY: config.aimlApiKey,
- },
- LM_STUDIO: {
- API_URL: config.lmStudioApiUrl,
- },
- CUSTOM_OPENAI: {
- API_URL: config.customOpenaiApiUrl,
- API_KEY: config.customOpenaiApiKey,
- MODEL_NAME: config.customOpenaiModelName,
- },
- },
- };
-
- updateConfig(updatedConfig);
-
- return Response.json({ message: 'Config updated' }, { status: 200 });
- } catch (err) {
- console.error('An error occurred while updating config:', err);
- return Response.json(
- { message: 'An error occurred while updating config' },
- { status: 500 },
- );
- }
-};
diff --git a/src/app/api/discover/route.ts b/src/app/api/discover/route.ts
deleted file mode 100644
index 415aee8..0000000
--- a/src/app/api/discover/route.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-import { searchSearxng } from '@/lib/searxng';
-
-const websitesForTopic = {
- tech: {
- query: ['technology news', 'latest tech', 'AI', 'science and innovation'],
- links: ['techcrunch.com', 'wired.com', 'theverge.com'],
- },
- finance: {
- query: ['finance news', 'economy', 'stock market', 'investing'],
- links: ['bloomberg.com', 'cnbc.com', 'marketwatch.com'],
- },
- art: {
- query: ['art news', 'culture', 'modern art', 'cultural events'],
- links: ['artnews.com', 'hyperallergic.com', 'theartnewspaper.com'],
- },
- sports: {
- query: ['sports news', 'latest sports', 'cricket football tennis'],
- links: ['espn.com', 'bbc.com/sport', 'skysports.com'],
- },
- entertainment: {
- query: ['entertainment news', 'movies', 'TV shows', 'celebrities'],
- links: ['hollywoodreporter.com', 'variety.com', 'deadline.com'],
- },
-};
-
-type Topic = keyof typeof websitesForTopic;
-
-export const GET = async (req: Request) => {
- try {
- const params = new URL(req.url).searchParams;
-
- const mode: 'normal' | 'preview' =
- (params.get('mode') as 'normal' | 'preview') || 'normal';
- const topic: Topic = (params.get('topic') as Topic) || 'tech';
-
- const selectedTopic = websitesForTopic[topic];
-
- let data = [];
-
- if (mode === 'normal') {
- const seenUrls = new Set();
-
- data = (
- await Promise.all(
- selectedTopic.links.flatMap((link) =>
- selectedTopic.query.map(async (query) => {
- return (
- await searchSearxng(`site:${link} ${query}`, {
- engines: ['bing news'],
- pageno: 1,
- language: 'en',
- })
- ).results;
- }),
- ),
- )
- )
- .flat()
- .filter((item) => {
- const url = item.url?.toLowerCase().trim();
- if (seenUrls.has(url)) return false;
- seenUrls.add(url);
- return true;
- })
- .sort(() => Math.random() - 0.5);
- } else {
- data = (
- await searchSearxng(
- `site:${selectedTopic.links[Math.floor(Math.random() * selectedTopic.links.length)]} ${selectedTopic.query[Math.floor(Math.random() * selectedTopic.query.length)]}`,
- {
- engines: ['bing news'],
- pageno: 1,
- language: 'en',
- },
- )
- ).results;
- }
-
- return Response.json(
- {
- blogs: data,
- },
- {
- status: 200,
- },
- );
- } catch (err) {
- console.error(`An error occurred in discover route: ${err}`);
- return Response.json(
- {
- message: 'An error has occurred',
- },
- {
- status: 500,
- },
- );
- }
-};
diff --git a/src/app/api/images/route.ts b/src/app/api/images/route.ts
deleted file mode 100644
index e02854d..0000000
--- a/src/app/api/images/route.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import handleImageSearch from '@/lib/chains/imageSearchAgent';
-import {
- getCustomOpenaiApiKey,
- getCustomOpenaiApiUrl,
- getCustomOpenaiModelName,
-} from '@/lib/config';
-import { getAvailableChatModelProviders } from '@/lib/providers';
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import { AIMessage, BaseMessage, HumanMessage } from '@langchain/core/messages';
-import { ChatOpenAI } from '@langchain/openai';
-
-interface ChatModel {
- provider: string;
- model: string;
-}
-
-interface ImageSearchBody {
- query: string;
- chatHistory: any[];
- chatModel?: ChatModel;
-}
-
-export const POST = async (req: Request) => {
- try {
- const body: ImageSearchBody = await req.json();
-
- const chatHistory = body.chatHistory
- .map((msg: any) => {
- if (msg.role === 'user') {
- return new HumanMessage(msg.content);
- } else if (msg.role === 'assistant') {
- return new AIMessage(msg.content);
- }
- })
- .filter((msg) => msg !== undefined) as BaseMessage[];
-
- const chatModelProviders = await getAvailableChatModelProviders();
-
- const chatModelProvider =
- chatModelProviders[
- body.chatModel?.provider || Object.keys(chatModelProviders)[0]
- ];
- const chatModel =
- chatModelProvider[
- body.chatModel?.model || Object.keys(chatModelProvider)[0]
- ];
-
- let llm: BaseChatModel | undefined;
-
- if (body.chatModel?.provider === 'custom_openai') {
- llm = new ChatOpenAI({
- apiKey: getCustomOpenaiApiKey(),
- modelName: getCustomOpenaiModelName(),
- temperature: 0.7,
- configuration: {
- baseURL: getCustomOpenaiApiUrl(),
- },
- }) as unknown as BaseChatModel;
- } else if (chatModelProvider && chatModel) {
- llm = chatModel.model;
- }
-
- if (!llm) {
- return Response.json({ error: 'Invalid chat model' }, { status: 400 });
- }
-
- const images = await handleImageSearch(
- {
- chat_history: chatHistory,
- query: body.query,
- },
- llm,
- );
-
- return Response.json({ images }, { status: 200 });
- } catch (err) {
- console.error(`An error occurred while searching images: ${err}`);
- return Response.json(
- { message: 'An error occurred while searching images' },
- { status: 500 },
- );
- }
-};
diff --git a/src/app/api/models/route.ts b/src/app/api/models/route.ts
deleted file mode 100644
index 04a6949..0000000
--- a/src/app/api/models/route.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import {
- getAvailableChatModelProviders,
- getAvailableEmbeddingModelProviders,
-} from '@/lib/providers';
-
-export const GET = async (req: Request) => {
- try {
- const [chatModelProviders, embeddingModelProviders] = await Promise.all([
- getAvailableChatModelProviders(),
- getAvailableEmbeddingModelProviders(),
- ]);
-
- Object.keys(chatModelProviders).forEach((provider) => {
- Object.keys(chatModelProviders[provider]).forEach((model) => {
- delete (chatModelProviders[provider][model] as { model?: unknown })
- .model;
- });
- });
-
- Object.keys(embeddingModelProviders).forEach((provider) => {
- Object.keys(embeddingModelProviders[provider]).forEach((model) => {
- delete (embeddingModelProviders[provider][model] as { model?: unknown })
- .model;
- });
- });
-
- return Response.json(
- {
- chatModelProviders,
- embeddingModelProviders,
- },
- {
- status: 200,
- },
- );
- } catch (err) {
- console.error('An error occurred while fetching models', err);
- return Response.json(
- {
- message: 'An error has occurred.',
- },
- {
- status: 500,
- },
- );
- }
-};
diff --git a/src/app/api/search/route.ts b/src/app/api/search/route.ts
deleted file mode 100644
index 5f752ec..0000000
--- a/src/app/api/search/route.ts
+++ /dev/null
@@ -1,269 +0,0 @@
-import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import type { Embeddings } from '@langchain/core/embeddings';
-import { ChatOpenAI } from '@langchain/openai';
-import {
- getAvailableChatModelProviders,
- getAvailableEmbeddingModelProviders,
-} from '@/lib/providers';
-import { AIMessage, BaseMessage, HumanMessage } from '@langchain/core/messages';
-import { MetaSearchAgentType } from '@/lib/search/metaSearchAgent';
-import {
- getCustomOpenaiApiKey,
- getCustomOpenaiApiUrl,
- getCustomOpenaiModelName,
-} from '@/lib/config';
-import { searchHandlers } from '@/lib/search';
-
-interface chatModel {
- provider: string;
- name: string;
- customOpenAIKey?: string;
- customOpenAIBaseURL?: string;
-}
-
-interface embeddingModel {
- provider: string;
- name: string;
-}
-
-interface ChatRequestBody {
- optimizationMode: 'speed' | 'balanced';
- focusMode: string;
- chatModel?: chatModel;
- embeddingModel?: embeddingModel;
- query: string;
- history: Array<[string, string]>;
- stream?: boolean;
- systemInstructions?: string;
-}
-
-export const POST = async (req: Request) => {
- try {
- const body: ChatRequestBody = await req.json();
-
- if (!body.focusMode || !body.query) {
- return Response.json(
- { message: 'Missing focus mode or query' },
- { status: 400 },
- );
- }
-
- body.history = body.history || [];
- body.optimizationMode = body.optimizationMode || 'balanced';
- body.stream = body.stream || false;
-
- const history: BaseMessage[] = body.history.map((msg) => {
- return msg[0] === 'human'
- ? new HumanMessage({ content: msg[1] })
- : new AIMessage({ content: msg[1] });
- });
-
- const [chatModelProviders, embeddingModelProviders] = await Promise.all([
- getAvailableChatModelProviders(),
- getAvailableEmbeddingModelProviders(),
- ]);
-
- const chatModelProvider =
- body.chatModel?.provider || Object.keys(chatModelProviders)[0];
- const chatModel =
- body.chatModel?.name ||
- Object.keys(chatModelProviders[chatModelProvider])[0];
-
- const embeddingModelProvider =
- body.embeddingModel?.provider || Object.keys(embeddingModelProviders)[0];
- const embeddingModel =
- body.embeddingModel?.name ||
- Object.keys(embeddingModelProviders[embeddingModelProvider])[0];
-
- let llm: BaseChatModel | undefined;
- let embeddings: Embeddings | undefined;
-
- if (body.chatModel?.provider === 'custom_openai') {
- llm = new ChatOpenAI({
- modelName: body.chatModel?.name || getCustomOpenaiModelName(),
- apiKey: body.chatModel?.customOpenAIKey || getCustomOpenaiApiKey(),
- temperature: 0.7,
- configuration: {
- baseURL:
- body.chatModel?.customOpenAIBaseURL || getCustomOpenaiApiUrl(),
- },
- }) as unknown as BaseChatModel;
- } else if (
- chatModelProviders[chatModelProvider] &&
- chatModelProviders[chatModelProvider][chatModel]
- ) {
- llm = chatModelProviders[chatModelProvider][chatModel]
- .model as unknown as BaseChatModel | undefined;
- }
-
- if (
- embeddingModelProviders[embeddingModelProvider] &&
- embeddingModelProviders[embeddingModelProvider][embeddingModel]
- ) {
- embeddings = embeddingModelProviders[embeddingModelProvider][
- embeddingModel
- ].model as Embeddings | undefined;
- }
-
- if (!llm || !embeddings) {
- return Response.json(
- { message: 'Invalid model selected' },
- { status: 400 },
- );
- }
-
- const searchHandler: MetaSearchAgentType = searchHandlers[body.focusMode];
-
- if (!searchHandler) {
- return Response.json({ message: 'Invalid focus mode' }, { status: 400 });
- }
-
- const emitter = await searchHandler.searchAndAnswer(
- body.query,
- history,
- llm,
- embeddings,
- body.optimizationMode,
- [],
- body.systemInstructions || '',
- );
-
- if (!body.stream) {
- return new Promise(
- (
- resolve: (value: Response) => void,
- reject: (value: Response) => void,
- ) => {
- let message = '';
- let sources: any[] = [];
-
- emitter.on('data', (data: string) => {
- try {
- const parsedData = JSON.parse(data);
- if (parsedData.type === 'response') {
- message += parsedData.data;
- } else if (parsedData.type === 'sources') {
- sources = parsedData.data;
- }
- } catch (error) {
- reject(
- Response.json(
- { message: 'Error parsing data' },
- { status: 500 },
- ),
- );
- }
- });
-
- emitter.on('end', () => {
- resolve(Response.json({ message, sources }, { status: 200 }));
- });
-
- emitter.on('error', (error: any) => {
- reject(
- Response.json(
- { message: 'Search error', error },
- { status: 500 },
- ),
- );
- });
- },
- );
- }
-
- const encoder = new TextEncoder();
-
- const abortController = new AbortController();
- const { signal } = abortController;
-
- const stream = new ReadableStream({
- start(controller) {
- let sources: any[] = [];
-
- controller.enqueue(
- encoder.encode(
- JSON.stringify({
- type: 'init',
- data: 'Stream connected',
- }) + '\n',
- ),
- );
-
- signal.addEventListener('abort', () => {
- emitter.removeAllListeners();
-
- try {
- controller.close();
- } catch (error) {}
- });
-
- emitter.on('data', (data: string) => {
- if (signal.aborted) return;
-
- try {
- const parsedData = JSON.parse(data);
-
- if (parsedData.type === 'response') {
- controller.enqueue(
- encoder.encode(
- JSON.stringify({
- type: 'response',
- data: parsedData.data,
- }) + '\n',
- ),
- );
- } else if (parsedData.type === 'sources') {
- sources = parsedData.data;
- controller.enqueue(
- encoder.encode(
- JSON.stringify({
- type: 'sources',
- data: sources,
- }) + '\n',
- ),
- );
- }
- } catch (error) {
- controller.error(error);
- }
- });
-
- emitter.on('end', () => {
- if (signal.aborted) return;
-
- controller.enqueue(
- encoder.encode(
- JSON.stringify({
- type: 'done',
- }) + '\n',
- ),
- );
- controller.close();
- });
-
- emitter.on('error', (error: any) => {
- if (signal.aborted) return;
-
- controller.error(error);
- });
- },
- cancel() {
- abortController.abort();
- },
- });
-
- return new Response(stream, {
- headers: {
- 'Content-Type': 'text/event-stream',
- 'Cache-Control': 'no-cache, no-transform',
- Connection: 'keep-alive',
- },
- });
- } catch (err: any) {
- console.error(`Error in getting search results: ${err.message}`);
- return Response.json(
- { message: 'An error has occurred.' },
- { status: 500 },
- );
- }
-};
diff --git a/src/app/api/suggestions/route.ts b/src/app/api/suggestions/route.ts
deleted file mode 100644
index 99179d2..0000000
--- a/src/app/api/suggestions/route.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import generateSuggestions from '@/lib/chains/suggestionGeneratorAgent';
-import {
- getCustomOpenaiApiKey,
- getCustomOpenaiApiUrl,
- getCustomOpenaiModelName,
-} from '@/lib/config';
-import { getAvailableChatModelProviders } from '@/lib/providers';
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import { AIMessage, BaseMessage, HumanMessage } from '@langchain/core/messages';
-import { ChatOpenAI } from '@langchain/openai';
-
-interface ChatModel {
- provider: string;
- model: string;
-}
-
-interface SuggestionsGenerationBody {
- chatHistory: any[];
- chatModel?: ChatModel;
-}
-
-export const POST = async (req: Request) => {
- try {
- const body: SuggestionsGenerationBody = await req.json();
-
- const chatHistory = body.chatHistory
- .map((msg: any) => {
- if (msg.role === 'user') {
- return new HumanMessage(msg.content);
- } else if (msg.role === 'assistant') {
- return new AIMessage(msg.content);
- }
- })
- .filter((msg) => msg !== undefined) as BaseMessage[];
-
- const chatModelProviders = await getAvailableChatModelProviders();
-
- const chatModelProvider =
- chatModelProviders[
- body.chatModel?.provider || Object.keys(chatModelProviders)[0]
- ];
- const chatModel =
- chatModelProvider[
- body.chatModel?.model || Object.keys(chatModelProvider)[0]
- ];
-
- let llm: BaseChatModel | undefined;
-
- if (body.chatModel?.provider === 'custom_openai') {
- llm = new ChatOpenAI({
- apiKey: getCustomOpenaiApiKey(),
- modelName: getCustomOpenaiModelName(),
- temperature: 0.7,
- configuration: {
- baseURL: getCustomOpenaiApiUrl(),
- },
- }) as unknown as BaseChatModel;
- } else if (chatModelProvider && chatModel) {
- llm = chatModel.model;
- }
-
- if (!llm) {
- return Response.json({ error: 'Invalid chat model' }, { status: 400 });
- }
-
- const suggestions = await generateSuggestions(
- {
- chat_history: chatHistory,
- },
- llm,
- );
-
- return Response.json({ suggestions }, { status: 200 });
- } catch (err) {
- console.error(`An error occurred while generating suggestions: ${err}`);
- return Response.json(
- { message: 'An error occurred while generating suggestions' },
- { status: 500 },
- );
- }
-};
diff --git a/src/app/api/uploads/route.ts b/src/app/api/uploads/route.ts
deleted file mode 100644
index 9fbaf2d..0000000
--- a/src/app/api/uploads/route.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-import { NextResponse } from 'next/server';
-import fs from 'fs';
-import path from 'path';
-import crypto from 'crypto';
-import { getAvailableEmbeddingModelProviders } from '@/lib/providers';
-import { PDFLoader } from '@langchain/community/document_loaders/fs/pdf';
-import { DocxLoader } from '@langchain/community/document_loaders/fs/docx';
-import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters';
-import { Document } from 'langchain/document';
-
-interface FileRes {
- fileName: string;
- fileExtension: string;
- fileId: string;
-}
-
-const uploadDir = path.join(process.cwd(), 'uploads');
-
-if (!fs.existsSync(uploadDir)) {
- fs.mkdirSync(uploadDir, { recursive: true });
-}
-
-const splitter = new RecursiveCharacterTextSplitter({
- chunkSize: 500,
- chunkOverlap: 100,
-});
-
-export async function POST(req: Request) {
- try {
- const formData = await req.formData();
-
- const files = formData.getAll('files') as File[];
- const embedding_model = formData.get('embedding_model');
- const embedding_model_provider = formData.get('embedding_model_provider');
-
- if (!embedding_model || !embedding_model_provider) {
- return NextResponse.json(
- { message: 'Missing embedding model or provider' },
- { status: 400 },
- );
- }
-
- const embeddingModels = await getAvailableEmbeddingModelProviders();
- const provider =
- embedding_model_provider ?? Object.keys(embeddingModels)[0];
- const embeddingModel =
- embedding_model ?? Object.keys(embeddingModels[provider as string])[0];
-
- let embeddingsModel =
- embeddingModels[provider as string]?.[embeddingModel as string]?.model;
- if (!embeddingsModel) {
- return NextResponse.json(
- { message: 'Invalid embedding model selected' },
- { status: 400 },
- );
- }
-
- const processedFiles: FileRes[] = [];
-
- await Promise.all(
- files.map(async (file: any) => {
- const fileExtension = file.name.split('.').pop();
- if (!['pdf', 'docx', 'txt'].includes(fileExtension!)) {
- return NextResponse.json(
- { message: 'File type not supported' },
- { status: 400 },
- );
- }
-
- const uniqueFileName = `${crypto.randomBytes(16).toString('hex')}.${fileExtension}`;
- const filePath = path.join(uploadDir, uniqueFileName);
-
- const buffer = Buffer.from(await file.arrayBuffer());
- fs.writeFileSync(filePath, new Uint8Array(buffer));
-
- let docs: any[] = [];
- if (fileExtension === 'pdf') {
- const loader = new PDFLoader(filePath);
- docs = await loader.load();
- } else if (fileExtension === 'docx') {
- const loader = new DocxLoader(filePath);
- docs = await loader.load();
- } else if (fileExtension === 'txt') {
- const text = fs.readFileSync(filePath, 'utf-8');
- docs = [
- new Document({ pageContent: text, metadata: { title: file.name } }),
- ];
- }
-
- const splitted = await splitter.splitDocuments(docs);
-
- const extractedDataPath = filePath.replace(/\.\w+$/, '-extracted.json');
- fs.writeFileSync(
- extractedDataPath,
- JSON.stringify({
- title: file.name,
- contents: splitted.map((doc) => doc.pageContent),
- }),
- );
-
- const embeddings = await embeddingsModel.embedDocuments(
- splitted.map((doc) => doc.pageContent),
- );
- const embeddingsDataPath = filePath.replace(
- /\.\w+$/,
- '-embeddings.json',
- );
- fs.writeFileSync(
- embeddingsDataPath,
- JSON.stringify({
- title: file.name,
- embeddings,
- }),
- );
-
- processedFiles.push({
- fileName: file.name,
- fileExtension: fileExtension,
- fileId: uniqueFileName.replace(/\.\w+$/, ''),
- });
- }),
- );
-
- return NextResponse.json({
- files: processedFiles,
- });
- } catch (error) {
- console.error('Error uploading file:', error);
- return NextResponse.json(
- { message: 'An error has occurred.' },
- { status: 500 },
- );
- }
-}
diff --git a/src/app/api/videos/route.ts b/src/app/api/videos/route.ts
deleted file mode 100644
index 7e8288b..0000000
--- a/src/app/api/videos/route.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import handleVideoSearch from '@/lib/chains/videoSearchAgent';
-import {
- getCustomOpenaiApiKey,
- getCustomOpenaiApiUrl,
- getCustomOpenaiModelName,
-} from '@/lib/config';
-import { getAvailableChatModelProviders } from '@/lib/providers';
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import { AIMessage, BaseMessage, HumanMessage } from '@langchain/core/messages';
-import { ChatOpenAI } from '@langchain/openai';
-
-interface ChatModel {
- provider: string;
- model: string;
-}
-
-interface VideoSearchBody {
- query: string;
- chatHistory: any[];
- chatModel?: ChatModel;
-}
-
-export const POST = async (req: Request) => {
- try {
- const body: VideoSearchBody = await req.json();
-
- const chatHistory = body.chatHistory
- .map((msg: any) => {
- if (msg.role === 'user') {
- return new HumanMessage(msg.content);
- } else if (msg.role === 'assistant') {
- return new AIMessage(msg.content);
- }
- })
- .filter((msg) => msg !== undefined) as BaseMessage[];
-
- const chatModelProviders = await getAvailableChatModelProviders();
-
- const chatModelProvider =
- chatModelProviders[
- body.chatModel?.provider || Object.keys(chatModelProviders)[0]
- ];
- const chatModel =
- chatModelProvider[
- body.chatModel?.model || Object.keys(chatModelProvider)[0]
- ];
-
- let llm: BaseChatModel | undefined;
-
- if (body.chatModel?.provider === 'custom_openai') {
- llm = new ChatOpenAI({
- apiKey: getCustomOpenaiApiKey(),
- modelName: getCustomOpenaiModelName(),
- temperature: 0.7,
- configuration: {
- baseURL: getCustomOpenaiApiUrl(),
- },
- }) as unknown as BaseChatModel;
- } else if (chatModelProvider && chatModel) {
- llm = chatModel.model;
- }
-
- if (!llm) {
- return Response.json({ error: 'Invalid chat model' }, { status: 400 });
- }
-
- const videos = await handleVideoSearch(
- {
- chat_history: chatHistory,
- query: body.query,
- },
- llm,
- );
-
- return Response.json({ videos }, { status: 200 });
- } catch (err) {
- console.error(`An error occurred while searching videos: ${err}`);
- return Response.json(
- { message: 'An error occurred while searching videos' },
- { status: 500 },
- );
- }
-};
diff --git a/src/app/api/weather/route.ts b/src/app/api/weather/route.ts
deleted file mode 100644
index afaf8a6..0000000
--- a/src/app/api/weather/route.ts
+++ /dev/null
@@ -1,174 +0,0 @@
-export const POST = async (req: Request) => {
- try {
- const body: {
- lat: number;
- lng: number;
- measureUnit: 'Imperial' | 'Metric';
- } = await req.json();
-
- if (!body.lat || !body.lng) {
- return Response.json(
- {
- message: 'Invalid request.',
- },
- { status: 400 },
- );
- }
-
- const res = await fetch(
- `https://api.open-meteo.com/v1/forecast?latitude=${body.lat}&longitude=${body.lng}¤t=weather_code,temperature_2m,is_day,relative_humidity_2m,wind_speed_10m&timezone=auto${
- body.measureUnit === 'Metric' ? '' : '&temperature_unit=fahrenheit'
- }${body.measureUnit === 'Metric' ? '' : '&wind_speed_unit=mph'}`,
- );
-
- const data = await res.json();
-
- if (data.error) {
- console.error(`Error fetching weather data: ${data.reason}`);
- return Response.json(
- {
- message: 'An error has occurred.',
- },
- { status: 500 },
- );
- }
-
- const weather: {
- temperature: number;
- condition: string;
- humidity: number;
- windSpeed: number;
- icon: string;
- temperatureUnit: 'C' | 'F';
- windSpeedUnit: 'm/s' | 'mph';
- } = {
- temperature: data.current.temperature_2m,
- condition: '',
- humidity: data.current.relative_humidity_2m,
- windSpeed: data.current.wind_speed_10m,
- icon: '',
- temperatureUnit: body.measureUnit === 'Metric' ? 'C' : 'F',
- windSpeedUnit: body.measureUnit === 'Metric' ? 'm/s' : 'mph',
- };
-
- const code = data.current.weather_code;
- const isDay = data.current.is_day === 1;
- const dayOrNight = isDay ? 'day' : 'night';
-
- switch (code) {
- case 0:
- weather.icon = `clear-${dayOrNight}`;
- weather.condition = 'Clear';
- break;
-
- case 1:
- weather.condition = 'Mainly Clear';
- case 2:
- weather.condition = 'Partly Cloudy';
- case 3:
- weather.icon = `cloudy-1-${dayOrNight}`;
- weather.condition = 'Cloudy';
- break;
-
- case 45:
- weather.condition = 'Fog';
- case 48:
- weather.icon = `fog-${dayOrNight}`;
- weather.condition = 'Fog';
- break;
-
- case 51:
- weather.condition = 'Light Drizzle';
- case 53:
- weather.condition = 'Moderate Drizzle';
- case 55:
- weather.icon = `rainy-1-${dayOrNight}`;
- weather.condition = 'Dense Drizzle';
- break;
-
- case 56:
- weather.condition = 'Light Freezing Drizzle';
- case 57:
- weather.icon = `frost-${dayOrNight}`;
- weather.condition = 'Dense Freezing Drizzle';
- break;
-
- case 61:
- weather.condition = 'Slight Rain';
- case 63:
- weather.condition = 'Moderate Rain';
- case 65:
- weather.condition = 'Heavy Rain';
- weather.icon = `rainy-2-${dayOrNight}`;
- break;
-
- case 66:
- weather.condition = 'Light Freezing Rain';
- case 67:
- weather.condition = 'Heavy Freezing Rain';
- weather.icon = 'rain-and-sleet-mix';
- break;
-
- case 71:
- weather.condition = 'Slight Snow Fall';
- case 73:
- weather.condition = 'Moderate Snow Fall';
- case 75:
- weather.condition = 'Heavy Snow Fall';
- weather.icon = `snowy-2-${dayOrNight}`;
- break;
-
- case 77:
- weather.condition = 'Snow';
- weather.icon = `snowy-1-${dayOrNight}`;
- break;
-
- case 80:
- weather.condition = 'Slight Rain Showers';
- case 81:
- weather.condition = 'Moderate Rain Showers';
- case 82:
- weather.condition = 'Heavy Rain Showers';
- weather.icon = `rainy-3-${dayOrNight}`;
- break;
-
- case 85:
- weather.condition = 'Slight Snow Showers';
- case 86:
- weather.condition = 'Moderate Snow Showers';
- case 87:
- weather.condition = 'Heavy Snow Showers';
- weather.icon = `snowy-3-${dayOrNight}`;
- break;
-
- case 95:
- weather.condition = 'Thunderstorm';
- weather.icon = `scattered-thunderstorms-${dayOrNight}`;
- break;
-
- case 96:
- weather.condition = 'Thunderstorm with Slight Hail';
- case 99:
- weather.condition = 'Thunderstorm with Heavy Hail';
- weather.icon = 'severe-thunderstorm';
- break;
-
- default:
- weather.icon = `clear-${dayOrNight}`;
- weather.condition = 'Clear';
- break;
- }
-
- return Response.json(weather);
- } catch (err) {
- console.error('An error occurred while getting home widgets', err);
- return Response.json(
- {
- message: 'An error has occurred.',
- },
- {
- status: 500,
- },
- );
- }
-};
diff --git a/src/app/c/[chatId]/page.tsx b/src/app/c/[chatId]/page.tsx
deleted file mode 100644
index 672107a..0000000
--- a/src/app/c/[chatId]/page.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-'use client';
-
-import ChatWindow from '@/components/ChatWindow';
-import { useParams } from 'next/navigation';
-import React from 'react';
-import { ChatProvider } from '@/lib/hooks/useChat';
-
-const Page = () => {
- const { chatId }: { chatId: string } = useParams();
- return (
-
-
-
- );
-};
-
-export default Page;
diff --git a/src/app/discover/page.tsx b/src/app/discover/page.tsx
deleted file mode 100644
index 8e20e50..0000000
--- a/src/app/discover/page.tsx
+++ /dev/null
@@ -1,158 +0,0 @@
-'use client';
-
-import { Search } from 'lucide-react';
-import { useEffect, useState } from 'react';
-import Link from 'next/link';
-import { toast } from 'sonner';
-import { cn } from '@/lib/utils';
-
-interface Discover {
- title: string;
- content: string;
- url: string;
- thumbnail: string;
-}
-
-const topics: { key: string; display: string }[] = [
- {
- display: 'Tech & Science',
- key: 'tech',
- },
- {
- display: 'Finance',
- key: 'finance',
- },
- {
- display: 'Art & Culture',
- key: 'art',
- },
- {
- display: 'Sports',
- key: 'sports',
- },
- {
- display: 'Entertainment',
- key: 'entertainment',
- },
-];
-
-const Page = () => {
- const [discover, setDiscover] = useState(null);
- const [loading, setLoading] = useState(true);
- const [activeTopic, setActiveTopic] = useState(topics[0].key);
-
- const fetchArticles = async (topic: string) => {
- setLoading(true);
- try {
- const res = await fetch(`/api/discover?topic=${topic}`, {
- method: 'GET',
- headers: {
- 'Content-Type': 'application/json',
- },
- });
-
- const data = await res.json();
-
- if (!res.ok) {
- throw new Error(data.message);
- }
-
- data.blogs = data.blogs.filter((blog: Discover) => blog.thumbnail);
-
- setDiscover(data.blogs);
- } catch (err: any) {
- console.error('Error fetching data:', err.message);
- toast.error('Error fetching data');
- } finally {
- setLoading(false);
- }
- };
-
- useEffect(() => {
- fetchArticles(activeTopic);
- }, [activeTopic]);
-
- return (
- <>
-
-
-
-
- {topics.map((t, i) => (
-
setActiveTopic(t.key)}
- >
- {t.display}
-
- ))}
-
-
- {loading ? (
-
- ) : (
-
- {discover &&
- discover?.map((item, i) => (
-
-
-
-
- {item.title.slice(0, 100)}...
-
-
- {item.content.slice(0, 100)}...
-
-
-
- ))}
-
- )}
-
- >
- );
-};
-
-export default Page;
diff --git a/src/app/manifest.ts b/src/app/manifest.ts
deleted file mode 100644
index 792e752..0000000
--- a/src/app/manifest.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import type { MetadataRoute } from 'next';
-
-export default function manifest(): MetadataRoute.Manifest {
- return {
- name: 'Perplexica - Chat with the internet',
- short_name: 'Perplexica',
- description:
- 'Perplexica is an AI powered chatbot that is connected to the internet.',
- start_url: '/',
- display: 'standalone',
- background_color: '#0a0a0a',
- theme_color: '#0a0a0a',
- screenshots: [
- {
- src: '/screenshots/p1.png',
- form_factor: 'wide',
- sizes: '2560x1600',
- },
- {
- src: '/screenshots/p2.png',
- form_factor: 'wide',
- sizes: '2560x1600',
- },
- {
- src: '/screenshots/p1_small.png',
- form_factor: 'narrow',
- sizes: '828x1792',
- },
- {
- src: '/screenshots/p2_small.png',
- form_factor: 'narrow',
- sizes: '828x1792',
- },
- ],
- icons: [
- {
- src: '/icon-50.png',
- sizes: '50x50',
- type: 'image/png' as const,
- },
- {
- src: '/icon-100.png',
- sizes: '100x100',
- type: 'image/png',
- },
- {
- src: '/icon.png',
- sizes: '440x440',
- type: 'image/png',
- purpose: 'any',
- },
- ],
- };
-}
diff --git a/src/chains/imageSearchAgent.ts b/src/chains/imageSearchAgent.ts
new file mode 100644
index 0000000..01f4ada
--- /dev/null
+++ b/src/chains/imageSearchAgent.ts
@@ -0,0 +1,171 @@
+import {
+ RunnableSequence,
+ RunnableMap,
+ RunnableLambda,
+} from '@langchain/core/runnables';
+import { PromptTemplate } from '@langchain/core/prompts';
+import formatChatHistoryAsString from '../utils/formatHistory';
+import { BaseMessage } from '@langchain/core/messages';
+import { StringOutputParser } from '@langchain/core/output_parsers';
+import { searchSearxng } from '../lib/searchEngines/searxng';
+import { searchGooglePSE } from '../lib/searchEngines/google_pse';
+import { searchBraveAPI } from '../lib/searchEngines/brave';
+import { searchYaCy } from '../lib/searchEngines/yacy';
+import { searchBingAPI } from '../lib/searchEngines/bing';
+import { getImageSearchEngineBackend } from '../config';
+import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
+
+const imageSearchChainPrompt = `
+You will be given a conversation below and a follow up question. You need to rephrase the follow-up question so it is a standalone question that can be used by the LLM to search the web for images.
+You need to make sure the rephrased question agrees with the conversation and is relevant to the conversation.
+
+Example:
+1. Follow up question: What is a cat?
+Rephrased: A cat
+
+2. Follow up question: What is a car? How does it works?
+Rephrased: Car working
+
+3. Follow up question: How does an AC work?
+Rephrased: AC working
+
+Conversation:
+{chat_history}
+
+Follow up question: {query}
+Rephrased question:
+`;
+
+type ImageSearchChainInput = {
+ chat_history: BaseMessage[];
+ query: string;
+};
+
+async function performImageSearch(query: string) {
+ const searchEngine = getImageSearchEngineBackend();
+ let images = [];
+
+ switch (searchEngine) {
+ case 'google': {
+ const googleResult = await searchGooglePSE(query);
+ images = googleResult.results
+ .map((result) => {
+ if (result.img_src && result.url && result.title) {
+ return {
+ img_src: result.img_src,
+ url: result.url,
+ title: result.title,
+ source: result.displayLink,
+ };
+ }
+ })
+ .filter(Boolean);
+ break;
+ }
+
+ case 'searxng': {
+ const searxResult = await searchSearxng(query, {
+ engines: ['google images', 'bing images'],
+ pageno: 1,
+ });
+ searxResult.results.forEach((result) => {
+ if (result.img_src && result.url && result.title) {
+ images.push({
+ img_src: result.img_src,
+ url: result.url,
+ title: result.title,
+ });
+ }
+ });
+ break;
+ }
+
+ case 'brave': {
+ const braveResult = await searchBraveAPI(query);
+ images = braveResult.results
+ .map((result) => {
+ if (result.img_src && result.url && result.title) {
+ return {
+ img_src: result.img_src,
+ url: result.url,
+ title: result.title,
+ source: result.url,
+ };
+ }
+ })
+ .filter(Boolean);
+ break;
+ }
+
+ case 'yacy': {
+ const yacyResult = await searchYaCy(query);
+ images = yacyResult.results
+ .map((result) => {
+ if (result.img_src && result.url && result.title) {
+ return {
+ img_src: result.img_src,
+ url: result.url,
+ title: result.title,
+ source: result.url,
+ };
+ }
+ })
+ .filter(Boolean);
+ break;
+ }
+
+ case 'bing': {
+ const bingResult = await searchBingAPI(query);
+ images = bingResult.results
+ .map((result) => {
+ if (result.img_src && result.url && result.title) {
+ return {
+ img_src: result.img_src,
+ url: result.url,
+ title: result.title,
+ source: result.url,
+ };
+ }
+ })
+ .filter(Boolean);
+ break;
+ }
+
+ default:
+ throw new Error(`Unknown search engine ${searchEngine}`);
+ }
+
+ return images;
+}
+
+const strParser = new StringOutputParser();
+
+const createImageSearchChain = (llm: BaseChatModel) => {
+ return RunnableSequence.from([
+ RunnableMap.from({
+ chat_history: (input: ImageSearchChainInput) => {
+ return formatChatHistoryAsString(input.chat_history);
+ },
+ query: (input: ImageSearchChainInput) => {
+ return input.query;
+ },
+ }),
+ PromptTemplate.fromTemplate(imageSearchChainPrompt),
+ llm,
+ strParser,
+ RunnableLambda.from(async (input: string) => {
+ const images = await performImageSearch(input);
+ return images.slice(0, 10);
+ }),
+ ]);
+};
+
+const handleImageSearch = (
+ input: ImageSearchChainInput,
+ llm: BaseChatModel,
+) => {
+ const imageSearchChain = createImageSearchChain(llm);
+ return imageSearchChain.invoke(input);
+};
+
+export default handleImageSearch;
diff --git a/src/lib/chains/suggestionGeneratorAgent.ts b/src/chains/suggestionGeneratorAgent.ts
similarity index 96%
rename from src/lib/chains/suggestionGeneratorAgent.ts
rename to src/chains/suggestionGeneratorAgent.ts
index 9129059..6ba255d 100644
--- a/src/lib/chains/suggestionGeneratorAgent.ts
+++ b/src/chains/suggestionGeneratorAgent.ts
@@ -1,5 +1,5 @@
import { RunnableSequence, RunnableMap } from '@langchain/core/runnables';
-import ListLineOutputParser from '../outputParsers/listLineOutputParser';
+import ListLineOutputParser from '../lib/outputParsers/listLineOutputParser';
import { PromptTemplate } from '@langchain/core/prompts';
import formatChatHistoryAsString from '../utils/formatHistory';
import { BaseMessage } from '@langchain/core/messages';
diff --git a/src/chains/videoSearchAgent.ts b/src/chains/videoSearchAgent.ts
new file mode 100644
index 0000000..331b8c8
--- /dev/null
+++ b/src/chains/videoSearchAgent.ts
@@ -0,0 +1,169 @@
+import {
+ RunnableSequence,
+ RunnableMap,
+ RunnableLambda,
+} from '@langchain/core/runnables';
+import { PromptTemplate } from '@langchain/core/prompts';
+import formatChatHistoryAsString from '../utils/formatHistory';
+import { BaseMessage } from '@langchain/core/messages';
+import { StringOutputParser } from '@langchain/core/output_parsers';
+import { searchSearxng } from '../lib/searchEngines/searxng';
+import { searchGooglePSE } from '../lib/searchEngines/google_pse';
+import { searchBraveAPI } from '../lib/searchEngines/brave';
+import { searchBingAPI } from '../lib/searchEngines/bing';
+import { getVideoSearchEngineBackend } from '../config';
+import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
+
+const VideoSearchChainPrompt = `
+ You will be given a conversation below and a follow up question. You need to rephrase the follow-up question so it is a standalone question that can be used by the LLM to search Youtube for videos.
+ You need to make sure the rephrased question agrees with the conversation and is relevant to the conversation.
+
+ Example:
+ 1. Follow up question: How does a car work?
+ Rephrased: How does a car work?
+
+ 2. Follow up question: What is the theory of relativity?
+ Rephrased: What is theory of relativity
+
+ 3. Follow up question: How does an AC work?
+ Rephrased: How does an AC work
+
+ Conversation:
+ {chat_history}
+
+ Follow up question: {query}
+ Rephrased question:
+ `;
+
+type VideoSearchChainInput = {
+ chat_history: BaseMessage[];
+ query: string;
+};
+
+const strParser = new StringOutputParser();
+
+async function performVideoSearch(query: string) {
+ const searchEngine = getVideoSearchEngineBackend();
+ const youtubeQuery = `${query} site:youtube.com`;
+ let videos = [];
+
+ switch (searchEngine) {
+ case 'google': {
+ const googleResult = await searchGooglePSE(youtubeQuery);
+ googleResult.results.forEach((result) => {
+ // Use .results instead of .originalres
+ if (result.img_src && result.url && result.title) {
+ const videoId = new URL(result.url).searchParams.get('v');
+ videos.push({
+ img_src: result.img_src,
+ url: result.url,
+ title: result.title,
+ iframe_src: videoId
+ ? `https://www.youtube.com/embed/${videoId}`
+ : null,
+ });
+ }
+ });
+ break;
+ }
+
+ case 'searxng': {
+ const searxResult = await searchSearxng(query, {
+ engines: ['youtube'],
+ });
+ searxResult.results.forEach((result) => {
+ if (
+ result.thumbnail &&
+ result.url &&
+ result.title &&
+ result.iframe_src
+ ) {
+ videos.push({
+ img_src: result.thumbnail,
+ url: result.url,
+ title: result.title,
+ iframe_src: result.iframe_src,
+ });
+ }
+ });
+ break;
+ }
+
+ case 'brave': {
+ const braveResult = await searchBraveAPI(youtubeQuery);
+ braveResult.results.forEach((result) => {
+ if (result.img_src && result.url && result.title) {
+ const videoId = new URL(result.url).searchParams.get('v');
+ videos.push({
+ img_src: result.img_src,
+ url: result.url,
+ title: result.title,
+ iframe_src: videoId
+ ? `https://www.youtube.com/embed/${videoId}`
+ : null,
+ });
+ }
+ });
+ break;
+ }
+
+ case 'yacy': {
+ console.log('Not available for yacy');
+ videos = [];
+ break;
+ }
+
+ case 'bing': {
+ const bingResult = await searchBingAPI(youtubeQuery);
+ bingResult.results.forEach((result) => {
+ if (result.img_src && result.url && result.title) {
+ const videoId = new URL(result.url).searchParams.get('v');
+ videos.push({
+ img_src: result.img_src,
+ url: result.url,
+ title: result.title,
+ iframe_src: videoId
+ ? `https://www.youtube.com/embed/${videoId}`
+ : null,
+ });
+ }
+ });
+ break;
+ }
+
+ default:
+ throw new Error(`Unknown search engine ${searchEngine}`);
+ }
+
+ return videos;
+}
+
+const createVideoSearchChain = (llm: BaseChatModel) => {
+ return RunnableSequence.from([
+ RunnableMap.from({
+ chat_history: (input: VideoSearchChainInput) => {
+ return formatChatHistoryAsString(input.chat_history);
+ },
+ query: (input: VideoSearchChainInput) => {
+ return input.query;
+ },
+ }),
+ PromptTemplate.fromTemplate(VideoSearchChainPrompt),
+ llm,
+ strParser,
+ RunnableLambda.from(async (input: string) => {
+ const videos = await performVideoSearch(input);
+ return videos.slice(0, 10);
+ }),
+ ]);
+};
+
+const handleVideoSearch = (
+ input: VideoSearchChainInput,
+ llm: BaseChatModel,
+) => {
+ const VideoSearchChain = createVideoSearchChain(llm);
+ return VideoSearchChain.invoke(input);
+};
+
+export default handleVideoSearch;
diff --git a/src/components/ChatWindow.tsx b/src/components/ChatWindow.tsx
deleted file mode 100644
index 0d40c83..0000000
--- a/src/components/ChatWindow.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-'use client';
-
-import { Document } from '@langchain/core/documents';
-import Navbar from './Navbar';
-import Chat from './Chat';
-import EmptyChat from './EmptyChat';
-import { Settings } from 'lucide-react';
-import Link from 'next/link';
-import NextError from 'next/error';
-import { useChat } from '@/lib/hooks/useChat';
-
-export type Message = {
- messageId: string;
- chatId: string;
- createdAt: Date;
- content: string;
- role: 'user' | 'assistant';
- suggestions?: string[];
- sources?: Document[];
-};
-
-export interface File {
- fileName: string;
- fileExtension: string;
- fileId: string;
-}
-
-const ChatWindow = () => {
- const { hasError, isReady, notFound, messages } = useChat();
- if (hasError) {
- return (
-
-
-
-
-
-
-
-
- Failed to connect to the server. Please try again later.
-
-
-
- );
- }
-
- return isReady ? (
- notFound ? (
-
- ) : (
-
- {messages.length > 0 ? (
- <>
-
-
- >
- ) : (
-
- )}
-
- )
- ) : (
-
- );
-};
-
-export default ChatWindow;
diff --git a/src/components/EmptyChat.tsx b/src/components/EmptyChat.tsx
deleted file mode 100644
index e40a338..0000000
--- a/src/components/EmptyChat.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import { Settings } from 'lucide-react';
-import EmptyChatMessageInput from './EmptyChatMessageInput';
-import { File } from './ChatWindow';
-import Link from 'next/link';
-import WeatherWidget from './WeatherWidget';
-import NewsArticleWidget from './NewsArticleWidget';
-
-const EmptyChat = () => {
- return (
-
-
-
-
-
-
-
-
-
- Research begins here.
-
-
-
-
-
-
- );
-};
-
-export default EmptyChat;
diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx
deleted file mode 100644
index b0e8ea6..0000000
--- a/src/components/Navbar.tsx
+++ /dev/null
@@ -1,212 +0,0 @@
-import { Clock, Edit, Share, Trash, FileText, FileDown } from 'lucide-react';
-import { Message } from './ChatWindow';
-import { useEffect, useState, Fragment } from 'react';
-import { formatTimeDifference } from '@/lib/utils';
-import DeleteChat from './DeleteChat';
-import {
- Popover,
- PopoverButton,
- PopoverPanel,
- Transition,
-} from '@headlessui/react';
-import jsPDF from 'jspdf';
-import { useChat } from '@/lib/hooks/useChat';
-
-const downloadFile = (filename: string, content: string, type: string) => {
- const blob = new Blob([content], { type });
- const url = URL.createObjectURL(blob);
- const a = document.createElement('a');
- a.href = url;
- a.download = filename;
- document.body.appendChild(a);
- a.click();
- setTimeout(() => {
- document.body.removeChild(a);
- URL.revokeObjectURL(url);
- }, 0);
-};
-
-const exportAsMarkdown = (messages: Message[], title: string) => {
- const date = new Date(messages[0]?.createdAt || Date.now()).toLocaleString();
- let md = `# 💬 Chat Export: ${title}\n\n`;
- md += `*Exported on: ${date}*\n\n---\n`;
- messages.forEach((msg, idx) => {
- md += `\n---\n`;
- md += `**${msg.role === 'user' ? '🧑 User' : '🤖 Assistant'}**
-`;
- md += `*${new Date(msg.createdAt).toLocaleString()}*\n\n`;
- md += `> ${msg.content.replace(/\n/g, '\n> ')}\n`;
- if (msg.sources && msg.sources.length > 0) {
- md += `\n**Citations:**\n`;
- msg.sources.forEach((src: any, i: number) => {
- const url = src.metadata?.url || '';
- md += `- [${i + 1}] [${url}](${url})\n`;
- });
- }
- });
- md += '\n---\n';
- downloadFile(`${title || 'chat'}.md`, md, 'text/markdown');
-};
-
-const exportAsPDF = (messages: Message[], title: string) => {
- const doc = new jsPDF();
- const date = new Date(messages[0]?.createdAt || Date.now()).toLocaleString();
- let y = 15;
- const pageHeight = doc.internal.pageSize.height;
- doc.setFontSize(18);
- doc.text(`Chat Export: ${title}`, 10, y);
- y += 8;
- doc.setFontSize(11);
- doc.setTextColor(100);
- doc.text(`Exported on: ${date}`, 10, y);
- y += 8;
- doc.setDrawColor(200);
- doc.line(10, y, 200, y);
- y += 6;
- doc.setTextColor(30);
- messages.forEach((msg, idx) => {
- if (y > pageHeight - 30) {
- doc.addPage();
- y = 15;
- }
- doc.setFont('helvetica', 'bold');
- doc.text(`${msg.role === 'user' ? 'User' : 'Assistant'}`, 10, y);
- doc.setFont('helvetica', 'normal');
- doc.setFontSize(10);
- doc.setTextColor(120);
- doc.text(`${new Date(msg.createdAt).toLocaleString()}`, 40, y);
- y += 6;
- doc.setTextColor(30);
- doc.setFontSize(12);
- const lines = doc.splitTextToSize(msg.content, 180);
- for (let i = 0; i < lines.length; i++) {
- if (y > pageHeight - 20) {
- doc.addPage();
- y = 15;
- }
- doc.text(lines[i], 12, y);
- y += 6;
- }
- if (msg.sources && msg.sources.length > 0) {
- doc.setFontSize(11);
- doc.setTextColor(80);
- if (y > pageHeight - 20) {
- doc.addPage();
- y = 15;
- }
- doc.text('Citations:', 12, y);
- y += 5;
- msg.sources.forEach((src: any, i: number) => {
- const url = src.metadata?.url || '';
- if (y > pageHeight - 15) {
- doc.addPage();
- y = 15;
- }
- doc.text(`- [${i + 1}] ${url}`, 15, y);
- y += 5;
- });
- doc.setTextColor(30);
- }
- y += 6;
- doc.setDrawColor(230);
- if (y > pageHeight - 10) {
- doc.addPage();
- y = 15;
- }
- doc.line(10, y, 200, y);
- y += 4;
- });
- doc.save(`${title || 'chat'}.pdf`);
-};
-
-const Navbar = () => {
- const [title, setTitle] = useState('');
- const [timeAgo, setTimeAgo] = useState('');
-
- const { messages, chatId } = useChat();
-
- useEffect(() => {
- if (messages.length > 0) {
- const newTitle =
- messages[0].content.length > 20
- ? `${messages[0].content.substring(0, 20).trim()}...`
- : messages[0].content;
- setTitle(newTitle);
- const newTimeAgo = formatTimeDifference(
- new Date(),
- messages[0].createdAt,
- );
- setTimeAgo(newTimeAgo);
- }
- }, [messages]);
-
- useEffect(() => {
- const intervalId = setInterval(() => {
- if (messages.length > 0) {
- const newTimeAgo = formatTimeDifference(
- new Date(),
- messages[0].createdAt,
- );
- setTimeAgo(newTimeAgo);
- }
- }, 1000);
-
- return () => clearInterval(intervalId);
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
-
- return (
-
-
-
-
-
-
{title}
-
-
-
-
-
-
-
-
-
- exportAsMarkdown(messages, title || '')}
- >
-
- Export as Markdown
-
- exportAsPDF(messages, title || '')}
- >
-
- Export as PDF
-
-
-
-
-
-
{}} />
-
-
- );
-};
-
-export default Navbar;
diff --git a/src/components/NewsArticleWidget.tsx b/src/components/NewsArticleWidget.tsx
deleted file mode 100644
index eca6940..0000000
--- a/src/components/NewsArticleWidget.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import { useEffect, useState } from 'react';
-
-interface Article {
- title: string;
- content: string;
- url: string;
- thumbnail: string;
-}
-
-const NewsArticleWidget = () => {
- const [article, setArticle] = useState(null);
- const [loading, setLoading] = useState(true);
- const [error, setError] = useState(false);
-
- useEffect(() => {
- fetch('/api/discover?mode=preview')
- .then((res) => res.json())
- .then((data) => {
- const articles = (data.blogs || []).filter((a: Article) => a.thumbnail);
- setArticle(articles[Math.floor(Math.random() * articles.length)]);
- setLoading(false);
- })
- .catch(() => {
- setError(true);
- setLoading(false);
- });
- }, []);
-
- return (
-
- );
-};
-
-export default NewsArticleWidget;
diff --git a/src/components/ThinkBox.tsx b/src/components/ThinkBox.tsx
deleted file mode 100644
index f830945..0000000
--- a/src/components/ThinkBox.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-'use client';
-
-import { useEffect, useState } from 'react';
-import { ChevronDown, ChevronUp, BrainCircuit } from 'lucide-react';
-
-interface ThinkBoxProps {
- content: string;
- thinkingEnded: boolean;
-}
-
-const ThinkBox = ({ content, thinkingEnded }: ThinkBoxProps) => {
- const [isExpanded, setIsExpanded] = useState(true);
-
- useEffect(() => {
- if (thinkingEnded) {
- setIsExpanded(false);
- } else {
- setIsExpanded(true);
- }
- }, [thinkingEnded]);
-
- return (
-
-
setIsExpanded(!isExpanded)}
- className="w-full flex items-center justify-between px-4 py-1 text-black/90 dark:text-white/90 hover:bg-light-200 dark:hover:bg-dark-200 transition duration-200"
- >
-
- {isExpanded ? (
-
- ) : (
-
- )}
-
-
- {isExpanded && (
-
- {content}
-
- )}
-
- );
-};
-
-export default ThinkBox;
diff --git a/src/components/WeatherWidget.tsx b/src/components/WeatherWidget.tsx
deleted file mode 100644
index 8eaf871..0000000
--- a/src/components/WeatherWidget.tsx
+++ /dev/null
@@ -1,161 +0,0 @@
-import { Cloud, Sun, CloudRain, CloudSnow, Wind } from 'lucide-react';
-import { useEffect, useState } from 'react';
-
-const WeatherWidget = () => {
- const [data, setData] = useState({
- temperature: 0,
- condition: '',
- location: '',
- humidity: 0,
- windSpeed: 0,
- icon: '',
- temperatureUnit: 'C',
- windSpeedUnit: 'm/s',
- });
-
- const [loading, setLoading] = useState(true);
-
- useEffect(() => {
- const getApproxLocation = async () => {
- const res = await fetch('https://ipwhois.app/json/');
- const data = await res.json();
-
- return {
- latitude: data.latitude,
- longitude: data.longitude,
- city: data.city,
- };
- };
-
- const getLocation = async (
- callback: (location: {
- latitude: number;
- longitude: number;
- city: string;
- }) => void,
- ) => {
- if (navigator.geolocation) {
- const result = await navigator.permissions.query({
- name: 'geolocation',
- });
-
- if (result.state === 'granted') {
- navigator.geolocation.getCurrentPosition(async (position) => {
- const res = await fetch(
- `https://api-bdc.io/data/reverse-geocode-client?latitude=${position.coords.latitude}&longitude=${position.coords.longitude}&localityLanguage=en`,
- {
- method: 'GET',
- headers: {
- 'Content-Type': 'application/json',
- },
- },
- );
-
- const data = await res.json();
-
- callback({
- latitude: position.coords.latitude,
- longitude: position.coords.longitude,
- city: data.locality,
- });
- });
- } else if (result.state === 'prompt') {
- callback(await getApproxLocation());
- navigator.geolocation.getCurrentPosition((position) => {});
- } else if (result.state === 'denied') {
- callback(await getApproxLocation());
- }
- } else {
- callback(await getApproxLocation());
- }
- };
-
- getLocation(async (location) => {
- const res = await fetch(`/api/weather`, {
- method: 'POST',
- body: JSON.stringify({
- lat: location.latitude,
- lng: location.longitude,
- measureUnit: localStorage.getItem('measureUnit') ?? 'Metric',
- }),
- });
-
- const data = await res.json();
-
- if (res.status !== 200) {
- console.error('Error fetching weather data');
- setLoading(false);
- return;
- }
-
- setData({
- temperature: data.temperature,
- condition: data.condition,
- location: location.city,
- humidity: data.humidity,
- windSpeed: data.windSpeed,
- icon: data.icon,
- temperatureUnit: data.temperatureUnit,
- windSpeedUnit: data.windSpeedUnit,
- });
- setLoading(false);
- });
- }, []);
-
- return (
-
- {loading ? (
- <>
-
-
- >
- ) : (
- <>
-
-
-
- {data.temperature}°{data.temperatureUnit}
-
-
-
-
-
- {data.location}
-
-
-
- {data.windSpeed} {data.windSpeedUnit}
-
-
-
- {data.condition}
-
-
- Humidity: {data.humidity}%
- Now
-
-
- >
- )}
-
- );
-};
-
-export default WeatherWidget;
diff --git a/src/lib/config.ts b/src/config.ts
similarity index 57%
rename from src/lib/config.ts
rename to src/config.ts
index 79d69dc..70e292b 100644
--- a/src/lib/config.ts
+++ b/src/config.ts
@@ -1,21 +1,21 @@
+import fs from 'fs';
+import path from 'path';
import toml from '@iarna/toml';
-// Use dynamic imports for Node.js modules to prevent client-side errors
-let fs: any;
-let path: any;
-if (typeof window === 'undefined') {
- // We're on the server
- fs = require('fs');
- path = require('path');
-}
-
const configFileName = 'config.toml';
interface Config {
GENERAL: {
+ PORT: number;
SIMILARITY_MEASURE: string;
KEEP_ALIVE: string;
};
+ SEARCH_ENGINE_BACKENDS: {
+ SEARCH: string;
+ IMAGE: string;
+ VIDEO: string;
+ NEWS: string;
+ };
MODELS: {
OPENAI: {
API_KEY: string;
@@ -31,16 +31,6 @@ interface Config {
};
OLLAMA: {
API_URL: string;
- API_KEY: string;
- };
- DEEPSEEK: {
- API_KEY: string;
- };
- AIMLAPI: {
- API_KEY: string;
- };
- LM_STUDIO: {
- API_URL: string;
};
CUSTOM_OPENAI: {
API_URL: string;
@@ -48,8 +38,23 @@ interface Config {
MODEL_NAME: string;
};
};
- API_ENDPOINTS: {
- SEARXNG: string;
+ SEARCH_ENGINES: {
+ GOOGLE: {
+ API_KEY: string;
+ CSE_ID: string;
+ };
+ SEARXNG: {
+ ENDPOINT: string;
+ };
+ BING: {
+ SUBSCRIPTION_KEY: string;
+ };
+ BRAVE: {
+ API_KEY: string;
+ };
+ YACY: {
+ ENDPOINT: string;
+ };
};
}
@@ -57,17 +62,12 @@ type RecursivePartial = {
[P in keyof T]?: RecursivePartial;
};
-const loadConfig = () => {
- // Server-side only
- if (typeof window === 'undefined') {
- return toml.parse(
- fs.readFileSync(path.join(process.cwd(), `${configFileName}`), 'utf-8'),
- ) as any as Config;
- }
+const loadConfig = () =>
+ toml.parse(
+ fs.readFileSync(path.join(__dirname, `../${configFileName}`), 'utf-8'),
+ ) as any as Config;
- // Client-side fallback - settings will be loaded via API
- return {} as Config;
-};
+export const getPort = () => loadConfig().GENERAL.PORT;
export const getSimilarityMeasure = () =>
loadConfig().GENERAL.SIMILARITY_MEASURE;
@@ -82,17 +82,35 @@ export const getAnthropicApiKey = () => loadConfig().MODELS.ANTHROPIC.API_KEY;
export const getGeminiApiKey = () => loadConfig().MODELS.GEMINI.API_KEY;
+export const getSearchEngineBackend = () =>
+ loadConfig().SEARCH_ENGINE_BACKENDS.SEARCH;
+
+export const getImageSearchEngineBackend = () =>
+ loadConfig().SEARCH_ENGINE_BACKENDS.IMAGE || getSearchEngineBackend();
+
+export const getVideoSearchEngineBackend = () =>
+ loadConfig().SEARCH_ENGINE_BACKENDS.VIDEO || getSearchEngineBackend();
+
+export const getNewsSearchEngineBackend = () =>
+ loadConfig().SEARCH_ENGINE_BACKENDS.NEWS || getSearchEngineBackend();
+
+export const getGoogleApiKey = () => loadConfig().SEARCH_ENGINES.GOOGLE.API_KEY;
+
+export const getGoogleCseId = () => loadConfig().SEARCH_ENGINES.GOOGLE.CSE_ID;
+
+export const getBraveApiKey = () => loadConfig().SEARCH_ENGINES.BRAVE.API_KEY;
+
+export const getBingSubscriptionKey = () =>
+ loadConfig().SEARCH_ENGINES.BING.SUBSCRIPTION_KEY;
+
+export const getYacyJsonEndpoint = () =>
+ loadConfig().SEARCH_ENGINES.YACY.ENDPOINT;
+
export const getSearxngApiEndpoint = () =>
- process.env.SEARXNG_API_URL || loadConfig().API_ENDPOINTS.SEARXNG;
+ process.env.SEARXNG_API_URL || loadConfig().SEARCH_ENGINES.SEARXNG.ENDPOINT;
export const getOllamaApiEndpoint = () => loadConfig().MODELS.OLLAMA.API_URL;
-export const getOllamaApiKey = () => loadConfig().MODELS.OLLAMA.API_KEY;
-
-export const getDeepseekApiKey = () => loadConfig().MODELS.DEEPSEEK.API_KEY;
-
-export const getAimlApiKey = () => loadConfig().MODELS.AIMLAPI.API_KEY;
-
export const getCustomOpenaiApiKey = () =>
loadConfig().MODELS.CUSTOM_OPENAI.API_KEY;
@@ -102,9 +120,6 @@ export const getCustomOpenaiApiUrl = () =>
export const getCustomOpenaiModelName = () =>
loadConfig().MODELS.CUSTOM_OPENAI.MODEL_NAME;
-export const getLMStudioApiEndpoint = () =>
- loadConfig().MODELS.LM_STUDIO.API_URL;
-
const mergeConfigs = (current: any, update: any): any => {
if (update === null || update === undefined) {
return current;
@@ -137,13 +152,11 @@ const mergeConfigs = (current: any, update: any): any => {
};
export const updateConfig = (config: RecursivePartial) => {
- // Server-side only
- if (typeof window === 'undefined') {
- const currentConfig = loadConfig();
- const mergedConfig = mergeConfigs(currentConfig, config);
- fs.writeFileSync(
- path.join(path.join(process.cwd(), `${configFileName}`)),
- toml.stringify(mergedConfig),
- );
- }
+ const currentConfig = loadConfig();
+ const mergedConfig = mergeConfigs(currentConfig, config);
+
+ fs.writeFileSync(
+ path.join(__dirname, `../${configFileName}`),
+ toml.stringify(mergedConfig),
+ );
};
diff --git a/src/lib/db/index.ts b/src/db/index.ts
similarity index 57%
rename from src/lib/db/index.ts
rename to src/db/index.ts
index 515cdb3..b431b47 100644
--- a/src/lib/db/index.ts
+++ b/src/db/index.ts
@@ -1,10 +1,8 @@
import { drizzle } from 'drizzle-orm/better-sqlite3';
import Database from 'better-sqlite3';
import * as schema from './schema';
-import path from 'path';
-const DATA_DIR = process.env.DATA_DIR || process.cwd();
-const sqlite = new Database(path.join(DATA_DIR, './data/db.sqlite'));
+const sqlite = new Database('data/db.sqlite');
const db = drizzle(sqlite, {
schema: schema,
});
diff --git a/src/lib/db/schema.ts b/src/db/schema.ts
similarity index 100%
rename from src/lib/db/schema.ts
rename to src/db/schema.ts
diff --git a/src/lib/chains/imageSearchAgent.ts b/src/lib/chains/imageSearchAgent.ts
deleted file mode 100644
index a91b7bb..0000000
--- a/src/lib/chains/imageSearchAgent.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-import {
- RunnableSequence,
- RunnableMap,
- RunnableLambda,
-} from '@langchain/core/runnables';
-import { ChatPromptTemplate } from '@langchain/core/prompts';
-import formatChatHistoryAsString from '../utils/formatHistory';
-import { BaseMessage } from '@langchain/core/messages';
-import { StringOutputParser } from '@langchain/core/output_parsers';
-import { searchSearxng } from '../searxng';
-import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import LineOutputParser from '../outputParsers/lineOutputParser';
-
-const imageSearchChainPrompt = `
-You will be given a conversation below and a follow up question. You need to rephrase the follow-up question so it is a standalone question that can be used by the LLM to search the web for images.
-You need to make sure the rephrased question agrees with the conversation and is relevant to the conversation.
-Output only the rephrased query wrapped in an XML element. Do not include any explanation or additional text.
-`;
-
-type ImageSearchChainInput = {
- chat_history: BaseMessage[];
- query: string;
-};
-
-interface ImageSearchResult {
- img_src: string;
- url: string;
- title: string;
-}
-
-const strParser = new StringOutputParser();
-
-const createImageSearchChain = (llm: BaseChatModel) => {
- return RunnableSequence.from([
- RunnableMap.from({
- chat_history: (input: ImageSearchChainInput) => {
- return formatChatHistoryAsString(input.chat_history);
- },
- query: (input: ImageSearchChainInput) => {
- return input.query;
- },
- }),
- ChatPromptTemplate.fromMessages([
- ['system', imageSearchChainPrompt],
- [
- 'user',
- '\n \n\nWhat is a cat?\n ',
- ],
- ['assistant', 'A cat '],
-
- [
- 'user',
- '\n \n\nWhat is a car? How does it work?\n ',
- ],
- ['assistant', 'Car working '],
- [
- 'user',
- '\n \n\nHow does an AC work?\n ',
- ],
- ['assistant', 'AC working '],
- [
- 'user',
- '{chat_history} \n\n{query}\n ',
- ],
- ]),
- llm,
- strParser,
- RunnableLambda.from(async (input: string) => {
- const queryParser = new LineOutputParser({
- key: 'query',
- });
-
- return await queryParser.parse(input);
- }),
- RunnableLambda.from(async (input: string) => {
- const res = await searchSearxng(input, {
- engines: ['bing images', 'google images'],
- });
-
- const images: ImageSearchResult[] = [];
-
- res.results.forEach((result) => {
- if (result.img_src && result.url && result.title) {
- images.push({
- img_src: result.img_src,
- url: result.url,
- title: result.title,
- });
- }
- });
-
- return images.slice(0, 10);
- }),
- ]);
-};
-
-const handleImageSearch = (
- input: ImageSearchChainInput,
- llm: BaseChatModel,
-) => {
- const imageSearchChain = createImageSearchChain(llm);
- return imageSearchChain.invoke(input);
-};
-
-export default handleImageSearch;
diff --git a/src/lib/chains/videoSearchAgent.ts b/src/lib/chains/videoSearchAgent.ts
deleted file mode 100644
index 3f878a8..0000000
--- a/src/lib/chains/videoSearchAgent.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-import {
- RunnableSequence,
- RunnableMap,
- RunnableLambda,
-} from '@langchain/core/runnables';
-import { ChatPromptTemplate } from '@langchain/core/prompts';
-import formatChatHistoryAsString from '../utils/formatHistory';
-import { BaseMessage } from '@langchain/core/messages';
-import { StringOutputParser } from '@langchain/core/output_parsers';
-import { searchSearxng } from '../searxng';
-import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import LineOutputParser from '../outputParsers/lineOutputParser';
-
-const videoSearchChainPrompt = `
-You will be given a conversation below and a follow up question. You need to rephrase the follow-up question so it is a standalone question that can be used by the LLM to search Youtube for videos.
-You need to make sure the rephrased question agrees with the conversation and is relevant to the conversation.
-Output only the rephrased query wrapped in an XML element. Do not include any explanation or additional text.
-`;
-
-type VideoSearchChainInput = {
- chat_history: BaseMessage[];
- query: string;
-};
-
-interface VideoSearchResult {
- img_src: string;
- url: string;
- title: string;
- iframe_src: string;
-}
-
-const strParser = new StringOutputParser();
-
-const createVideoSearchChain = (llm: BaseChatModel) => {
- return RunnableSequence.from([
- RunnableMap.from({
- chat_history: (input: VideoSearchChainInput) => {
- return formatChatHistoryAsString(input.chat_history);
- },
- query: (input: VideoSearchChainInput) => {
- return input.query;
- },
- }),
- ChatPromptTemplate.fromMessages([
- ['system', videoSearchChainPrompt],
- [
- 'user',
- '\n \n\nHow does a car work?\n ',
- ],
- ['assistant', 'How does a car work? '],
- [
- 'user',
- '\n \n\nWhat is the theory of relativity?\n ',
- ],
- ['assistant', 'Theory of relativity '],
- [
- 'user',
- '\n \n\nHow does an AC work?\n ',
- ],
- ['assistant', 'AC working '],
- [
- 'user',
- '{chat_history} \n\n{query}\n ',
- ],
- ]),
- llm,
- strParser,
- RunnableLambda.from(async (input: string) => {
- const queryParser = new LineOutputParser({
- key: 'query',
- });
- return await queryParser.parse(input);
- }),
- RunnableLambda.from(async (input: string) => {
- const res = await searchSearxng(input, {
- engines: ['youtube'],
- });
-
- const videos: VideoSearchResult[] = [];
-
- res.results.forEach((result) => {
- if (
- result.thumbnail &&
- result.url &&
- result.title &&
- result.iframe_src
- ) {
- videos.push({
- img_src: result.thumbnail,
- url: result.url,
- title: result.title,
- iframe_src: result.iframe_src,
- });
- }
- });
-
- return videos.slice(0, 10);
- }),
- ]);
-};
-
-const handleVideoSearch = (
- input: VideoSearchChainInput,
- llm: BaseChatModel,
-) => {
- const videoSearchChain = createVideoSearchChain(llm);
- return videoSearchChain.invoke(input);
-};
-
-export default handleVideoSearch;
diff --git a/src/lib/db/migrate.ts b/src/lib/db/migrate.ts
deleted file mode 100644
index c3ebff6..0000000
--- a/src/lib/db/migrate.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import db from './';
-import { migrate } from 'drizzle-orm/better-sqlite3/migrator';
-import path from 'path';
-
-migrate(db, { migrationsFolder: path.join(process.cwd(), 'drizzle') });
diff --git a/src/lib/hooks/useChat.tsx b/src/lib/hooks/useChat.tsx
deleted file mode 100644
index 573ac6b..0000000
--- a/src/lib/hooks/useChat.tsx
+++ /dev/null
@@ -1,643 +0,0 @@
-'use client';
-
-import { Message } from '@/components/ChatWindow';
-import { createContext, useContext, useEffect, useRef, useState } from 'react';
-import crypto from 'crypto';
-import { useSearchParams } from 'next/navigation';
-import { toast } from 'sonner';
-import { Document } from '@langchain/core/documents';
-import { getSuggestions } from '../actions';
-
-type ChatContext = {
- messages: Message[];
- chatHistory: [string, string][];
- files: File[];
- fileIds: string[];
- focusMode: string;
- chatId: string | undefined;
- optimizationMode: string;
- isMessagesLoaded: boolean;
- loading: boolean;
- notFound: boolean;
- messageAppeared: boolean;
- isReady: boolean;
- hasError: boolean;
- setOptimizationMode: (mode: string) => void;
- setFocusMode: (mode: string) => void;
- setFiles: (files: File[]) => void;
- setFileIds: (fileIds: string[]) => void;
- sendMessage: (
- message: string,
- messageId?: string,
- rewrite?: boolean,
- ) => Promise;
- rewrite: (messageId: string) => void;
-};
-
-export interface File {
- fileName: string;
- fileExtension: string;
- fileId: string;
-}
-
-interface ChatModelProvider {
- name: string;
- provider: string;
-}
-
-interface EmbeddingModelProvider {
- name: string;
- provider: string;
-}
-
-const checkConfig = async (
- setChatModelProvider: (provider: ChatModelProvider) => void,
- setEmbeddingModelProvider: (provider: EmbeddingModelProvider) => void,
- setIsConfigReady: (ready: boolean) => void,
- setHasError: (hasError: boolean) => void,
-) => {
- try {
- let chatModel = localStorage.getItem('chatModel');
- let chatModelProvider = localStorage.getItem('chatModelProvider');
- let embeddingModel = localStorage.getItem('embeddingModel');
- let embeddingModelProvider = localStorage.getItem('embeddingModelProvider');
-
- const autoImageSearch = localStorage.getItem('autoImageSearch');
- const autoVideoSearch = localStorage.getItem('autoVideoSearch');
-
- if (!autoImageSearch) {
- localStorage.setItem('autoImageSearch', 'true');
- }
-
- if (!autoVideoSearch) {
- localStorage.setItem('autoVideoSearch', 'false');
- }
-
- const providers = await fetch(`/api/models`, {
- headers: {
- 'Content-Type': 'application/json',
- },
- }).then(async (res) => {
- if (!res.ok)
- throw new Error(
- `Failed to fetch models: ${res.status} ${res.statusText}`,
- );
- return res.json();
- });
-
- if (
- !chatModel ||
- !chatModelProvider ||
- !embeddingModel ||
- !embeddingModelProvider
- ) {
- if (!chatModel || !chatModelProvider) {
- const chatModelProviders = providers.chatModelProviders;
- const chatModelProvidersKeys = Object.keys(chatModelProviders);
-
- if (!chatModelProviders || chatModelProvidersKeys.length === 0) {
- return toast.error('No chat models available');
- } else {
- chatModelProvider =
- chatModelProvidersKeys.find(
- (provider) =>
- Object.keys(chatModelProviders[provider]).length > 0,
- ) || chatModelProvidersKeys[0];
- }
-
- if (
- chatModelProvider === 'custom_openai' &&
- Object.keys(chatModelProviders[chatModelProvider]).length === 0
- ) {
- toast.error(
- "Looks like you haven't configured any chat model providers. Please configure them from the settings page or the config file.",
- );
- return setHasError(true);
- }
-
- chatModel = Object.keys(chatModelProviders[chatModelProvider])[0];
- }
-
- if (!embeddingModel || !embeddingModelProvider) {
- const embeddingModelProviders = providers.embeddingModelProviders;
-
- if (
- !embeddingModelProviders ||
- Object.keys(embeddingModelProviders).length === 0
- )
- return toast.error('No embedding models available');
-
- embeddingModelProvider = Object.keys(embeddingModelProviders)[0];
- embeddingModel = Object.keys(
- embeddingModelProviders[embeddingModelProvider],
- )[0];
- }
-
- localStorage.setItem('chatModel', chatModel!);
- localStorage.setItem('chatModelProvider', chatModelProvider);
- localStorage.setItem('embeddingModel', embeddingModel!);
- localStorage.setItem('embeddingModelProvider', embeddingModelProvider);
- } else {
- const chatModelProviders = providers.chatModelProviders;
- const embeddingModelProviders = providers.embeddingModelProviders;
-
- if (
- Object.keys(chatModelProviders).length > 0 &&
- (!chatModelProviders[chatModelProvider] ||
- Object.keys(chatModelProviders[chatModelProvider]).length === 0)
- ) {
- const chatModelProvidersKeys = Object.keys(chatModelProviders);
- chatModelProvider =
- chatModelProvidersKeys.find(
- (key) => Object.keys(chatModelProviders[key]).length > 0,
- ) || chatModelProvidersKeys[0];
-
- localStorage.setItem('chatModelProvider', chatModelProvider);
- }
-
- if (
- chatModelProvider &&
- !chatModelProviders[chatModelProvider][chatModel]
- ) {
- if (
- chatModelProvider === 'custom_openai' &&
- Object.keys(chatModelProviders[chatModelProvider]).length === 0
- ) {
- toast.error(
- "Looks like you haven't configured any chat model providers. Please configure them from the settings page or the config file.",
- );
- return setHasError(true);
- }
-
- chatModel = Object.keys(
- chatModelProviders[
- Object.keys(chatModelProviders[chatModelProvider]).length > 0
- ? chatModelProvider
- : Object.keys(chatModelProviders)[0]
- ],
- )[0];
-
- localStorage.setItem('chatModel', chatModel);
- }
-
- if (
- Object.keys(embeddingModelProviders).length > 0 &&
- !embeddingModelProviders[embeddingModelProvider]
- ) {
- embeddingModelProvider = Object.keys(embeddingModelProviders)[0];
- localStorage.setItem('embeddingModelProvider', embeddingModelProvider);
- }
-
- if (
- embeddingModelProvider &&
- !embeddingModelProviders[embeddingModelProvider][embeddingModel]
- ) {
- embeddingModel = Object.keys(
- embeddingModelProviders[embeddingModelProvider],
- )[0];
- localStorage.setItem('embeddingModel', embeddingModel);
- }
- }
-
- setChatModelProvider({
- name: chatModel!,
- provider: chatModelProvider,
- });
-
- setEmbeddingModelProvider({
- name: embeddingModel!,
- provider: embeddingModelProvider,
- });
-
- setIsConfigReady(true);
- } catch (err) {
- console.error('An error occurred while checking the configuration:', err);
- setIsConfigReady(false);
- setHasError(true);
- }
-};
-
-const loadMessages = async (
- chatId: string,
- setMessages: (messages: Message[]) => void,
- setIsMessagesLoaded: (loaded: boolean) => void,
- setChatHistory: (history: [string, string][]) => void,
- setFocusMode: (mode: string) => void,
- setNotFound: (notFound: boolean) => void,
- setFiles: (files: File[]) => void,
- setFileIds: (fileIds: string[]) => void,
-) => {
- const res = await fetch(`/api/chats/${chatId}`, {
- method: 'GET',
- headers: {
- 'Content-Type': 'application/json',
- },
- });
-
- if (res.status === 404) {
- setNotFound(true);
- setIsMessagesLoaded(true);
- return;
- }
-
- const data = await res.json();
-
- const messages = data.messages.map((msg: any) => {
- return {
- ...msg,
- ...JSON.parse(msg.metadata),
- };
- }) as Message[];
-
- setMessages(messages);
-
- const history = messages.map((msg) => {
- return [msg.role, msg.content];
- }) as [string, string][];
-
- console.debug(new Date(), 'app:messages_loaded');
-
- document.title = messages[0].content;
-
- const files = data.chat.files.map((file: any) => {
- return {
- fileName: file.name,
- fileExtension: file.name.split('.').pop(),
- fileId: file.fileId,
- };
- });
-
- setFiles(files);
- setFileIds(files.map((file: File) => file.fileId));
-
- setChatHistory(history);
- setFocusMode(data.chat.focusMode);
- setIsMessagesLoaded(true);
-};
-
-export const chatContext = createContext({
- chatHistory: [],
- chatId: '',
- fileIds: [],
- files: [],
- focusMode: '',
- hasError: false,
- isMessagesLoaded: false,
- isReady: false,
- loading: false,
- messageAppeared: false,
- messages: [],
- notFound: false,
- optimizationMode: '',
- rewrite: () => {},
- sendMessage: async () => {},
- setFileIds: () => {},
- setFiles: () => {},
- setFocusMode: () => {},
- setOptimizationMode: () => {},
-});
-
-export const ChatProvider = ({
- children,
- id,
-}: {
- children: React.ReactNode;
- id?: string;
-}) => {
- const searchParams = useSearchParams();
- const initialMessage = searchParams.get('q');
-
- const [chatId, setChatId] = useState(id);
- const [newChatCreated, setNewChatCreated] = useState(false);
-
- const [loading, setLoading] = useState(false);
- const [messageAppeared, setMessageAppeared] = useState(false);
-
- const [chatHistory, setChatHistory] = useState<[string, string][]>([]);
- const [messages, setMessages] = useState([]);
-
- const [files, setFiles] = useState([]);
- const [fileIds, setFileIds] = useState([]);
-
- const [focusMode, setFocusMode] = useState('webSearch');
- const [optimizationMode, setOptimizationMode] = useState('speed');
-
- const [isMessagesLoaded, setIsMessagesLoaded] = useState(false);
-
- const [notFound, setNotFound] = useState(false);
-
- const [chatModelProvider, setChatModelProvider] = useState(
- {
- name: '',
- provider: '',
- },
- );
-
- const [embeddingModelProvider, setEmbeddingModelProvider] =
- useState({
- name: '',
- provider: '',
- });
-
- const [isConfigReady, setIsConfigReady] = useState(false);
- const [hasError, setHasError] = useState(false);
- const [isReady, setIsReady] = useState(false);
-
- const messagesRef = useRef([]);
-
- useEffect(() => {
- checkConfig(
- setChatModelProvider,
- setEmbeddingModelProvider,
- setIsConfigReady,
- setHasError,
- );
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
-
- useEffect(() => {
- if (
- chatId &&
- !newChatCreated &&
- !isMessagesLoaded &&
- messages.length === 0
- ) {
- loadMessages(
- chatId,
- setMessages,
- setIsMessagesLoaded,
- setChatHistory,
- setFocusMode,
- setNotFound,
- setFiles,
- setFileIds,
- );
- } else if (!chatId) {
- setNewChatCreated(true);
- setIsMessagesLoaded(true);
- setChatId(crypto.randomBytes(20).toString('hex'));
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
-
- useEffect(() => {
- messagesRef.current = messages;
- }, [messages]);
-
- useEffect(() => {
- if (isMessagesLoaded && isConfigReady) {
- setIsReady(true);
- console.debug(new Date(), 'app:ready');
- } else {
- setIsReady(false);
- }
- }, [isMessagesLoaded, isConfigReady]);
-
- const rewrite = (messageId: string) => {
- const index = messages.findIndex((msg) => msg.messageId === messageId);
-
- if (index === -1) return;
-
- const message = messages[index - 1];
-
- setMessages((prev) => {
- return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)];
- });
- setChatHistory((prev) => {
- return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)];
- });
-
- sendMessage(message.content, message.messageId, true);
- };
-
- useEffect(() => {
- if (isReady && initialMessage && isConfigReady) {
- if (!isConfigReady) {
- toast.error('Cannot send message before the configuration is ready');
- return;
- }
- sendMessage(initialMessage);
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [isConfigReady, isReady, initialMessage]);
-
- const sendMessage: ChatContext['sendMessage'] = async (
- message,
- messageId,
- rewrite = false,
- ) => {
- if (loading) return;
- setLoading(true);
- setMessageAppeared(false);
-
- let sources: Document[] | undefined = undefined;
- let recievedMessage = '';
- let added = false;
-
- messageId = messageId ?? crypto.randomBytes(7).toString('hex');
-
- setMessages((prevMessages) => [
- ...prevMessages,
- {
- content: message,
- messageId: messageId,
- chatId: chatId!,
- role: 'user',
- createdAt: new Date(),
- },
- ]);
-
- const messageHandler = async (data: any) => {
- if (data.type === 'error') {
- toast.error(data.data);
- setLoading(false);
- return;
- }
-
- if (data.type === 'sources') {
- sources = data.data;
- if (!added) {
- setMessages((prevMessages) => [
- ...prevMessages,
- {
- content: '',
- messageId: data.messageId,
- chatId: chatId!,
- role: 'assistant',
- sources: sources,
- createdAt: new Date(),
- },
- ]);
- added = true;
- }
- setMessageAppeared(true);
- }
-
- if (data.type === 'message') {
- if (!added) {
- setMessages((prevMessages) => [
- ...prevMessages,
- {
- content: data.data,
- messageId: data.messageId,
- chatId: chatId!,
- role: 'assistant',
- sources: sources,
- createdAt: new Date(),
- },
- ]);
- added = true;
- }
-
- setMessages((prev) =>
- prev.map((message) => {
- if (message.messageId === data.messageId) {
- return { ...message, content: message.content + data.data };
- }
-
- return message;
- }),
- );
-
- recievedMessage += data.data;
- setMessageAppeared(true);
- }
-
- if (data.type === 'messageEnd') {
- setChatHistory((prevHistory) => [
- ...prevHistory,
- ['human', message],
- ['assistant', recievedMessage],
- ]);
-
- setLoading(false);
-
- const lastMsg = messagesRef.current[messagesRef.current.length - 1];
-
- const autoImageSearch = localStorage.getItem('autoImageSearch');
- const autoVideoSearch = localStorage.getItem('autoVideoSearch');
-
- if (autoImageSearch === 'true') {
- document
- .getElementById(`search-images-${lastMsg.messageId}`)
- ?.click();
- }
-
- if (autoVideoSearch === 'true') {
- document
- .getElementById(`search-videos-${lastMsg.messageId}`)
- ?.click();
- }
-
- if (
- lastMsg.role === 'assistant' &&
- lastMsg.sources &&
- lastMsg.sources.length > 0 &&
- !lastMsg.suggestions
- ) {
- const suggestions = await getSuggestions(messagesRef.current);
- setMessages((prev) =>
- prev.map((msg) => {
- if (msg.messageId === lastMsg.messageId) {
- return { ...msg, suggestions: suggestions };
- }
- return msg;
- }),
- );
- }
- }
- };
-
- const messageIndex = messages.findIndex((m) => m.messageId === messageId);
-
- const res = await fetch('/api/chat', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- content: message,
- message: {
- messageId: messageId,
- chatId: chatId!,
- content: message,
- },
- chatId: chatId!,
- files: fileIds,
- focusMode: focusMode,
- optimizationMode: optimizationMode,
- history: rewrite
- ? chatHistory.slice(0, messageIndex === -1 ? undefined : messageIndex)
- : chatHistory,
- chatModel: {
- name: chatModelProvider.name,
- provider: chatModelProvider.provider,
- },
- embeddingModel: {
- name: embeddingModelProvider.name,
- provider: embeddingModelProvider.provider,
- },
- systemInstructions: localStorage.getItem('systemInstructions'),
- }),
- });
-
- if (!res.body) throw new Error('No response body');
-
- const reader = res.body?.getReader();
- const decoder = new TextDecoder('utf-8');
-
- let partialChunk = '';
-
- while (true) {
- const { value, done } = await reader.read();
- if (done) break;
-
- partialChunk += decoder.decode(value, { stream: true });
-
- try {
- const messages = partialChunk.split('\n');
- for (const msg of messages) {
- if (!msg.trim()) continue;
- const json = JSON.parse(msg);
- messageHandler(json);
- }
- partialChunk = '';
- } catch (error) {
- console.warn('Incomplete JSON, waiting for next chunk...');
- }
- }
- };
-
- return (
-
- {children}
-
- );
-};
-
-export const useChat = () => {
- const ctx = useContext(chatContext);
- return ctx;
-};
diff --git a/src/lib/huggingfaceTransformer.ts b/src/lib/huggingfaceTransformer.ts
index 6afc652..7a959ca 100644
--- a/src/lib/huggingfaceTransformer.ts
+++ b/src/lib/huggingfaceTransformer.ts
@@ -28,7 +28,7 @@ export class HuggingFaceTransformersEmbeddings
timeout?: number;
- private pipelinePromise: Promise | undefined;
+ private pipelinePromise: Promise;
constructor(fields?: Partial) {
super(fields ?? {});
diff --git a/src/lib/outputParsers/lineOutputParser.ts b/src/lib/outputParsers/lineOutputParser.ts
index fcd69ef..08711aa 100644
--- a/src/lib/outputParsers/lineOutputParser.ts
+++ b/src/lib/outputParsers/lineOutputParser.ts
@@ -9,7 +9,7 @@ class LineOutputParser extends BaseOutputParser {
constructor(args?: LineOutputParserArgs) {
super();
- this.key = args?.key ?? this.key;
+ this.key = args.key ?? this.key;
}
static lc_name() {
diff --git a/src/lib/outputParsers/listLineOutputParser.ts b/src/lib/outputParsers/listLineOutputParser.ts
index 6409db9..f465ef1 100644
--- a/src/lib/outputParsers/listLineOutputParser.ts
+++ b/src/lib/outputParsers/listLineOutputParser.ts
@@ -9,7 +9,7 @@ class LineListOutputParser extends BaseOutputParser {
constructor(args?: LineListOutputParserArgs) {
super();
- this.key = args?.key ?? this.key;
+ this.key = args.key ?? this.key;
}
static lc_name() {
diff --git a/src/lib/providers/aimlapi.ts b/src/lib/providers/aimlapi.ts
deleted file mode 100644
index 9c982fe..0000000
--- a/src/lib/providers/aimlapi.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import { ChatOpenAI, OpenAIEmbeddings } from '@langchain/openai';
-import { getAimlApiKey } from '../config';
-import { ChatModel, EmbeddingModel } from '.';
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import { Embeddings } from '@langchain/core/embeddings';
-import axios from 'axios';
-
-export const PROVIDER_INFO = {
- key: 'aimlapi',
- displayName: 'AI/ML API',
-};
-
-interface AimlApiModel {
- id: string;
- name?: string;
- type?: string;
-}
-
-const API_URL = 'https://api.aimlapi.com';
-
-export const loadAimlApiChatModels = async () => {
- const apiKey = getAimlApiKey();
-
- if (!apiKey) return {};
-
- try {
- const response = await axios.get(`${API_URL}/models`, {
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${apiKey}`,
- },
- });
-
- const chatModels: Record = {};
-
- response.data.data.forEach((model: AimlApiModel) => {
- if (model.type === 'chat-completion') {
- chatModels[model.id] = {
- displayName: model.name || model.id,
- model: new ChatOpenAI({
- apiKey: apiKey,
- modelName: model.id,
- temperature: 0.7,
- configuration: {
- baseURL: API_URL,
- },
- }) as unknown as BaseChatModel,
- };
- }
- });
-
- return chatModels;
- } catch (err) {
- console.error(`Error loading AI/ML API models: ${err}`);
- return {};
- }
-};
-
-export const loadAimlApiEmbeddingModels = async () => {
- const apiKey = getAimlApiKey();
-
- if (!apiKey) return {};
-
- try {
- const response = await axios.get(`${API_URL}/models`, {
- headers: {
- 'Content-Type': 'application/json',
- Authorization: `Bearer ${apiKey}`,
- },
- });
-
- const embeddingModels: Record = {};
-
- response.data.data.forEach((model: AimlApiModel) => {
- if (model.type === 'embedding') {
- embeddingModels[model.id] = {
- displayName: model.name || model.id,
- model: new OpenAIEmbeddings({
- apiKey: apiKey,
- modelName: model.id,
- configuration: {
- baseURL: API_URL,
- },
- }) as unknown as Embeddings,
- };
- }
- });
-
- return embeddingModels;
- } catch (err) {
- console.error(`Error loading AI/ML API embeddings models: ${err}`);
- return {};
- }
-};
diff --git a/src/lib/providers/anthropic.ts b/src/lib/providers/anthropic.ts
index 6af2115..642a6cb 100644
--- a/src/lib/providers/anthropic.ts
+++ b/src/lib/providers/anthropic.ts
@@ -1,55 +1,6 @@
import { ChatAnthropic } from '@langchain/anthropic';
-import { ChatModel } from '.';
-import { getAnthropicApiKey } from '../config';
-
-export const PROVIDER_INFO = {
- key: 'anthropic',
- displayName: 'Anthropic',
-};
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
-
-const anthropicChatModels: Record[] = [
- {
- displayName: 'Claude 4.1 Opus',
- key: 'claude-opus-4-1-20250805',
- },
- {
- displayName: 'Claude 4 Opus',
- key: 'claude-opus-4-20250514',
- },
- {
- displayName: 'Claude 4 Sonnet',
- key: 'claude-sonnet-4-20250514',
- },
- {
- displayName: 'Claude 3.7 Sonnet',
- key: 'claude-3-7-sonnet-20250219',
- },
- {
- displayName: 'Claude 3.5 Haiku',
- key: 'claude-3-5-haiku-20241022',
- },
- {
- displayName: 'Claude 3.5 Sonnet v2',
- key: 'claude-3-5-sonnet-20241022',
- },
- {
- displayName: 'Claude 3.5 Sonnet',
- key: 'claude-3-5-sonnet-20240620',
- },
- {
- displayName: 'Claude 3 Opus',
- key: 'claude-3-opus-20240229',
- },
- {
- displayName: 'Claude 3 Sonnet',
- key: 'claude-3-sonnet-20240229',
- },
- {
- displayName: 'Claude 3 Haiku',
- key: 'claude-3-haiku-20240307',
- },
-];
+import { getAnthropicApiKey } from '../../config';
+import logger from '../../utils/logger';
export const loadAnthropicChatModels = async () => {
const anthropicApiKey = getAnthropicApiKey();
@@ -57,22 +8,52 @@ export const loadAnthropicChatModels = async () => {
if (!anthropicApiKey) return {};
try {
- const chatModels: Record = {};
-
- anthropicChatModels.forEach((model) => {
- chatModels[model.key] = {
- displayName: model.displayName,
+ const chatModels = {
+ 'claude-3-5-sonnet-20241022': {
+ displayName: 'Claude 3.5 Sonnet',
model: new ChatAnthropic({
- apiKey: anthropicApiKey,
- modelName: model.key,
temperature: 0.7,
- }) as unknown as BaseChatModel,
- };
- });
+ anthropicApiKey: anthropicApiKey,
+ model: 'claude-3-5-sonnet-20241022',
+ }),
+ },
+ 'claude-3-5-haiku-20241022': {
+ displayName: 'Claude 3.5 Haiku',
+ model: new ChatAnthropic({
+ temperature: 0.7,
+ anthropicApiKey: anthropicApiKey,
+ model: 'claude-3-5-haiku-20241022',
+ }),
+ },
+ 'claude-3-opus-20240229': {
+ displayName: 'Claude 3 Opus',
+ model: new ChatAnthropic({
+ temperature: 0.7,
+ anthropicApiKey: anthropicApiKey,
+ model: 'claude-3-opus-20240229',
+ }),
+ },
+ 'claude-3-sonnet-20240229': {
+ displayName: 'Claude 3 Sonnet',
+ model: new ChatAnthropic({
+ temperature: 0.7,
+ anthropicApiKey: anthropicApiKey,
+ model: 'claude-3-sonnet-20240229',
+ }),
+ },
+ 'claude-3-haiku-20240307': {
+ displayName: 'Claude 3 Haiku',
+ model: new ChatAnthropic({
+ temperature: 0.7,
+ anthropicApiKey: anthropicApiKey,
+ model: 'claude-3-haiku-20240307',
+ }),
+ },
+ };
return chatModels;
} catch (err) {
- console.error(`Error loading Anthropic models: ${err}`);
+ logger.error(`Error loading Anthropic models: ${err}`);
return {};
}
};
diff --git a/src/lib/providers/deepseek.ts b/src/lib/providers/deepseek.ts
deleted file mode 100644
index 9c9ef5a..0000000
--- a/src/lib/providers/deepseek.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import { ChatOpenAI } from '@langchain/openai';
-import { getDeepseekApiKey } from '../config';
-import { ChatModel } from '.';
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
-
-export const PROVIDER_INFO = {
- key: 'deepseek',
- displayName: 'Deepseek AI',
-};
-
-const deepseekChatModels: Record[] = [
- {
- displayName: 'Deepseek Chat (Deepseek V3)',
- key: 'deepseek-chat',
- },
- {
- displayName: 'Deepseek Reasoner (Deepseek R1)',
- key: 'deepseek-reasoner',
- },
-];
-
-export const loadDeepseekChatModels = async () => {
- const deepseekApiKey = getDeepseekApiKey();
-
- if (!deepseekApiKey) return {};
-
- try {
- const chatModels: Record = {};
-
- deepseekChatModels.forEach((model) => {
- chatModels[model.key] = {
- displayName: model.displayName,
- model: new ChatOpenAI({
- apiKey: deepseekApiKey,
- modelName: model.key,
- temperature: 0.7,
- configuration: {
- baseURL: 'https://api.deepseek.com',
- },
- }) as unknown as BaseChatModel,
- };
- });
-
- return chatModels;
- } catch (err) {
- console.error(`Error loading Deepseek models: ${err}`);
- return {};
- }
-};
diff --git a/src/lib/providers/gemini.ts b/src/lib/providers/gemini.ts
index 418e0a4..d20c9b8 100644
--- a/src/lib/providers/gemini.ts
+++ b/src/lib/providers/gemini.ts
@@ -2,65 +2,8 @@ import {
ChatGoogleGenerativeAI,
GoogleGenerativeAIEmbeddings,
} from '@langchain/google-genai';
-import { getGeminiApiKey } from '../config';
-import { ChatModel, EmbeddingModel } from '.';
-
-export const PROVIDER_INFO = {
- key: 'gemini',
- displayName: 'Google Gemini',
-};
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import { Embeddings } from '@langchain/core/embeddings';
-
-const geminiChatModels: Record[] = [
- {
- displayName: 'Gemini 2.5 Flash',
- key: 'gemini-2.5-flash',
- },
- {
- displayName: 'Gemini 2.5 Flash-Lite',
- key: 'gemini-2.5-flash-lite',
- },
- {
- displayName: 'Gemini 2.5 Pro',
- key: 'gemini-2.5-pro',
- },
- {
- displayName: 'Gemini 2.0 Flash',
- key: 'gemini-2.0-flash',
- },
- {
- displayName: 'Gemini 2.0 Flash-Lite',
- key: 'gemini-2.0-flash-lite',
- },
- {
- displayName: 'Gemini 2.0 Flash Thinking Experimental',
- key: 'gemini-2.0-flash-thinking-exp-01-21',
- },
- {
- displayName: 'Gemini 1.5 Flash',
- key: 'gemini-1.5-flash',
- },
- {
- displayName: 'Gemini 1.5 Flash-8B',
- key: 'gemini-1.5-flash-8b',
- },
- {
- displayName: 'Gemini 1.5 Pro',
- key: 'gemini-1.5-pro',
- },
-];
-
-const geminiEmbeddingModels: Record[] = [
- {
- displayName: 'Text Embedding 004',
- key: 'models/text-embedding-004',
- },
- {
- displayName: 'Embedding 001',
- key: 'models/embedding-001',
- },
-];
+import { getGeminiApiKey } from '../../config';
+import logger from '../../utils/logger';
export const loadGeminiChatModels = async () => {
const geminiApiKey = getGeminiApiKey();
@@ -68,47 +11,75 @@ export const loadGeminiChatModels = async () => {
if (!geminiApiKey) return {};
try {
- const chatModels: Record = {};
-
- geminiChatModels.forEach((model) => {
- chatModels[model.key] = {
- displayName: model.displayName,
+ const chatModels = {
+ 'gemini-1.5-flash': {
+ displayName: 'Gemini 1.5 Flash',
model: new ChatGoogleGenerativeAI({
- apiKey: geminiApiKey,
- model: model.key,
+ modelName: 'gemini-1.5-flash',
temperature: 0.7,
- }) as unknown as BaseChatModel,
- };
- });
+ apiKey: geminiApiKey,
+ }),
+ },
+ 'gemini-1.5-flash-8b': {
+ displayName: 'Gemini 1.5 Flash 8B',
+ model: new ChatGoogleGenerativeAI({
+ modelName: 'gemini-1.5-flash-8b',
+ temperature: 0.7,
+ apiKey: geminiApiKey,
+ }),
+ },
+ 'gemini-1.5-pro': {
+ displayName: 'Gemini 1.5 Pro',
+ model: new ChatGoogleGenerativeAI({
+ modelName: 'gemini-1.5-pro',
+ temperature: 0.7,
+ apiKey: geminiApiKey,
+ }),
+ },
+ 'gemini-2.0-flash-exp': {
+ displayName: 'Gemini 2.0 Flash Exp',
+ model: new ChatGoogleGenerativeAI({
+ modelName: 'gemini-2.0-flash-exp',
+ temperature: 0.7,
+ apiKey: geminiApiKey,
+ }),
+ },
+ 'gemini-2.0-flash-thinking-exp-01-21': {
+ displayName: 'Gemini 2.0 Flash Thinking Exp 01-21',
+ model: new ChatGoogleGenerativeAI({
+ modelName: 'gemini-2.0-flash-thinking-exp-01-21',
+ temperature: 0.7,
+ apiKey: geminiApiKey,
+ }),
+ },
+ };
return chatModels;
} catch (err) {
- console.error(`Error loading Gemini models: ${err}`);
+ logger.error(`Error loading Gemini models: ${err}`);
return {};
}
};
-export const loadGeminiEmbeddingModels = async () => {
+export const loadGeminiEmbeddingsModels = async () => {
const geminiApiKey = getGeminiApiKey();
if (!geminiApiKey) return {};
try {
- const embeddingModels: Record = {};
-
- geminiEmbeddingModels.forEach((model) => {
- embeddingModels[model.key] = {
- displayName: model.displayName,
+ const embeddingModels = {
+ 'text-embedding-004': {
+ displayName: 'Text Embedding',
model: new GoogleGenerativeAIEmbeddings({
apiKey: geminiApiKey,
- modelName: model.key,
- }) as unknown as Embeddings,
- };
- });
+ modelName: 'text-embedding-004',
+ }),
+ },
+ };
return embeddingModels;
} catch (err) {
- console.error(`Error loading Gemini embeddings models: ${err}`);
+ logger.error(`Error loading Gemini embeddings model: ${err}`);
return {};
}
};
diff --git a/src/lib/providers/groq.ts b/src/lib/providers/groq.ts
index 4e7db51..41004ec 100644
--- a/src/lib/providers/groq.ts
+++ b/src/lib/providers/groq.ts
@@ -1,44 +1,136 @@
-import { ChatGroq } from '@langchain/groq';
-import { getGroqApiKey } from '../config';
-import { ChatModel } from '.';
-
-export const PROVIDER_INFO = {
- key: 'groq',
- displayName: 'Groq',
-};
-
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
+import { ChatOpenAI } from '@langchain/openai';
+import { getGroqApiKey } from '../../config';
+import logger from '../../utils/logger';
export const loadGroqChatModels = async () => {
const groqApiKey = getGroqApiKey();
+
if (!groqApiKey) return {};
try {
- const res = await fetch('https://api.groq.com/openai/v1/models', {
- method: 'GET',
- headers: {
- Authorization: `bearer ${groqApiKey}`,
- 'Content-Type': 'application/json',
+ const chatModels = {
+ 'llama-3.3-70b-versatile': {
+ displayName: 'Llama 3.3 70B',
+ model: new ChatOpenAI(
+ {
+ openAIApiKey: groqApiKey,
+ modelName: 'llama-3.3-70b-versatile',
+ temperature: 0.7,
+ },
+ {
+ baseURL: 'https://api.groq.com/openai/v1',
+ },
+ ),
},
- });
-
- const groqChatModels = (await res.json()).data;
- const chatModels: Record = {};
-
- groqChatModels.forEach((model: any) => {
- chatModels[model.id] = {
- displayName: model.id,
- model: new ChatGroq({
- apiKey: groqApiKey,
- model: model.id,
- temperature: 0.7,
- }) as unknown as BaseChatModel,
- };
- });
+ 'llama-3.2-3b-preview': {
+ displayName: 'Llama 3.2 3B',
+ model: new ChatOpenAI(
+ {
+ openAIApiKey: groqApiKey,
+ modelName: 'llama-3.2-3b-preview',
+ temperature: 0.7,
+ },
+ {
+ baseURL: 'https://api.groq.com/openai/v1',
+ },
+ ),
+ },
+ 'llama-3.2-11b-vision-preview': {
+ displayName: 'Llama 3.2 11B Vision',
+ model: new ChatOpenAI(
+ {
+ openAIApiKey: groqApiKey,
+ modelName: 'llama-3.2-11b-vision-preview',
+ temperature: 0.7,
+ },
+ {
+ baseURL: 'https://api.groq.com/openai/v1',
+ },
+ ),
+ },
+ 'llama-3.2-90b-vision-preview': {
+ displayName: 'Llama 3.2 90B Vision',
+ model: new ChatOpenAI(
+ {
+ openAIApiKey: groqApiKey,
+ modelName: 'llama-3.2-90b-vision-preview',
+ temperature: 0.7,
+ },
+ {
+ baseURL: 'https://api.groq.com/openai/v1',
+ },
+ ),
+ },
+ 'llama-3.1-8b-instant': {
+ displayName: 'Llama 3.1 8B',
+ model: new ChatOpenAI(
+ {
+ openAIApiKey: groqApiKey,
+ modelName: 'llama-3.1-8b-instant',
+ temperature: 0.7,
+ },
+ {
+ baseURL: 'https://api.groq.com/openai/v1',
+ },
+ ),
+ },
+ 'llama3-8b-8192': {
+ displayName: 'LLaMA3 8B',
+ model: new ChatOpenAI(
+ {
+ openAIApiKey: groqApiKey,
+ modelName: 'llama3-8b-8192',
+ temperature: 0.7,
+ },
+ {
+ baseURL: 'https://api.groq.com/openai/v1',
+ },
+ ),
+ },
+ 'llama3-70b-8192': {
+ displayName: 'LLaMA3 70B',
+ model: new ChatOpenAI(
+ {
+ openAIApiKey: groqApiKey,
+ modelName: 'llama3-70b-8192',
+ temperature: 0.7,
+ },
+ {
+ baseURL: 'https://api.groq.com/openai/v1',
+ },
+ ),
+ },
+ 'mixtral-8x7b-32768': {
+ displayName: 'Mixtral 8x7B',
+ model: new ChatOpenAI(
+ {
+ openAIApiKey: groqApiKey,
+ modelName: 'mixtral-8x7b-32768',
+ temperature: 0.7,
+ },
+ {
+ baseURL: 'https://api.groq.com/openai/v1',
+ },
+ ),
+ },
+ 'gemma2-9b-it': {
+ displayName: 'Gemma2 9B',
+ model: new ChatOpenAI(
+ {
+ openAIApiKey: groqApiKey,
+ modelName: 'gemma2-9b-it',
+ temperature: 0.7,
+ },
+ {
+ baseURL: 'https://api.groq.com/openai/v1',
+ },
+ ),
+ },
+ };
return chatModels;
} catch (err) {
- console.error(`Error loading Groq models: ${err}`);
+ logger.error(`Error loading Groq models: ${err}`);
return {};
}
};
diff --git a/src/lib/providers/index.ts b/src/lib/providers/index.ts
index 1b6bb2f..57e9185 100644
--- a/src/lib/providers/index.ts
+++ b/src/lib/providers/index.ts
@@ -1,105 +1,33 @@
-import { Embeddings } from '@langchain/core/embeddings';
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import {
- loadOpenAIChatModels,
- loadOpenAIEmbeddingModels,
- PROVIDER_INFO as OpenAIInfo,
- PROVIDER_INFO,
-} from './openai';
+import { loadGroqChatModels } from './groq';
+import { loadOllamaChatModels, loadOllamaEmbeddingsModels } from './ollama';
+import { loadOpenAIChatModels, loadOpenAIEmbeddingsModels } from './openai';
+import { loadAnthropicChatModels } from './anthropic';
+import { loadTransformersEmbeddingsModels } from './transformers';
+import { loadGeminiChatModels, loadGeminiEmbeddingsModels } from './gemini';
import {
getCustomOpenaiApiKey,
getCustomOpenaiApiUrl,
getCustomOpenaiModelName,
-} from '../config';
+} from '../../config';
import { ChatOpenAI } from '@langchain/openai';
-import {
- loadOllamaChatModels,
- loadOllamaEmbeddingModels,
- PROVIDER_INFO as OllamaInfo,
-} from './ollama';
-import { loadGroqChatModels, PROVIDER_INFO as GroqInfo } from './groq';
-import {
- loadAnthropicChatModels,
- PROVIDER_INFO as AnthropicInfo,
-} from './anthropic';
-import {
- loadGeminiChatModels,
- loadGeminiEmbeddingModels,
- PROVIDER_INFO as GeminiInfo,
-} from './gemini';
-import {
- loadTransformersEmbeddingsModels,
- PROVIDER_INFO as TransformersInfo,
-} from './transformers';
-import {
- loadDeepseekChatModels,
- PROVIDER_INFO as DeepseekInfo,
-} from './deepseek';
-import {
- loadAimlApiChatModels,
- loadAimlApiEmbeddingModels,
- PROVIDER_INFO as AimlApiInfo,
-} from './aimlapi';
-import {
- loadLMStudioChatModels,
- loadLMStudioEmbeddingsModels,
- PROVIDER_INFO as LMStudioInfo,
-} from './lmstudio';
-export const PROVIDER_METADATA = {
- openai: OpenAIInfo,
- ollama: OllamaInfo,
- groq: GroqInfo,
- anthropic: AnthropicInfo,
- gemini: GeminiInfo,
- transformers: TransformersInfo,
- deepseek: DeepseekInfo,
- aimlapi: AimlApiInfo,
- lmstudio: LMStudioInfo,
- custom_openai: {
- key: 'custom_openai',
- displayName: 'Custom OpenAI',
- },
-};
-
-export interface ChatModel {
- displayName: string;
- model: BaseChatModel;
-}
-
-export interface EmbeddingModel {
- displayName: string;
- model: Embeddings;
-}
-
-export const chatModelProviders: Record<
- string,
- () => Promise>
-> = {
+const chatModelProviders = {
openai: loadOpenAIChatModels,
- ollama: loadOllamaChatModels,
groq: loadGroqChatModels,
+ ollama: loadOllamaChatModels,
anthropic: loadAnthropicChatModels,
gemini: loadGeminiChatModels,
- deepseek: loadDeepseekChatModels,
- aimlapi: loadAimlApiChatModels,
- lmstudio: loadLMStudioChatModels,
};
-export const embeddingModelProviders: Record<
- string,
- () => Promise>
-> = {
- openai: loadOpenAIEmbeddingModels,
- ollama: loadOllamaEmbeddingModels,
- gemini: loadGeminiEmbeddingModels,
- transformers: loadTransformersEmbeddingsModels,
- aimlapi: loadAimlApiEmbeddingModels,
- lmstudio: loadLMStudioEmbeddingsModels,
+const embeddingModelProviders = {
+ openai: loadOpenAIEmbeddingsModels,
+ local: loadTransformersEmbeddingsModels,
+ ollama: loadOllamaEmbeddingsModels,
+ gemini: loadGeminiEmbeddingsModels,
};
export const getAvailableChatModelProviders = async () => {
- const models: Record> = {};
+ const models = {};
for (const provider in chatModelProviders) {
const providerModels = await chatModelProviders[provider]();
@@ -118,13 +46,13 @@ export const getAvailableChatModelProviders = async () => {
[customOpenAiModelName]: {
displayName: customOpenAiModelName,
model: new ChatOpenAI({
- apiKey: customOpenAiApiKey,
+ openAIApiKey: customOpenAiApiKey,
modelName: customOpenAiModelName,
temperature: 0.7,
configuration: {
baseURL: customOpenAiApiUrl,
},
- }) as unknown as BaseChatModel,
+ }),
},
}
: {}),
@@ -134,7 +62,7 @@ export const getAvailableChatModelProviders = async () => {
};
export const getAvailableEmbeddingModelProviders = async () => {
- const models: Record> = {};
+ const models = {};
for (const provider in embeddingModelProviders) {
const providerModels = await embeddingModelProviders[provider]();
diff --git a/src/lib/providers/lmstudio.ts b/src/lib/providers/lmstudio.ts
deleted file mode 100644
index f79c0aa..0000000
--- a/src/lib/providers/lmstudio.ts
+++ /dev/null
@@ -1,100 +0,0 @@
-import { getKeepAlive, getLMStudioApiEndpoint } from '../config';
-import axios from 'axios';
-import { ChatModel, EmbeddingModel } from '.';
-
-export const PROVIDER_INFO = {
- key: 'lmstudio',
- displayName: 'LM Studio',
-};
-import { ChatOpenAI } from '@langchain/openai';
-import { OpenAIEmbeddings } from '@langchain/openai';
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import { Embeddings } from '@langchain/core/embeddings';
-
-interface LMStudioModel {
- id: string;
- name?: string;
-}
-
-const ensureV1Endpoint = (endpoint: string): string =>
- endpoint.endsWith('/v1') ? endpoint : `${endpoint}/v1`;
-
-const checkServerAvailability = async (endpoint: string): Promise => {
- try {
- await axios.get(`${ensureV1Endpoint(endpoint)}/models`, {
- headers: { 'Content-Type': 'application/json' },
- });
- return true;
- } catch {
- return false;
- }
-};
-
-export const loadLMStudioChatModels = async () => {
- const endpoint = getLMStudioApiEndpoint();
-
- if (!endpoint) return {};
- if (!(await checkServerAvailability(endpoint))) return {};
-
- try {
- const response = await axios.get(`${ensureV1Endpoint(endpoint)}/models`, {
- headers: { 'Content-Type': 'application/json' },
- });
-
- const chatModels: Record = {};
-
- response.data.data.forEach((model: LMStudioModel) => {
- chatModels[model.id] = {
- displayName: model.name || model.id,
- model: new ChatOpenAI({
- apiKey: 'lm-studio',
- configuration: {
- baseURL: ensureV1Endpoint(endpoint),
- },
- modelName: model.id,
- temperature: 0.7,
- streaming: true,
- maxRetries: 3,
- }) as unknown as BaseChatModel,
- };
- });
-
- return chatModels;
- } catch (err) {
- console.error(`Error loading LM Studio models: ${err}`);
- return {};
- }
-};
-
-export const loadLMStudioEmbeddingsModels = async () => {
- const endpoint = getLMStudioApiEndpoint();
-
- if (!endpoint) return {};
- if (!(await checkServerAvailability(endpoint))) return {};
-
- try {
- const response = await axios.get(`${ensureV1Endpoint(endpoint)}/models`, {
- headers: { 'Content-Type': 'application/json' },
- });
-
- const embeddingsModels: Record = {};
-
- response.data.data.forEach((model: LMStudioModel) => {
- embeddingsModels[model.id] = {
- displayName: model.name || model.id,
- model: new OpenAIEmbeddings({
- apiKey: 'lm-studio',
- configuration: {
- baseURL: ensureV1Endpoint(endpoint),
- },
- modelName: model.id,
- }) as unknown as Embeddings,
- };
- });
-
- return embeddingsModels;
- } catch (err) {
- console.error(`Error loading LM Studio embeddings model: ${err}`);
- return {};
- }
-};
diff --git a/src/lib/providers/ollama.ts b/src/lib/providers/ollama.ts
index cb0b848..7277b27 100644
--- a/src/lib/providers/ollama.ts
+++ b/src/lib/providers/ollama.ts
@@ -1,86 +1,74 @@
+import { OllamaEmbeddings } from '@langchain/community/embeddings/ollama';
+import { getKeepAlive, getOllamaApiEndpoint } from '../../config';
+import logger from '../../utils/logger';
+import { ChatOllama } from '@langchain/community/chat_models/ollama';
import axios from 'axios';
-import { getKeepAlive, getOllamaApiEndpoint, getOllamaApiKey } from '../config';
-import { ChatModel, EmbeddingModel } from '.';
-
-export const PROVIDER_INFO = {
- key: 'ollama',
- displayName: 'Ollama',
-};
-import { ChatOllama } from '@langchain/ollama';
-import { OllamaEmbeddings } from '@langchain/ollama';
export const loadOllamaChatModels = async () => {
- const ollamaApiEndpoint = getOllamaApiEndpoint();
- const ollamaApiKey = getOllamaApiKey();
+ const ollamaEndpoint = getOllamaApiEndpoint();
+ const keepAlive = getKeepAlive();
- if (!ollamaApiEndpoint) return {};
+ if (!ollamaEndpoint) return {};
try {
- const res = await axios.get(`${ollamaApiEndpoint}/api/tags`, {
+ const response = await axios.get(`${ollamaEndpoint}/api/tags`, {
headers: {
'Content-Type': 'application/json',
},
});
- const { models } = res.data;
+ const { models: ollamaModels } = response.data;
- const chatModels: Record = {};
-
- models.forEach((model: any) => {
- chatModels[model.model] = {
+ const chatModels = ollamaModels.reduce((acc, model) => {
+ acc[model.model] = {
displayName: model.name,
model: new ChatOllama({
- baseUrl: ollamaApiEndpoint,
+ baseUrl: ollamaEndpoint,
model: model.model,
temperature: 0.7,
- keepAlive: getKeepAlive(),
- ...(ollamaApiKey
- ? { headers: { Authorization: `Bearer ${ollamaApiKey}` } }
- : {}),
+ keepAlive: keepAlive,
}),
};
- });
+
+ return acc;
+ }, {});
return chatModels;
} catch (err) {
- console.error(`Error loading Ollama models: ${err}`);
+ logger.error(`Error loading Ollama models: ${err}`);
return {};
}
};
-export const loadOllamaEmbeddingModels = async () => {
- const ollamaApiEndpoint = getOllamaApiEndpoint();
- const ollamaApiKey = getOllamaApiKey();
+export const loadOllamaEmbeddingsModels = async () => {
+ const ollamaEndpoint = getOllamaApiEndpoint();
- if (!ollamaApiEndpoint) return {};
+ if (!ollamaEndpoint) return {};
try {
- const res = await axios.get(`${ollamaApiEndpoint}/api/tags`, {
+ const response = await axios.get(`${ollamaEndpoint}/api/tags`, {
headers: {
'Content-Type': 'application/json',
},
});
- const { models } = res.data;
+ const { models: ollamaModels } = response.data;
- const embeddingModels: Record = {};
-
- models.forEach((model: any) => {
- embeddingModels[model.model] = {
+ const embeddingsModels = ollamaModels.reduce((acc, model) => {
+ acc[model.model] = {
displayName: model.name,
model: new OllamaEmbeddings({
- baseUrl: ollamaApiEndpoint,
+ baseUrl: ollamaEndpoint,
model: model.model,
- ...(ollamaApiKey
- ? { headers: { Authorization: `Bearer ${ollamaApiKey}` } }
- : {}),
}),
};
- });
- return embeddingModels;
+ return acc;
+ }, {});
+
+ return embeddingsModels;
} catch (err) {
- console.error(`Error loading Ollama embeddings models: ${err}`);
+ logger.error(`Error loading Ollama embeddings model: ${err}`);
return {};
}
};
diff --git a/src/lib/providers/openai.ts b/src/lib/providers/openai.ts
index 7e26763..3747e37 100644
--- a/src/lib/providers/openai.ts
+++ b/src/lib/providers/openai.ts
@@ -1,119 +1,89 @@
import { ChatOpenAI, OpenAIEmbeddings } from '@langchain/openai';
-import { getOpenaiApiKey } from '../config';
-import { ChatModel, EmbeddingModel } from '.';
-
-export const PROVIDER_INFO = {
- key: 'openai',
- displayName: 'OpenAI',
-};
-import { BaseChatModel } from '@langchain/core/language_models/chat_models';
-import { Embeddings } from '@langchain/core/embeddings';
-
-const openaiChatModels: Record[] = [
- {
- displayName: 'GPT-3.5 Turbo',
- key: 'gpt-3.5-turbo',
- },
- {
- displayName: 'GPT-4',
- key: 'gpt-4',
- },
- {
- displayName: 'GPT-4 turbo',
- key: 'gpt-4-turbo',
- },
- {
- displayName: 'GPT-4 omni',
- key: 'gpt-4o',
- },
- {
- displayName: 'GPT-4 omni mini',
- key: 'gpt-4o-mini',
- },
- {
- displayName: 'GPT 4.1 nano',
- key: 'gpt-4.1-nano',
- },
- {
- displayName: 'GPT 4.1 mini',
- key: 'gpt-4.1-mini',
- },
- {
- displayName: 'GPT 4.1',
- key: 'gpt-4.1',
- },
- {
- displayName: 'GPT 5 nano',
- key: 'gpt-5-nano',
- },
- {
- displayName: 'GPT 5 mini',
- key: 'gpt-5-mini',
- },
- {
- displayName: 'GPT 5',
- key: 'gpt-5',
- },
-];
-
-const openaiEmbeddingModels: Record[] = [
- {
- displayName: 'Text Embedding 3 Small',
- key: 'text-embedding-3-small',
- },
- {
- displayName: 'Text Embedding 3 Large',
- key: 'text-embedding-3-large',
- },
-];
+import { getOpenaiApiKey } from '../../config';
+import logger from '../../utils/logger';
export const loadOpenAIChatModels = async () => {
- const openaiApiKey = getOpenaiApiKey();
+ const openAIApiKey = getOpenaiApiKey();
- if (!openaiApiKey) return {};
+ if (!openAIApiKey) return {};
try {
- const chatModels: Record = {};
-
- openaiChatModels.forEach((model) => {
- chatModels[model.key] = {
- displayName: model.displayName,
+ const chatModels = {
+ 'gpt-3.5-turbo': {
+ displayName: 'GPT-3.5 Turbo',
model: new ChatOpenAI({
- apiKey: openaiApiKey,
- modelName: model.key,
- temperature: model.key.includes('gpt-5') ? 1 : 0.7,
- }) as unknown as BaseChatModel,
- };
- });
+ openAIApiKey,
+ modelName: 'gpt-3.5-turbo',
+ temperature: 0.7,
+ }),
+ },
+ 'gpt-4': {
+ displayName: 'GPT-4',
+ model: new ChatOpenAI({
+ openAIApiKey,
+ modelName: 'gpt-4',
+ temperature: 0.7,
+ }),
+ },
+ 'gpt-4-turbo': {
+ displayName: 'GPT-4 turbo',
+ model: new ChatOpenAI({
+ openAIApiKey,
+ modelName: 'gpt-4-turbo',
+ temperature: 0.7,
+ }),
+ },
+ 'gpt-4o': {
+ displayName: 'GPT-4 omni',
+ model: new ChatOpenAI({
+ openAIApiKey,
+ modelName: 'gpt-4o',
+ temperature: 0.7,
+ }),
+ },
+ 'gpt-4o-mini': {
+ displayName: 'GPT-4 omni mini',
+ model: new ChatOpenAI({
+ openAIApiKey,
+ modelName: 'gpt-4o-mini',
+ temperature: 0.7,
+ }),
+ },
+ };
return chatModels;
} catch (err) {
- console.error(`Error loading OpenAI models: ${err}`);
+ logger.error(`Error loading OpenAI models: ${err}`);
return {};
}
};
-export const loadOpenAIEmbeddingModels = async () => {
- const openaiApiKey = getOpenaiApiKey();
+export const loadOpenAIEmbeddingsModels = async () => {
+ const openAIApiKey = getOpenaiApiKey();
- if (!openaiApiKey) return {};
+ if (!openAIApiKey) return {};
try {
- const embeddingModels: Record = {};
-
- openaiEmbeddingModels.forEach((model) => {
- embeddingModels[model.key] = {
- displayName: model.displayName,
+ const embeddingModels = {
+ 'text-embedding-3-small': {
+ displayName: 'Text Embedding 3 Small',
model: new OpenAIEmbeddings({
- apiKey: openaiApiKey,
- modelName: model.key,
- }) as unknown as Embeddings,
- };
- });
+ openAIApiKey,
+ modelName: 'text-embedding-3-small',
+ }),
+ },
+ 'text-embedding-3-large': {
+ displayName: 'Text Embedding 3 Large',
+ model: new OpenAIEmbeddings({
+ openAIApiKey,
+ modelName: 'text-embedding-3-large',
+ }),
+ },
+ };
return embeddingModels;
} catch (err) {
- console.error(`Error loading OpenAI embeddings models: ${err}`);
+ logger.error(`Error loading OpenAI embeddings model: ${err}`);
return {};
}
};
diff --git a/src/lib/providers/transformers.ts b/src/lib/providers/transformers.ts
index 3098d9f..8a3417d 100644
--- a/src/lib/providers/transformers.ts
+++ b/src/lib/providers/transformers.ts
@@ -1,10 +1,6 @@
+import logger from '../../utils/logger';
import { HuggingFaceTransformersEmbeddings } from '../huggingfaceTransformer';
-export const PROVIDER_INFO = {
- key: 'transformers',
- displayName: 'Hugging Face',
-};
-
export const loadTransformersEmbeddingsModels = async () => {
try {
const embeddingModels = {
@@ -30,7 +26,7 @@ export const loadTransformersEmbeddingsModels = async () => {
return embeddingModels;
} catch (err) {
- console.error(`Error loading Transformers embeddings model: ${err}`);
+ logger.error(`Error loading Transformers embeddings model: ${err}`);
return {};
}
};
diff --git a/src/lib/search/index.ts b/src/lib/search/index.ts
deleted file mode 100644
index 01fb87f..0000000
--- a/src/lib/search/index.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import MetaSearchAgent from '@/lib/search/metaSearchAgent';
-import prompts from '../prompts';
-
-export const searchHandlers: Record = {
- webSearch: new MetaSearchAgent({
- activeEngines: [],
- queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,
- responsePrompt: prompts.webSearchResponsePrompt,
- rerank: true,
- rerankThreshold: 0.3,
- searchWeb: true,
- summarizer: true,
- }),
- academicSearch: new MetaSearchAgent({
- activeEngines: ['arxiv', 'google scholar', 'pubmed'],
- queryGeneratorPrompt: prompts.academicSearchRetrieverPrompt,
- responsePrompt: prompts.academicSearchResponsePrompt,
- rerank: true,
- rerankThreshold: 0,
- searchWeb: true,
- summarizer: false,
- }),
- writingAssistant: new MetaSearchAgent({
- activeEngines: [],
- queryGeneratorPrompt: '',
- responsePrompt: prompts.writingAssistantPrompt,
- rerank: true,
- rerankThreshold: 0,
- searchWeb: false,
- summarizer: false,
- }),
- wolframAlphaSearch: new MetaSearchAgent({
- activeEngines: ['wolframalpha'],
- queryGeneratorPrompt: prompts.wolframAlphaSearchRetrieverPrompt,
- responsePrompt: prompts.wolframAlphaSearchResponsePrompt,
- rerank: false,
- rerankThreshold: 0,
- searchWeb: true,
- summarizer: false,
- }),
- youtubeSearch: new MetaSearchAgent({
- activeEngines: ['youtube'],
- queryGeneratorPrompt: prompts.youtubeSearchRetrieverPrompt,
- responsePrompt: prompts.youtubeSearchResponsePrompt,
- rerank: true,
- rerankThreshold: 0.3,
- searchWeb: true,
- summarizer: false,
- }),
- redditSearch: new MetaSearchAgent({
- activeEngines: ['reddit'],
- queryGeneratorPrompt: prompts.redditSearchRetrieverPrompt,
- responsePrompt: prompts.redditSearchResponsePrompt,
- rerank: true,
- rerankThreshold: 0.3,
- searchWeb: true,
- summarizer: false,
- }),
-};
diff --git a/src/lib/searchEngines/bing.ts b/src/lib/searchEngines/bing.ts
new file mode 100644
index 0000000..0d46a10
--- /dev/null
+++ b/src/lib/searchEngines/bing.ts
@@ -0,0 +1,105 @@
+import axios from 'axios';
+import { getBingSubscriptionKey } from '../../config';
+
+interface BingAPISearchResult {
+ _type: string;
+ name: string;
+ url: string;
+ displayUrl: string;
+ snippet?: string;
+ dateLastCrawled?: string;
+ thumbnailUrl?: string;
+ contentUrl?: string;
+ hostPageUrl?: string;
+ width?: number;
+ height?: number;
+ accentColor?: string;
+ contentSize?: string;
+ datePublished?: string;
+ encodingFormat?: string;
+ hostPageDisplayUrl?: string;
+ id?: string;
+ isLicensed?: boolean;
+ isFamilyFriendly?: boolean;
+ language?: string;
+ mediaUrl?: string;
+ motionThumbnailUrl?: string;
+ publisher?: string;
+ viewCount?: number;
+ webSearchUrl?: string;
+ primaryImageOfPage?: {
+ thumbnailUrl?: string;
+ width?: number;
+ height?: number;
+ };
+ video?: {
+ allowHttpsEmbed?: boolean;
+ embedHtml?: string;
+ allowMobileEmbed?: boolean;
+ viewCount?: number;
+ duration?: string;
+ };
+ image?: {
+ thumbnail?: {
+ contentUrl?: string;
+ width?: number;
+ height?: number;
+ };
+ imageInsightsToken?: string;
+ imageId?: string;
+ };
+}
+
+export const searchBingAPI = async (query: string) => {
+ try {
+ const bingApiKey = await getBingSubscriptionKey();
+ const url = new URL(`https://api.cognitive.microsoft.com/bing/v7.0/search`);
+ url.searchParams.append('q', query);
+ url.searchParams.append('responseFilter', 'Webpages,Images,Videos');
+
+ const res = await axios.get(url.toString(), {
+ headers: {
+ 'Ocp-Apim-Subscription-Key': bingApiKey,
+ Accept: 'application/json',
+ },
+ });
+
+ if (res.data.error) {
+ throw new Error(`Bing API Error: ${res.data.error.message}`);
+ }
+
+ const originalres = res.data;
+
+ // Extract web, image, and video results
+ const webResults = originalres.webPages?.value || [];
+ const imageResults = originalres.images?.value || [];
+ const videoResults = originalres.videos?.value || [];
+
+ const results = webResults.map((item: BingAPISearchResult) => ({
+ title: item.name,
+ url: item.url,
+ content: item.snippet,
+ img_src:
+ item.primaryImageOfPage?.thumbnailUrl ||
+ imageResults.find((img: any) => img.hostPageUrl === item.url)
+ ?.thumbnailUrl ||
+ videoResults.find((vid: any) => vid.hostPageUrl === item.url)
+ ?.thumbnailUrl,
+ ...(item.video && {
+ videoData: {
+ duration: item.video.duration,
+ embedUrl: item.video.embedHtml?.match(/src="(.*?)"/)?.[1],
+ },
+ publisher: item.publisher,
+ datePublished: item.datePublished,
+ }),
+ }));
+
+ return { results, originalres };
+ } catch (error) {
+ const errorMessage = error.response?.data
+ ? JSON.stringify(error.response.data, null, 2)
+ : error.message || 'Unknown error';
+ throw new Error(`Bing API Error: ${errorMessage}`);
+ }
+};
diff --git a/src/lib/searchEngines/brave.ts b/src/lib/searchEngines/brave.ts
new file mode 100644
index 0000000..ba6ae5a
--- /dev/null
+++ b/src/lib/searchEngines/brave.ts
@@ -0,0 +1,102 @@
+import axios from 'axios';
+import { getBraveApiKey } from '../../config';
+
+interface BraveSearchResult {
+ title: string;
+ url: string;
+ content?: string;
+ img_src?: string;
+ age?: string;
+ family_friendly?: boolean;
+ language?: string;
+ video?: {
+ embedUrl?: string;
+ duration?: string;
+ };
+ rating?: {
+ value: number;
+ scale: number;
+ };
+ products?: Array<{
+ name: string;
+ price?: string;
+ }>;
+ recipe?: {
+ ingredients?: string[];
+ cookTime?: string;
+ };
+ meta?: {
+ fetched?: string;
+ lastCrawled?: string;
+ };
+}
+
+export const searchBraveAPI = async (
+ query: string,
+ numResults: number = 20,
+): Promise<{ results: BraveSearchResult[]; originalres: any }> => {
+ try {
+ const braveApiKey = await getBraveApiKey();
+ const url = new URL(`https://api.search.brave.com/res/v1/web/search`);
+
+ url.searchParams.append('q', query);
+ url.searchParams.append('count', numResults.toString());
+
+ const res = await axios.get(url.toString(), {
+ headers: {
+ 'X-Subscription-Token': braveApiKey,
+ Accept: 'application/json',
+ },
+ });
+
+ if (res.data.error) {
+ throw new Error(`Brave API Error: ${res.data.error.message}`);
+ }
+
+ const originalres = res.data;
+ const webResults = originalres.web?.results || [];
+
+ const results: BraveSearchResult[] = webResults.map((item: any) => ({
+ title: item.title,
+ url: item.url,
+ content: item.description,
+ img_src: item.thumbnail?.src || item.deep_results?.images?.[0]?.src,
+ age: item.age,
+ family_friendly: item.family_friendly,
+ language: item.language,
+ video: item.video
+ ? {
+ embedUrl: item.video.embed_url,
+ duration: item.video.duration,
+ }
+ : undefined,
+ rating: item.rating
+ ? {
+ value: item.rating.value,
+ scale: item.rating.scale_max,
+ }
+ : undefined,
+ products: item.deep_results?.product_cluster?.map((p: any) => ({
+ name: p.name,
+ price: p.price,
+ })),
+ recipe: item.recipe
+ ? {
+ ingredients: item.recipe.ingredients,
+ cookTime: item.recipe.cook_time,
+ }
+ : undefined,
+ meta: {
+ fetched: item.meta?.fetched,
+ lastCrawled: item.meta?.last_crawled,
+ },
+ }));
+
+ return { results, originalres };
+ } catch (error) {
+ const errorMessage = error.response?.data
+ ? JSON.stringify(error.response.data, null, 2)
+ : error.message || 'Unknown error';
+ throw new Error(`Brave API Error: ${errorMessage}`);
+ }
+};
diff --git a/src/lib/searchEngines/google_pse.ts b/src/lib/searchEngines/google_pse.ts
new file mode 100644
index 0000000..4cdb659
--- /dev/null
+++ b/src/lib/searchEngines/google_pse.ts
@@ -0,0 +1,85 @@
+import axios from 'axios';
+import { getGoogleApiKey, getGoogleCseId } from '../../config';
+
+interface GooglePSESearchResult {
+ kind: string;
+ title: string;
+ htmlTitle: string;
+ link: string;
+ displayLink: string;
+ snippet?: string;
+ htmlSnippet?: string;
+ cacheId?: string;
+ formattedUrl: string;
+ htmlFormattedUrl: string;
+ pagemap?: {
+ videoobject: any;
+ cse_thumbnail?: Array<{
+ src: string;
+ width: string;
+ height: string;
+ }>;
+ metatags?: Array<{
+ [key: string]: string;
+ author?: string;
+ }>;
+ cse_image?: Array<{
+ src: string;
+ }>;
+ };
+ fileFormat?: string;
+ image?: {
+ contextLink: string;
+ thumbnailLink: string;
+ };
+ mime?: string;
+ labels?: Array<{
+ name: string;
+ displayName: string;
+ }>;
+}
+
+export const searchGooglePSE = async (query: string) => {
+ try {
+ const [googleApiKey, googleCseID] = await Promise.all([
+ getGoogleApiKey(),
+ getGoogleCseId(),
+ ]);
+
+ const url = new URL(`https://www.googleapis.com/customsearch/v1`);
+ url.searchParams.append('q', query);
+ url.searchParams.append('cx', googleCseID);
+ url.searchParams.append('key', googleApiKey);
+
+ const res = await axios.get(url.toString());
+
+ if (res.data.error) {
+ throw new Error(`Google PSE Error: ${res.data.error.message}`);
+ }
+
+ const originalres = res.data.items;
+
+ const results = originalres.map((item: GooglePSESearchResult) => ({
+ title: item.title,
+ url: item.link,
+ content: item.snippet,
+ img_src:
+ item.pagemap?.cse_image?.[0]?.src ||
+ item.pagemap?.cse_thumbnail?.[0]?.src ||
+ item.image?.thumbnailLink,
+ ...(item.pagemap?.videoobject?.[0] && {
+ videoData: {
+ duration: item.pagemap.videoobject[0].duration,
+ embedUrl: item.pagemap.videoobject[0].embedurl,
+ },
+ }),
+ }));
+
+ return { results, originalres };
+ } catch (error) {
+ const errorMessage = error.response?.data
+ ? JSON.stringify(error.response.data, null, 2)
+ : error.message || 'Unknown error';
+ throw new Error(`Google PSE Error: ${errorMessage}`);
+ }
+};
diff --git a/src/lib/searxng.ts b/src/lib/searchEngines/searxng.ts
similarity index 77%
rename from src/lib/searxng.ts
rename to src/lib/searchEngines/searxng.ts
index ae19db2..bfa3d4e 100644
--- a/src/lib/searxng.ts
+++ b/src/lib/searchEngines/searxng.ts
@@ -1,5 +1,5 @@
import axios from 'axios';
-import { getSearxngApiEndpoint } from './config';
+import { getSearxngApiEndpoint } from '../../config';
interface SearxngSearchOptions {
categories?: string[];
@@ -30,12 +30,11 @@ export const searchSearxng = async (
if (opts) {
Object.keys(opts).forEach((key) => {
- const value = opts[key as keyof SearxngSearchOptions];
- if (Array.isArray(value)) {
- url.searchParams.append(key, value.join(','));
+ if (Array.isArray(opts[key])) {
+ url.searchParams.append(key, opts[key].join(','));
return;
}
- url.searchParams.append(key, value as string);
+ url.searchParams.append(key, opts[key]);
});
}
diff --git a/src/lib/searchEngines/yacy.ts b/src/lib/searchEngines/yacy.ts
new file mode 100644
index 0000000..74fc76c
--- /dev/null
+++ b/src/lib/searchEngines/yacy.ts
@@ -0,0 +1,79 @@
+import axios from 'axios';
+import { getYacyJsonEndpoint } from '../../config';
+
+interface YaCySearchResult {
+ channels: {
+ title: string;
+ description: string;
+ link: string;
+ image: {
+ url: string;
+ title: string;
+ link: string;
+ };
+ startIndex: string;
+ itemsPerPage: string;
+ searchTerms: string;
+ items: {
+ title: string;
+ link: string;
+ code: string;
+ description: string;
+ pubDate: string;
+ image?: string;
+ size: string;
+ sizename: string;
+ guid: string;
+ faviconUrl: string;
+ host: string;
+ path: string;
+ file: string;
+ urlhash: string;
+ ranking: string;
+ }[];
+ navigation: {
+ facetname: string;
+ displayname: string;
+ type: string;
+ min: string;
+ max: string;
+ mean: string;
+ elements: {
+ name: string;
+ count: string;
+ modifier: string;
+ url: string;
+ }[];
+ }[];
+ }[];
+}
+
+export const searchYaCy = async (query: string, numResults: number = 20) => {
+ try {
+ const yacyBaseUrl = getYacyJsonEndpoint();
+
+ const url = new URL(`${yacyBaseUrl}/yacysearch.json`);
+ url.searchParams.append('query', query);
+ url.searchParams.append('count', numResults.toString());
+
+ const res = await axios.get(url.toString());
+
+ const originalres = res.data as YaCySearchResult;
+
+ const results = originalres.channels[0].items.map((item) => ({
+ title: item.title,
+ url: item.link,
+ content: item.description,
+ img_src: item.image || null,
+ pubDate: item.pubDate,
+ host: item.host,
+ }));
+
+ return { results, originalres };
+ } catch (error) {
+ const errorMessage = error.response?.data
+ ? JSON.stringify(error.response.data, null, 2)
+ : error.message || 'Unknown error';
+ throw new Error(`YaCy Error: ${errorMessage}`);
+ }
+};
diff --git a/src/lib/types/compute-dot.d.ts b/src/lib/types/compute-dot.d.ts
deleted file mode 100644
index b671c64..0000000
--- a/src/lib/types/compute-dot.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-declare function computeDot(vectorA: number[], vectorB: number[]): number;
-
-declare module 'compute-dot' {
- export default computeDot;
-}
diff --git a/src/lib/utils/formatHistory.ts b/src/lib/utils/formatHistory.ts
deleted file mode 100644
index 733ffc0..0000000
--- a/src/lib/utils/formatHistory.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { BaseMessage, isAIMessage } from '@langchain/core/messages';
-
-const formatChatHistoryAsString = (history: BaseMessage[]) => {
- return history
- .map(
- (message) =>
- `${isAIMessage(message) ? 'AI' : 'User'}: ${message.content}`,
- )
- .join('\n');
-};
-
-export default formatChatHistoryAsString;
diff --git a/src/lib/prompts/academicSearch.ts b/src/prompts/academicSearch.ts
similarity index 93%
rename from src/lib/prompts/academicSearch.ts
rename to src/prompts/academicSearch.ts
index d015910..c2946ff 100644
--- a/src/lib/prompts/academicSearch.ts
+++ b/src/prompts/academicSearch.ts
@@ -51,10 +51,6 @@ export const academicSearchResponsePrompt = `
- If no relevant information is found, say: "Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?" Be transparent about limitations and suggest alternatives or ways to reframe the query.
- You are set on focus mode 'Academic', this means you will be searching for academic papers and articles on the web.
- ### User instructions
- These instructions are shared to you by the user and not by the system. You will have to follow them but give them less priority than the above instructions. If the user has provided specific instructions or preferences, incorporate them into your response while adhering to the overall guidelines.
- {systemInstructions}
-
### Example Output
- Begin with a brief introduction summarizing the event or query topic.
- Follow with detailed sections under clear headings, covering all aspects of the query if possible.
diff --git a/src/lib/prompts/index.ts b/src/prompts/index.ts
similarity index 100%
rename from src/lib/prompts/index.ts
rename to src/prompts/index.ts
diff --git a/src/lib/prompts/redditSearch.ts b/src/prompts/redditSearch.ts
similarity index 93%
rename from src/lib/prompts/redditSearch.ts
rename to src/prompts/redditSearch.ts
index 577fa82..fc71957 100644
--- a/src/lib/prompts/redditSearch.ts
+++ b/src/prompts/redditSearch.ts
@@ -51,10 +51,6 @@ export const redditSearchResponsePrompt = `
- If no relevant information is found, say: "Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?" Be transparent about limitations and suggest alternatives or ways to reframe the query.
- You are set on focus mode 'Reddit', this means you will be searching for information, opinions and discussions on the web using Reddit.
- ### User instructions
- These instructions are shared to you by the user and not by the system. You will have to follow them but give them less priority than the above instructions. If the user has provided specific instructions or preferences, incorporate them into your response while adhering to the overall guidelines.
- {systemInstructions}
-
### Example Output
- Begin with a brief introduction summarizing the event or query topic.
- Follow with detailed sections under clear headings, covering all aspects of the query if possible.
diff --git a/src/lib/prompts/webSearch.ts b/src/prompts/webSearch.ts
similarity index 90%
rename from src/lib/prompts/webSearch.ts
rename to src/prompts/webSearch.ts
index 1a431ea..d8269c8 100644
--- a/src/lib/prompts/webSearch.ts
+++ b/src/prompts/webSearch.ts
@@ -1,6 +1,6 @@
export const webSearchRetrieverPrompt = `
You are an AI question rephraser. You will be given a conversation and a follow-up question, you will have to rephrase the follow up question so it is a standalone question and can be used by another LLM to search the web for information to answer it.
-If it is a simple writing task or a greeting (unless the greeting contains a question after it) like Hi, Hello, How are you, etc. than a question then you need to return \`not_needed\` as the response (This is because the LLM won't need to search the web for finding information on this topic).
+If it is a smple writing task or a greeting (unless the greeting contains a question after it) like Hi, Hello, How are you, etc. than a question then you need to return \`not_needed\` as the response (This is because the LLM won't need to search the web for finding information on this topic).
If the user asks some question from some URL or wants you to summarize a PDF or a webpage (via URL) you need to return the links inside the \`links\` XML block and the question inside the \`question\` XML block. If the user wants to you to summarize the webpage or the PDF you need to return \`summarize\` inside the \`question\` XML block in place of a question and the link to summarize in the \`links\` XML block.
You must always return the rephrased question inside the \`question\` XML block, if there are no links in the follow-up question then don't insert a \`links\` XML block in your response.
@@ -92,10 +92,6 @@ export const webSearchResponsePrompt = `
- If the user provides vague input or if relevant information is missing, explain what additional details might help refine the search.
- If no relevant information is found, say: "Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?" Be transparent about limitations and suggest alternatives or ways to reframe the query.
- ### User instructions
- These instructions are shared to you by the user and not by the system. You will have to follow them but give them less priority than the above instructions. If the user has provided specific instructions or preferences, incorporate them into your response while adhering to the overall guidelines.
- {systemInstructions}
-
### Example Output
- Begin with a brief introduction summarizing the event or query topic.
- Follow with detailed sections under clear headings, covering all aspects of the query if possible.
diff --git a/src/lib/prompts/wolframAlpha.ts b/src/prompts/wolframAlpha.ts
similarity index 93%
rename from src/lib/prompts/wolframAlpha.ts
rename to src/prompts/wolframAlpha.ts
index 63145dd..40410c1 100644
--- a/src/lib/prompts/wolframAlpha.ts
+++ b/src/prompts/wolframAlpha.ts
@@ -51,10 +51,6 @@ export const wolframAlphaSearchResponsePrompt = `
- If no relevant information is found, say: "Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?" Be transparent about limitations and suggest alternatives or ways to reframe the query.
- You are set on focus mode 'Wolfram Alpha', this means you will be searching for information on the web using Wolfram Alpha. It is a computational knowledge engine that can answer factual queries and perform computations.
- ### User instructions
- These instructions are shared to you by the user and not by the system. You will have to follow them but give them less priority than the above instructions. If the user has provided specific instructions or preferences, incorporate them into your response while adhering to the overall guidelines.
- {systemInstructions}
-
### Example Output
- Begin with a brief introduction summarizing the event or query topic.
- Follow with detailed sections under clear headings, covering all aspects of the query if possible.
diff --git a/src/lib/prompts/writingAssistant.ts b/src/prompts/writingAssistant.ts
similarity index 79%
rename from src/lib/prompts/writingAssistant.ts
rename to src/prompts/writingAssistant.ts
index 565827a..f56bf47 100644
--- a/src/lib/prompts/writingAssistant.ts
+++ b/src/prompts/writingAssistant.ts
@@ -7,10 +7,6 @@ You have to cite the answer using [number] notation. You must cite the sentences
Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2].
However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer.
-### User instructions
-These instructions are shared to you by the user and not by the system. You will have to follow them but give them less priority than the above instructions. If the user has provided specific instructions or preferences, incorporate them into your response while adhering to the overall guidelines.
-{systemInstructions}
-
{context}
diff --git a/src/lib/prompts/youtubeSearch.ts b/src/prompts/youtubeSearch.ts
similarity index 93%
rename from src/lib/prompts/youtubeSearch.ts
rename to src/prompts/youtubeSearch.ts
index 9898016..5805b54 100644
--- a/src/lib/prompts/youtubeSearch.ts
+++ b/src/prompts/youtubeSearch.ts
@@ -51,10 +51,6 @@ export const youtubeSearchResponsePrompt = `
- If no relevant information is found, say: "Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?" Be transparent about limitations and suggest alternatives or ways to reframe the query.
- You are set on focus mode 'Youtube', this means you will be searching for videos on the web using Youtube and providing information based on the video's transcrip
- ### User instructions
- These instructions are shared to you by the user and not by the system. You will have to follow them but give them less priority than the above instructions. If the user has provided specific instructions or preferences, incorporate them into your response while adhering to the overall guidelines.
- {systemInstructions}
-
### Example Output
- Begin with a brief introduction summarizing the event or query topic.
- Follow with detailed sections under clear headings, covering all aspects of the query if possible.
diff --git a/src/routes/chats.ts b/src/routes/chats.ts
new file mode 100644
index 0000000..afa74f9
--- /dev/null
+++ b/src/routes/chats.ts
@@ -0,0 +1,66 @@
+import express from 'express';
+import logger from '../utils/logger';
+import db from '../db/index';
+import { eq } from 'drizzle-orm';
+import { chats, messages } from '../db/schema';
+
+const router = express.Router();
+
+router.get('/', async (_, res) => {
+ try {
+ let chats = await db.query.chats.findMany();
+
+ chats = chats.reverse();
+
+ return res.status(200).json({ chats: chats });
+ } catch (err) {
+ res.status(500).json({ message: 'An error has occurred.' });
+ logger.error(`Error in getting chats: ${err.message}`);
+ }
+});
+
+router.get('/:id', async (req, res) => {
+ try {
+ const chatExists = await db.query.chats.findFirst({
+ where: eq(chats.id, req.params.id),
+ });
+
+ if (!chatExists) {
+ return res.status(404).json({ message: 'Chat not found' });
+ }
+
+ const chatMessages = await db.query.messages.findMany({
+ where: eq(messages.chatId, req.params.id),
+ });
+
+ return res.status(200).json({ chat: chatExists, messages: chatMessages });
+ } catch (err) {
+ res.status(500).json({ message: 'An error has occurred.' });
+ logger.error(`Error in getting chat: ${err.message}`);
+ }
+});
+
+router.delete(`/:id`, async (req, res) => {
+ try {
+ const chatExists = await db.query.chats.findFirst({
+ where: eq(chats.id, req.params.id),
+ });
+
+ if (!chatExists) {
+ return res.status(404).json({ message: 'Chat not found' });
+ }
+
+ await db.delete(chats).where(eq(chats.id, req.params.id)).execute();
+ await db
+ .delete(messages)
+ .where(eq(messages.chatId, req.params.id))
+ .execute();
+
+ return res.status(200).json({ message: 'Chat deleted successfully' });
+ } catch (err) {
+ res.status(500).json({ message: 'An error has occurred.' });
+ logger.error(`Error in deleting chat: ${err.message}`);
+ }
+});
+
+export default router;
diff --git a/src/routes/config.ts b/src/routes/config.ts
new file mode 100644
index 0000000..c4fe167
--- /dev/null
+++ b/src/routes/config.ts
@@ -0,0 +1,153 @@
+import express from 'express';
+import {
+ getAvailableChatModelProviders,
+ getAvailableEmbeddingModelProviders,
+} from '../lib/providers';
+import {
+ getGroqApiKey,
+ getOllamaApiEndpoint,
+ getAnthropicApiKey,
+ getGeminiApiKey,
+ getOpenaiApiKey,
+ updateConfig,
+ getCustomOpenaiApiUrl,
+ getCustomOpenaiApiKey,
+ getCustomOpenaiModelName,
+ getSearchEngineBackend,
+ getImageSearchEngineBackend,
+ getVideoSearchEngineBackend,
+ getNewsSearchEngineBackend,
+ getSearxngApiEndpoint,
+ getGoogleApiKey,
+ getGoogleCseId,
+ getBingSubscriptionKey,
+ getBraveApiKey,
+ getYacyJsonEndpoint,
+} from '../config';
+import logger from '../utils/logger';
+
+const router = express.Router();
+
+router.get('/', async (_, res) => {
+ try {
+ const config = {};
+
+ const [chatModelProviders, embeddingModelProviders] = await Promise.all([
+ getAvailableChatModelProviders(),
+ getAvailableEmbeddingModelProviders(),
+ ]);
+
+ config['chatModelProviders'] = {};
+ config['embeddingModelProviders'] = {};
+
+ for (const provider in chatModelProviders) {
+ config['chatModelProviders'][provider] = Object.keys(
+ chatModelProviders[provider],
+ ).map((model) => {
+ return {
+ name: model,
+ displayName: chatModelProviders[provider][model].displayName,
+ };
+ });
+ }
+
+ for (const provider in embeddingModelProviders) {
+ config['embeddingModelProviders'][provider] = Object.keys(
+ embeddingModelProviders[provider],
+ ).map((model) => {
+ return {
+ name: model,
+ displayName: embeddingModelProviders[provider][model].displayName,
+ };
+ });
+ }
+
+ config['openaiApiKey'] = getOpenaiApiKey();
+ config['ollamaApiUrl'] = getOllamaApiEndpoint();
+ config['anthropicApiKey'] = getAnthropicApiKey();
+ config['groqApiKey'] = getGroqApiKey();
+ config['geminiApiKey'] = getGeminiApiKey();
+ config['customOpenaiApiUrl'] = getCustomOpenaiApiUrl();
+ config['customOpenaiApiKey'] = getCustomOpenaiApiKey();
+ config['customOpenaiModelName'] = getCustomOpenaiModelName();
+
+ // Add search engine configuration
+ config['searchEngineBackends'] = {
+ search: getSearchEngineBackend(),
+ image: getImageSearchEngineBackend(),
+ video: getVideoSearchEngineBackend(),
+ news: getNewsSearchEngineBackend(),
+ };
+
+ config['searxngEndpoint'] = getSearxngApiEndpoint();
+ config['googleApiKey'] = getGoogleApiKey();
+ config['googleCseId'] = getGoogleCseId();
+ config['bingSubscriptionKey'] = getBingSubscriptionKey();
+ config['braveApiKey'] = getBraveApiKey();
+ config['yacyEndpoint'] = getYacyJsonEndpoint();
+
+ res.status(200).json(config);
+ } catch (err: any) {
+ res.status(500).json({ message: 'An error has occurred.' });
+ logger.error(`Error getting config: ${err.message}`);
+ }
+});
+
+router.post('/', async (req, res) => {
+ const config = req.body;
+
+ const updatedConfig = {
+ MODELS: {
+ OPENAI: {
+ API_KEY: config.openaiApiKey,
+ },
+ GROQ: {
+ API_KEY: config.groqApiKey,
+ },
+ ANTHROPIC: {
+ API_KEY: config.anthropicApiKey,
+ },
+ GEMINI: {
+ API_KEY: config.geminiApiKey,
+ },
+ OLLAMA: {
+ API_URL: config.ollamaApiUrl,
+ },
+ CUSTOM_OPENAI: {
+ API_URL: config.customOpenaiApiUrl,
+ API_KEY: config.customOpenaiApiKey,
+ MODEL_NAME: config.customOpenaiModelName,
+ },
+ },
+ SEARCH_ENGINE_BACKENDS: config.searchEngineBackends ? {
+ SEARCH: config.searchEngineBackends.search,
+ IMAGE: config.searchEngineBackends.image,
+ VIDEO: config.searchEngineBackends.video,
+ NEWS: config.searchEngineBackends.news,
+ } : undefined,
+ SEARCH_ENGINES: {
+ GOOGLE: {
+ API_KEY: config.googleApiKey,
+ CSE_ID: config.googleCseId,
+ },
+ SEARXNG: {
+ ENDPOINT: config.searxngEndpoint,
+ },
+ BING: {
+ SUBSCRIPTION_KEY: config.bingSubscriptionKey,
+ },
+ BRAVE: {
+ API_KEY: config.braveApiKey,
+ },
+ YACY: {
+ ENDPOINT: config.yacyEndpoint,
+ },
+ },
+ };
+
+ updateConfig(updatedConfig);
+
+ res.status(200).json({ message: 'Config updated' });
+});
+
+export default router;
diff --git a/src/routes/discover.ts b/src/routes/discover.ts
new file mode 100644
index 0000000..3d3f1e3
--- /dev/null
+++ b/src/routes/discover.ts
@@ -0,0 +1,131 @@
+import express from 'express';
+import { searchSearxng } from '../lib/searchEngines/searxng';
+import { searchGooglePSE } from '../lib/searchEngines/google_pse';
+import { searchBraveAPI } from '../lib/searchEngines/brave';
+import { searchYaCy } from '../lib/searchEngines/yacy';
+import { searchBingAPI } from '../lib/searchEngines/bing';
+import { getNewsSearchEngineBackend } from '../config';
+import logger from '../utils/logger';
+
+const router = express.Router();
+
+async function performSearch(query: string, site: string) {
+ const searchEngine = getNewsSearchEngineBackend();
+ switch (searchEngine) {
+ case 'google': {
+ const googleResult = await searchGooglePSE(query);
+
+ return googleResult.originalres.map((item) => {
+ const imageSources = [
+ item.pagemap?.cse_image?.[0]?.src,
+ item.pagemap?.cse_thumbnail?.[0]?.src,
+ item.pagemap?.metatags?.[0]?.['og:image'],
+ item.pagemap?.metatags?.[0]?.['twitter:image'],
+ item.pagemap?.metatags?.[0]?.['image'],
+ ].filter(Boolean); // Remove undefined values
+
+ return {
+ title: item.title,
+ url: item.link,
+ content: item.snippet,
+ thumbnail: imageSources[0], // First available image
+ img_src: imageSources[0], // Same as thumbnail for consistency
+ iframe_src: null,
+ author: item.pagemap?.metatags?.[0]?.['og:site_name'] || site,
+ publishedDate:
+ item.pagemap?.metatags?.[0]?.['article:published_time'],
+ };
+ });
+ }
+
+ case 'searxng': {
+ const searxResult = await searchSearxng(query, {
+ engines: ['bing news'],
+ pageno: 1,
+ });
+ return searxResult.results;
+ }
+
+ case 'brave': {
+ const braveResult = await searchBraveAPI(query);
+ return braveResult.results.map((item) => ({
+ title: item.title,
+ url: item.url,
+ content: item.content,
+ thumbnail: item.img_src,
+ img_src: item.img_src,
+ iframe_src: null,
+ author: item.meta?.fetched || site,
+ publishedDate: item.meta?.lastCrawled,
+ }));
+ }
+
+ case 'yacy': {
+ const yacyResult = await searchYaCy(query);
+ return yacyResult.results.map((item) => ({
+ title: item.title,
+ url: item.url,
+ content: item.content,
+ thumbnail: item.img_src,
+ img_src: item.img_src,
+ iframe_src: null,
+ author: item?.host || site,
+ publishedDate: item?.pubDate,
+ }));
+ }
+
+ case 'bing': {
+ const bingResult = await searchBingAPI(query);
+ return bingResult.results.map((item) => ({
+ title: item.title,
+ url: item.url,
+ content: item.content,
+ thumbnail: item.img_src,
+ img_src: item.img_src,
+ iframe_src: null,
+ author: item?.publisher || site,
+ publishedDate: item?.datePublished,
+ }));
+ }
+
+ default:
+ throw new Error(`Unknown search engine ${searchEngine}`);
+ }
+}
+
+router.get('/', async (req, res) => {
+ try {
+ const queries = [
+ { site: 'businessinsider.com', topic: 'AI' },
+ { site: 'www.exchangewire.com', topic: 'AI' },
+ { site: 'yahoo.com', topic: 'AI' },
+ { site: 'businessinsider.com', topic: 'tech' },
+ { site: 'www.exchangewire.com', topic: 'tech' },
+ { site: 'yahoo.com', topic: 'tech' },
+ ];
+
+ const data = (
+ await Promise.all(
+ queries.map(async ({ site, topic }) => {
+ try {
+ const query = `site:${site} ${topic}`;
+ return await performSearch(query, site);
+ } catch (error) {
+ logger.error(`Error searching ${site}: ${error.message}`);
+ return [];
+ }
+ }),
+ )
+ )
+ .flat()
+ .sort(() => Math.random() - 0.5)
+ .filter((item) => item.title && item.url && item.content);
+
+ return res.json({ blogs: data });
+ } catch (err: any) {
+ logger.error(`Error in discover route: ${err.message}`);
+ return res.status(500).json({ message: 'An error has occurred' });
+ }
+});
+
+export default router;
diff --git a/src/routes/images.ts b/src/routes/images.ts
new file mode 100644
index 0000000..5671657
--- /dev/null
+++ b/src/routes/images.ts
@@ -0,0 +1,82 @@
+import express from 'express';
+import handleImageSearch from '../chains/imageSearchAgent';
+import { BaseChatModel } from '@langchain/core/language_models/chat_models';
+import { getAvailableChatModelProviders } from '../lib/providers';
+import { HumanMessage, AIMessage } from '@langchain/core/messages';
+import logger from '../utils/logger';
+import { ChatOpenAI } from '@langchain/openai';
+import {
+ getCustomOpenaiApiKey,
+ getCustomOpenaiApiUrl,
+ getCustomOpenaiModelName,
+} from '../config';
+
+const router = express.Router();
+
+interface ChatModel {
+ provider: string;
+ model: string;
+}
+
+interface ImageSearchBody {
+ query: string;
+ chatHistory: any[];
+ chatModel?: ChatModel;
+}
+
+router.post('/', async (req, res) => {
+ try {
+ let body: ImageSearchBody = req.body;
+
+ const chatHistory = body.chatHistory.map((msg: any) => {
+ if (msg.role === 'user') {
+ return new HumanMessage(msg.content);
+ } else if (msg.role === 'assistant') {
+ return new AIMessage(msg.content);
+ }
+ });
+
+ const chatModelProviders = await getAvailableChatModelProviders();
+
+ const chatModelProvider =
+ body.chatModel?.provider || Object.keys(chatModelProviders)[0];
+ const chatModel =
+ body.chatModel?.model ||
+ Object.keys(chatModelProviders[chatModelProvider])[0];
+
+ let llm: BaseChatModel | undefined;
+
+ if (body.chatModel?.provider === 'custom_openai') {
+ llm = new ChatOpenAI({
+ modelName: getCustomOpenaiModelName(),
+ openAIApiKey: getCustomOpenaiApiKey(),
+ temperature: 0.7,
+ configuration: {
+ baseURL: getCustomOpenaiApiUrl(),
+ },
+ }) as unknown as BaseChatModel;
+ } else if (
+ chatModelProviders[chatModelProvider] &&
+ chatModelProviders[chatModelProvider][chatModel]
+ ) {
+ llm = chatModelProviders[chatModelProvider][chatModel]
+ .model as unknown as BaseChatModel | undefined;
+ }
+
+ if (!llm) {
+ return res.status(400).json({ message: 'Invalid model selected' });
+ }
+
+ const images = await handleImageSearch(
+ { query: body.query, chat_history: chatHistory },
+ llm,
+ );
+
+ res.status(200).json({ images });
+ } catch (err) {
+ res.status(500).json({ message: 'An error has occurred.' });
+ logger.error(`Error in image search: ${err.message}`);
+ }
+});
+
+export default router;
diff --git a/src/routes/index.ts b/src/routes/index.ts
new file mode 100644
index 0000000..cb2c915
--- /dev/null
+++ b/src/routes/index.ts
@@ -0,0 +1,24 @@
+import express from 'express';
+import imagesRouter from './images';
+import videosRouter from './videos';
+import configRouter from './config';
+import modelsRouter from './models';
+import suggestionsRouter from './suggestions';
+import chatsRouter from './chats';
+import searchRouter from './search';
+import discoverRouter from './discover';
+import uploadsRouter from './uploads';
+
+const router = express.Router();
+
+router.use('/images', imagesRouter);
+router.use('/videos', videosRouter);
+router.use('/config', configRouter);
+router.use('/models', modelsRouter);
+router.use('/suggestions', suggestionsRouter);
+router.use('/chats', chatsRouter);
+router.use('/search', searchRouter);
+router.use('/discover', discoverRouter);
+router.use('/uploads', uploadsRouter);
+
+export default router;
diff --git a/src/routes/models.ts b/src/routes/models.ts
new file mode 100644
index 0000000..b5fbe12
--- /dev/null
+++ b/src/routes/models.ts
@@ -0,0 +1,36 @@
+import express from 'express';
+import logger from '../utils/logger';
+import {
+ getAvailableChatModelProviders,
+ getAvailableEmbeddingModelProviders,
+} from '../lib/providers';
+
+const router = express.Router();
+
+router.get('/', async (req, res) => {
+ try {
+ const [chatModelProviders, embeddingModelProviders] = await Promise.all([
+ getAvailableChatModelProviders(),
+ getAvailableEmbeddingModelProviders(),
+ ]);
+
+ Object.keys(chatModelProviders).forEach((provider) => {
+ Object.keys(chatModelProviders[provider]).forEach((model) => {
+ delete chatModelProviders[provider][model].model;
+ });
+ });
+
+ Object.keys(embeddingModelProviders).forEach((provider) => {
+ Object.keys(embeddingModelProviders[provider]).forEach((model) => {
+ delete embeddingModelProviders[provider][model].model;
+ });
+ });
+
+ res.status(200).json({ chatModelProviders, embeddingModelProviders });
+ } catch (err) {
+ res.status(500).json({ message: 'An error has occurred.' });
+ logger.error(err.message);
+ }
+});
+
+export default router;
diff --git a/src/routes/search.ts b/src/routes/search.ts
new file mode 100644
index 0000000..57d90a3
--- /dev/null
+++ b/src/routes/search.ts
@@ -0,0 +1,158 @@
+import express from 'express';
+import logger from '../utils/logger';
+import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
+import type { Embeddings } from '@langchain/core/embeddings';
+import { ChatOpenAI } from '@langchain/openai';
+import {
+ getAvailableChatModelProviders,
+ getAvailableEmbeddingModelProviders,
+} from '../lib/providers';
+import { searchHandlers } from '../websocket/messageHandler';
+import { AIMessage, BaseMessage, HumanMessage } from '@langchain/core/messages';
+import { MetaSearchAgentType } from '../search/metaSearchAgent';
+import {
+ getCustomOpenaiApiKey,
+ getCustomOpenaiApiUrl,
+ getCustomOpenaiModelName,
+} from '../config';
+
+const router = express.Router();
+
+interface chatModel {
+ provider: string;
+ model: string;
+ customOpenAIKey?: string;
+ customOpenAIBaseURL?: string;
+}
+
+interface embeddingModel {
+ provider: string;
+ model: string;
+}
+
+interface ChatRequestBody {
+ optimizationMode: 'speed' | 'balanced';
+ focusMode: string;
+ chatModel?: chatModel;
+ embeddingModel?: embeddingModel;
+ query: string;
+ history: Array<[string, string]>;
+}
+
+router.post('/', async (req, res) => {
+ try {
+ const body: ChatRequestBody = req.body;
+
+ if (!body.focusMode || !body.query) {
+ return res.status(400).json({ message: 'Missing focus mode or query' });
+ }
+
+ body.history = body.history || [];
+ body.optimizationMode = body.optimizationMode || 'balanced';
+
+ const history: BaseMessage[] = body.history.map((msg) => {
+ if (msg[0] === 'human') {
+ return new HumanMessage({
+ content: msg[1],
+ });
+ } else {
+ return new AIMessage({
+ content: msg[1],
+ });
+ }
+ });
+
+ const [chatModelProviders, embeddingModelProviders] = await Promise.all([
+ getAvailableChatModelProviders(),
+ getAvailableEmbeddingModelProviders(),
+ ]);
+
+ const chatModelProvider =
+ body.chatModel?.provider || Object.keys(chatModelProviders)[0];
+ const chatModel =
+ body.chatModel?.model ||
+ Object.keys(chatModelProviders[chatModelProvider])[0];
+
+ const embeddingModelProvider =
+ body.embeddingModel?.provider || Object.keys(embeddingModelProviders)[0];
+ const embeddingModel =
+ body.embeddingModel?.model ||
+ Object.keys(embeddingModelProviders[embeddingModelProvider])[0];
+
+ let llm: BaseChatModel | undefined;
+ let embeddings: Embeddings | undefined;
+
+ if (body.chatModel?.provider === 'custom_openai') {
+ llm = new ChatOpenAI({
+ modelName: body.chatModel?.model || getCustomOpenaiModelName(),
+ openAIApiKey:
+ body.chatModel?.customOpenAIKey || getCustomOpenaiApiKey(),
+ temperature: 0.7,
+ configuration: {
+ baseURL:
+ body.chatModel?.customOpenAIBaseURL || getCustomOpenaiApiUrl(),
+ },
+ }) as unknown as BaseChatModel;
+ } else if (
+ chatModelProviders[chatModelProvider] &&
+ chatModelProviders[chatModelProvider][chatModel]
+ ) {
+ llm = chatModelProviders[chatModelProvider][chatModel]
+ .model as unknown as BaseChatModel | undefined;
+ }
+
+ if (
+ embeddingModelProviders[embeddingModelProvider] &&
+ embeddingModelProviders[embeddingModelProvider][embeddingModel]
+ ) {
+ embeddings = embeddingModelProviders[embeddingModelProvider][
+ embeddingModel
+ ].model as Embeddings | undefined;
+ }
+
+ if (!llm || !embeddings) {
+ return res.status(400).json({ message: 'Invalid model selected' });
+ }
+
+ const searchHandler: MetaSearchAgentType = searchHandlers[body.focusMode];
+
+ if (!searchHandler) {
+ return res.status(400).json({ message: 'Invalid focus mode' });
+ }
+
+ const emitter = await searchHandler.searchAndAnswer(
+ body.query,
+ history,
+ llm,
+ embeddings,
+ body.optimizationMode,
+ [],
+ );
+
+ let message = '';
+ let sources = [];
+
+ emitter.on('data', (data) => {
+ const parsedData = JSON.parse(data);
+ if (parsedData.type === 'response') {
+ message += parsedData.data;
+ } else if (parsedData.type === 'sources') {
+ sources = parsedData.data;
+ }
+ });
+
+ emitter.on('end', () => {
+ res.status(200).json({ message, sources });
+ });
+
+ emitter.on('error', (data) => {
+ const parsedData = JSON.parse(data);
+ res.status(500).json({ message: parsedData.data });
+ });
+ } catch (err: any) {
+ logger.error(`Error in getting search results: ${err.message}`);
+ res.status(500).json({ message: 'An error has occurred.' });
+ }
+});
+
+export default router;
diff --git a/src/routes/suggestions.ts b/src/routes/suggestions.ts
new file mode 100644
index 0000000..7dd1739
--- /dev/null
+++ b/src/routes/suggestions.ts
@@ -0,0 +1,81 @@
+import express from 'express';
+import generateSuggestions from '../chains/suggestionGeneratorAgent';
+import { BaseChatModel } from '@langchain/core/language_models/chat_models';
+import { getAvailableChatModelProviders } from '../lib/providers';
+import { HumanMessage, AIMessage } from '@langchain/core/messages';
+import logger from '../utils/logger';
+import { ChatOpenAI } from '@langchain/openai';
+import {
+ getCustomOpenaiApiKey,
+ getCustomOpenaiApiUrl,
+ getCustomOpenaiModelName,
+} from '../config';
+
+const router = express.Router();
+
+interface ChatModel {
+ provider: string;
+ model: string;
+}
+
+interface SuggestionsBody {
+ chatHistory: any[];
+ chatModel?: ChatModel;
+}
+
+router.post('/', async (req, res) => {
+ try {
+ let body: SuggestionsBody = req.body;
+
+ const chatHistory = body.chatHistory.map((msg: any) => {
+ if (msg.role === 'user') {
+ return new HumanMessage(msg.content);
+ } else if (msg.role === 'assistant') {
+ return new AIMessage(msg.content);
+ }
+ });
+
+ const chatModelProviders = await getAvailableChatModelProviders();
+
+ const chatModelProvider =
+ body.chatModel?.provider || Object.keys(chatModelProviders)[0];
+ const chatModel =
+ body.chatModel?.model ||
+ Object.keys(chatModelProviders[chatModelProvider])[0];
+
+ let llm: BaseChatModel | undefined;
+
+ if (body.chatModel?.provider === 'custom_openai') {
+ llm = new ChatOpenAI({
+ modelName: getCustomOpenaiModelName(),
+ openAIApiKey: getCustomOpenaiApiKey(),
+ temperature: 0.7,
+ configuration: {
+ baseURL: getCustomOpenaiApiUrl(),
+ },
+ }) as unknown as BaseChatModel;
+ } else if (
+ chatModelProviders[chatModelProvider] &&
+ chatModelProviders[chatModelProvider][chatModel]
+ ) {
+ llm = chatModelProviders[chatModelProvider][chatModel]
+ .model as unknown as BaseChatModel | undefined;
+ }
+
+ if (!llm) {
+ return res.status(400).json({ message: 'Invalid model selected' });
+ }
+
+ const suggestions = await generateSuggestions(
+ { chat_history: chatHistory },
+ llm,
+ );
+
+ res.status(200).json({ suggestions: suggestions });
+ } catch (err) {
+ res.status(500).json({ message: 'An error has occurred.' });
+ logger.error(`Error in generating suggestions: ${err.message}`);
+ }
+});
+
+export default router;
diff --git a/src/routes/uploads.ts b/src/routes/uploads.ts
new file mode 100644
index 0000000..7b063fc
--- /dev/null
+++ b/src/routes/uploads.ts
@@ -0,0 +1,151 @@
+import express from 'express';
+import logger from '../utils/logger';
+import multer from 'multer';
+import path from 'path';
+import crypto from 'crypto';
+import fs from 'fs';
+import { Embeddings } from '@langchain/core/embeddings';
+import { getAvailableEmbeddingModelProviders } from '../lib/providers';
+import { PDFLoader } from '@langchain/community/document_loaders/fs/pdf';
+import { DocxLoader } from '@langchain/community/document_loaders/fs/docx';
+import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters';
+import { Document } from 'langchain/document';
+
+const router = express.Router();
+
+const splitter = new RecursiveCharacterTextSplitter({
+ chunkSize: 500,
+ chunkOverlap: 100,
+});
+
+const storage = multer.diskStorage({
+ destination: (req, file, cb) => {
+ cb(null, path.join(process.cwd(), './uploads'));
+ },
+ filename: (req, file, cb) => {
+ const splitedFileName = file.originalname.split('.');
+ const fileExtension = splitedFileName[splitedFileName.length - 1];
+ if (!['pdf', 'docx', 'txt'].includes(fileExtension)) {
+ return cb(new Error('File type is not supported'), '');
+ }
+ cb(null, `${crypto.randomBytes(16).toString('hex')}.${fileExtension}`);
+ },
+});
+
+const upload = multer({ storage });
+
+router.post(
+ '/',
+ upload.fields([
+ { name: 'files' },
+ { name: 'embedding_model', maxCount: 1 },
+ { name: 'embedding_model_provider', maxCount: 1 },
+ ]),
+ async (req, res) => {
+ try {
+ const { embedding_model, embedding_model_provider } = req.body;
+
+ if (!embedding_model || !embedding_model_provider) {
+ res
+ .status(400)
+ .json({ message: 'Missing embedding model or provider' });
+ return;
+ }
+
+ const embeddingModels = await getAvailableEmbeddingModelProviders();
+ const provider =
+ embedding_model_provider ?? Object.keys(embeddingModels)[0];
+ const embeddingModel: Embeddings =
+ embedding_model ?? Object.keys(embeddingModels[provider])[0];
+
+ let embeddingsModel: Embeddings | undefined;
+
+ if (
+ embeddingModels[provider] &&
+ embeddingModels[provider][embeddingModel]
+ ) {
+ embeddingsModel = embeddingModels[provider][embeddingModel].model as
+ | Embeddings
+ | undefined;
+ }
+
+ if (!embeddingsModel) {
+ res.status(400).json({ message: 'Invalid LLM model selected' });
+ return;
+ }
+
+ const files = req.files['files'] as Express.Multer.File[];
+ if (!files || files.length === 0) {
+ res.status(400).json({ message: 'No files uploaded' });
+ return;
+ }
+
+ await Promise.all(
+ files.map(async (file) => {
+ let docs: Document[] = [];
+
+ if (file.mimetype === 'application/pdf') {
+ const loader = new PDFLoader(file.path);
+ docs = await loader.load();
+ } else if (
+ file.mimetype ===
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
+ ) {
+ const loader = new DocxLoader(file.path);
+ docs = await loader.load();
+ } else if (file.mimetype === 'text/plain') {
+ const text = fs.readFileSync(file.path, 'utf-8');
+ docs = [
+ new Document({
+ pageContent: text,
+ metadata: {
+ title: file.originalname,
+ },
+ }),
+ ];
+ }
+
+ const splitted = await splitter.splitDocuments(docs);
+
+ const json = JSON.stringify({
+ title: file.originalname,
+ contents: splitted.map((doc) => doc.pageContent),
+ });
+
+ const pathToSave = file.path.replace(/\.\w+$/, '-extracted.json');
+ fs.writeFileSync(pathToSave, json);
+
+ const embeddings = await embeddingsModel.embedDocuments(
+ splitted.map((doc) => doc.pageContent),
+ );
+
+ const embeddingsJSON = JSON.stringify({
+ title: file.originalname,
+ embeddings: embeddings,
+ });
+
+ const pathToSaveEmbeddings = file.path.replace(
+ /\.\w+$/,
+ '-embeddings.json',
+ );
+ fs.writeFileSync(pathToSaveEmbeddings, embeddingsJSON);
+ }),
+ );
+
+ res.status(200).json({
+ files: files.map((file) => {
+ return {
+ fileName: file.originalname,
+ fileExtension: file.filename.split('.').pop(),
+ fileId: file.filename.replace(/\.\w+$/, ''),
+ };
+ }),
+ });
+ } catch (err: any) {
+ logger.error(`Error in uploading file results: ${err.message}`);
+ res.status(500).json({ message: 'An error has occurred.' });
+ }
+ },
+);
+
+export default router;
diff --git a/src/routes/videos.ts b/src/routes/videos.ts
new file mode 100644
index 0000000..b631f26
--- /dev/null
+++ b/src/routes/videos.ts
@@ -0,0 +1,82 @@
+import express from 'express';
+import { BaseChatModel } from '@langchain/core/language_models/chat_models';
+import { getAvailableChatModelProviders } from '../lib/providers';
+import { HumanMessage, AIMessage } from '@langchain/core/messages';
+import logger from '../utils/logger';
+import handleVideoSearch from '../chains/videoSearchAgent';
+import { ChatOpenAI } from '@langchain/openai';
+import {
+ getCustomOpenaiApiKey,
+ getCustomOpenaiApiUrl,
+ getCustomOpenaiModelName,
+} from '../config';
+
+const router = express.Router();
+
+interface ChatModel {
+ provider: string;
+ model: string;
+}
+
+interface VideoSearchBody {
+ query: string;
+ chatHistory: any[];
+ chatModel?: ChatModel;
+}
+
+router.post('/', async (req, res) => {
+ try {
+ let body: VideoSearchBody = req.body;
+
+ const chatHistory = body.chatHistory.map((msg: any) => {
+ if (msg.role === 'user') {
+ return new HumanMessage(msg.content);
+ } else if (msg.role === 'assistant') {
+ return new AIMessage(msg.content);
+ }
+ });
+
+ const chatModelProviders = await getAvailableChatModelProviders();
+
+ const chatModelProvider =
+ body.chatModel?.provider || Object.keys(chatModelProviders)[0];
+ const chatModel =
+ body.chatModel?.model ||
+ Object.keys(chatModelProviders[chatModelProvider])[0];
+
+ let llm: BaseChatModel | undefined;
+
+ if (body.chatModel?.provider === 'custom_openai') {
+ llm = new ChatOpenAI({
+ modelName: getCustomOpenaiModelName(),
+ openAIApiKey: getCustomOpenaiApiKey(),
+ temperature: 0.7,
+ configuration: {
+ baseURL: getCustomOpenaiApiUrl(),
+ },
+ }) as unknown as BaseChatModel;
+ } else if (
+ chatModelProviders[chatModelProvider] &&
+ chatModelProviders[chatModelProvider][chatModel]
+ ) {
+ llm = chatModelProviders[chatModelProvider][chatModel]
+ .model as unknown as BaseChatModel | undefined;
+ }
+
+ if (!llm) {
+ return res.status(400).json({ message: 'Invalid model selected' });
+ }
+
+ const videos = await handleVideoSearch(
+ { chat_history: chatHistory, query: body.query },
+ llm,
+ );
+
+ res.status(200).json({ videos });
+ } catch (err) {
+ res.status(500).json({ message: 'An error has occurred.' });
+ logger.error(`Error in video search: ${err.message}`);
+ }
+});
+
+export default router;
diff --git a/src/lib/search/metaSearchAgent.ts b/src/search/metaSearchAgent.ts
similarity index 90%
rename from src/lib/search/metaSearchAgent.ts
rename to src/search/metaSearchAgent.ts
index 67b7c58..81dd063 100644
--- a/src/lib/search/metaSearchAgent.ts
+++ b/src/search/metaSearchAgent.ts
@@ -13,17 +13,23 @@ import {
} from '@langchain/core/runnables';
import { BaseMessage } from '@langchain/core/messages';
import { StringOutputParser } from '@langchain/core/output_parsers';
-import LineListOutputParser from '../outputParsers/listLineOutputParser';
-import LineOutputParser from '../outputParsers/lineOutputParser';
+import LineListOutputParser from '../lib/outputParsers/listLineOutputParser';
+import LineOutputParser from '../lib/outputParsers/lineOutputParser';
import { getDocumentsFromLinks } from '../utils/documents';
import { Document } from 'langchain/document';
-import { searchSearxng } from '../searxng';
-import path from 'node:path';
-import fs from 'node:fs';
+import { searchSearxng } from '../lib/searchEngines/searxng';
+import { searchGooglePSE } from '../lib/searchEngines/google_pse';
+import { searchBingAPI } from '../lib/searchEngines/bing';
+import { searchBraveAPI } from '../lib/searchEngines/brave';
+import { searchYaCy } from '../lib/searchEngines/yacy';
+import { getSearchEngineBackend } from '../config';
+import path from 'path';
+import fs from 'fs';
import computeSimilarity from '../utils/computeSimilarity';
import formatChatHistoryAsString from '../utils/formatHistory';
import eventEmitter from 'events';
import { StreamEvent } from '@langchain/core/tracers/log_stream';
+import { IterableReadableStream } from '@langchain/core/utils/stream';
export interface MetaSearchAgentType {
searchAndAnswer: (
@@ -33,7 +39,6 @@ export interface MetaSearchAgentType {
embeddings: Embeddings,
optimizationMode: 'speed' | 'balanced' | 'quality',
fileIds: string[],
- systemInstructions: string,
) => Promise;
}
@@ -90,7 +95,7 @@ class MetaSearchAgent implements MetaSearchAgentType {
question = 'summarize';
}
- let docs: Document[] = [];
+ let docs = [];
const linkDocs = await getDocumentsFromLinks({ links });
@@ -132,7 +137,7 @@ class MetaSearchAgent implements MetaSearchAgentType {
You are a web search summarizer, tasked with summarizing a piece of text retrieved from a web search. Your job is to summarize the
text into a detailed, 2-4 paragraph explanation that captures the main ideas and provides a comprehensive answer to the query.
If the query is \"summarize\", you should provide a detailed summary of the text. If the query is a specific question, you should answer it in the summary.
-
+
- **Journalistic tone**: The summary should sound professional and journalistic, not too casual or vague.
- **Thorough and detailed**: Ensure that every key point from the text is captured and that the summary directly answers the query.
- **Not too lengthy, but detailed**: The summary should be informative but not excessively long. Focus on providing detailed information in a concise format.
@@ -203,12 +208,37 @@ class MetaSearchAgent implements MetaSearchAgentType {
return { query: question, docs: docs };
} else {
- question = question.replace(/.*?<\/think>/g, '');
+ const searchEngine = getSearchEngineBackend();
- const res = await searchSearxng(question, {
- language: 'en',
- engines: this.config.activeEngines,
- });
+ let res;
+ switch (searchEngine) {
+ case 'searxng':
+ res = await searchSearxng(question, {
+ language: 'en',
+ engines: this.config.activeEngines,
+ });
+ break;
+ case 'google':
+ res = await searchGooglePSE(question);
+ break;
+ case 'bing':
+ res = await searchBingAPI(question);
+ break;
+ case 'brave':
+ res = await searchBraveAPI(question);
+ break;
+ case 'yacy':
+ res = await searchYaCy(question);
+ break;
+ default:
+ throw new Error(`Unknown search engine ${searchEngine}`);
+ }
+
+ if (!res?.results) {
+ throw new Error(
+ `No results found for search engine: ${searchEngine}`,
+ );
+ }
const documents = res.results.map(
(result) =>
@@ -237,11 +267,9 @@ class MetaSearchAgent implements MetaSearchAgentType {
fileIds: string[],
embeddings: Embeddings,
optimizationMode: 'speed' | 'balanced' | 'quality',
- systemInstructions: string,
) {
return RunnableSequence.from([
RunnableMap.from({
- systemInstructions: () => systemInstructions,
query: (input: BasicChainInput) => input.query,
chat_history: (input: BasicChainInput) => input.chat_history,
date: () => new Date().toISOString(),
@@ -315,7 +343,7 @@ class MetaSearchAgent implements MetaSearchAgentType {
const embeddings = JSON.parse(fs.readFileSync(embeddingsPath, 'utf8'));
const fileSimilaritySearchObject = content.contents.map(
- (c: string, i: number) => {
+ (c: string, i) => {
return {
fileName: content.title,
content: c,
@@ -418,8 +446,6 @@ class MetaSearchAgent implements MetaSearchAgentType {
return sortedDocs;
}
-
- return [];
}
private processDocs(docs: Document[]) {
@@ -432,7 +458,7 @@ class MetaSearchAgent implements MetaSearchAgentType {
}
private async handleStream(
- stream: AsyncGenerator,
+ stream: IterableReadableStream,
emitter: eventEmitter,
) {
for await (const event of stream) {
@@ -471,7 +497,6 @@ class MetaSearchAgent implements MetaSearchAgentType {
embeddings: Embeddings,
optimizationMode: 'speed' | 'balanced' | 'quality',
fileIds: string[],
- systemInstructions: string,
) {
const emitter = new eventEmitter();
@@ -480,7 +505,6 @@ class MetaSearchAgent implements MetaSearchAgentType {
fileIds,
embeddings,
optimizationMode,
- systemInstructions,
);
const stream = answeringChain.streamEvents(
diff --git a/src/lib/utils/computeSimilarity.ts b/src/utils/computeSimilarity.ts
similarity index 91%
rename from src/lib/utils/computeSimilarity.ts
rename to src/utils/computeSimilarity.ts
index a635577..6e36b75 100644
--- a/src/lib/utils/computeSimilarity.ts
+++ b/src/utils/computeSimilarity.ts
@@ -6,7 +6,7 @@ const computeSimilarity = (x: number[], y: number[]): number => {
const similarityMeasure = getSimilarityMeasure();
if (similarityMeasure === 'cosine') {
- return cosineSimilarity(x, y) as number;
+ return cosineSimilarity(x, y);
} else if (similarityMeasure === 'dot') {
return dot(x, y);
}
diff --git a/src/lib/utils/documents.ts b/src/utils/documents.ts
similarity index 92%
rename from src/lib/utils/documents.ts
rename to src/utils/documents.ts
index 93eb451..5cd0366 100644
--- a/src/lib/utils/documents.ts
+++ b/src/utils/documents.ts
@@ -3,6 +3,7 @@ import { htmlToText } from 'html-to-text';
import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter';
import { Document } from '@langchain/core/documents';
import pdfParse from 'pdf-parse';
+import logger from './logger';
export const getDocumentsFromLinks = async ({ links }: { links: string[] }) => {
const splitter = new RecursiveCharacterTextSplitter();
@@ -64,7 +65,7 @@ export const getDocumentsFromLinks = async ({ links }: { links: string[] }) => {
const splittedText = await splitter.splitText(parsedText);
const title = res.data
.toString('utf8')
- .match(/(.*?)<\/title>/)?.[1];
+ .match(/(.*?)<\/title>/)?.[1];
const linkDocs = splittedText.map((text) => {
return new Document({
@@ -78,13 +79,12 @@ export const getDocumentsFromLinks = async ({ links }: { links: string[] }) => {
docs.push(...linkDocs);
} catch (err) {
- console.error(
- 'An error occurred while getting documents from links: ',
- err,
+ logger.error(
+ `Error at generating documents from links: ${err.message}`,
);
docs.push(
new Document({
- pageContent: `Failed to retrieve content from the link: ${err}`,
+ pageContent: `Failed to retrieve content from the link: ${err.message}`,
metadata: {
title: 'Failed to retrieve content',
url: link,
diff --git a/src/lib/utils/files.ts b/src/utils/files.ts
similarity index 100%
rename from src/lib/utils/files.ts
rename to src/utils/files.ts
diff --git a/src/utils/formatHistory.ts b/src/utils/formatHistory.ts
new file mode 100644
index 0000000..6d0d309
--- /dev/null
+++ b/src/utils/formatHistory.ts
@@ -0,0 +1,9 @@
+import { BaseMessage } from '@langchain/core/messages';
+
+const formatChatHistoryAsString = (history: BaseMessage[]) => {
+ return history
+ .map((message) => `${message._getType()}: ${message.content}`)
+ .join('\n');
+};
+
+export default formatChatHistoryAsString;
diff --git a/src/utils/logger.ts b/src/utils/logger.ts
new file mode 100644
index 0000000..1c81eb9
--- /dev/null
+++ b/src/utils/logger.ts
@@ -0,0 +1,22 @@
+import winston from 'winston';
+
+const logger = winston.createLogger({
+ level: 'info',
+ transports: [
+ new winston.transports.Console({
+ format: winston.format.combine(
+ winston.format.colorize(),
+ winston.format.simple(),
+ ),
+ }),
+ new winston.transports.File({
+ filename: 'app.log',
+ format: winston.format.combine(
+ winston.format.timestamp(),
+ winston.format.json(),
+ ),
+ }),
+ ],
+});
+
+export default logger;
diff --git a/src/websocket/connectionManager.ts b/src/websocket/connectionManager.ts
new file mode 100644
index 0000000..bb8f242
--- /dev/null
+++ b/src/websocket/connectionManager.ts
@@ -0,0 +1,122 @@
+import { WebSocket } from 'ws';
+import { handleMessage } from './messageHandler';
+import {
+ getAvailableEmbeddingModelProviders,
+ getAvailableChatModelProviders,
+} from '../lib/providers';
+import { BaseChatModel } from '@langchain/core/language_models/chat_models';
+import type { Embeddings } from '@langchain/core/embeddings';
+import type { IncomingMessage } from 'http';
+import logger from '../utils/logger';
+import { ChatOpenAI } from '@langchain/openai';
+import {
+ getCustomOpenaiApiKey,
+ getCustomOpenaiApiUrl,
+ getCustomOpenaiModelName,
+} from '../config';
+
+export const handleConnection = async (
+ ws: WebSocket,
+ request: IncomingMessage,
+) => {
+ try {
+ const searchParams = new URL(request.url, `http://${request.headers.host}`)
+ .searchParams;
+
+ const [chatModelProviders, embeddingModelProviders] = await Promise.all([
+ getAvailableChatModelProviders(),
+ getAvailableEmbeddingModelProviders(),
+ ]);
+
+ const chatModelProvider =
+ searchParams.get('chatModelProvider') ||
+ Object.keys(chatModelProviders)[0];
+ const chatModel =
+ searchParams.get('chatModel') ||
+ Object.keys(chatModelProviders[chatModelProvider])[0];
+
+ const embeddingModelProvider =
+ searchParams.get('embeddingModelProvider') ||
+ Object.keys(embeddingModelProviders)[0];
+ const embeddingModel =
+ searchParams.get('embeddingModel') ||
+ Object.keys(embeddingModelProviders[embeddingModelProvider])[0];
+
+ let llm: BaseChatModel | undefined;
+ let embeddings: Embeddings | undefined;
+
+ if (
+ chatModelProviders[chatModelProvider] &&
+ chatModelProviders[chatModelProvider][chatModel] &&
+ chatModelProvider != 'custom_openai'
+ ) {
+ llm = chatModelProviders[chatModelProvider][chatModel]
+ .model as unknown as BaseChatModel | undefined;
+ } else if (chatModelProvider == 'custom_openai') {
+ const customOpenaiApiKey = getCustomOpenaiApiKey();
+ const customOpenaiApiUrl = getCustomOpenaiApiUrl();
+ const customOpenaiModelName = getCustomOpenaiModelName();
+
+ if (customOpenaiApiKey && customOpenaiApiUrl && customOpenaiModelName) {
+ llm = new ChatOpenAI({
+ modelName: customOpenaiModelName,
+ openAIApiKey: customOpenaiApiKey,
+ temperature: 0.7,
+ configuration: {
+ baseURL: customOpenaiApiUrl,
+ },
+ }) as unknown as BaseChatModel;
+ }
+ }
+
+ if (
+ embeddingModelProviders[embeddingModelProvider] &&
+ embeddingModelProviders[embeddingModelProvider][embeddingModel]
+ ) {
+ embeddings = embeddingModelProviders[embeddingModelProvider][
+ embeddingModel
+ ].model as Embeddings | undefined;
+ }
+
+ if (!llm || !embeddings) {
+ ws.send(
+ JSON.stringify({
+ type: 'error',
+ data: 'Invalid LLM or embeddings model selected, please refresh the page and try again.',
+ key: 'INVALID_MODEL_SELECTED',
+ }),
+ );
+ ws.close();
+ }
+
+ const interval = setInterval(() => {
+ if (ws.readyState === ws.OPEN) {
+ ws.send(
+ JSON.stringify({
+ type: 'signal',
+ data: 'open',
+ }),
+ );
+ clearInterval(interval);
+ }
+ }, 5);
+
+ ws.on(
+ 'message',
+ async (message) =>
+ await handleMessage(message.toString(), ws, llm, embeddings),
+ );
+
+ ws.on('close', () => logger.debug('Connection closed'));
+ } catch (err) {
+ ws.send(
+ JSON.stringify({
+ type: 'error',
+ data: 'Internal server error.',
+ key: 'INTERNAL_SERVER_ERROR',
+ }),
+ );
+ ws.close();
+ logger.error(err);
+ }
+};
diff --git a/src/websocket/index.ts b/src/websocket/index.ts
new file mode 100644
index 0000000..1b9ae77
--- /dev/null
+++ b/src/websocket/index.ts
@@ -0,0 +1,8 @@
+import { initServer } from './websocketServer';
+import http from 'http';
+
+export const startWebSocketServer = (
+ server: http.Server,
+) => {
+ initServer(server);
+};
diff --git a/src/websocket/messageHandler.ts b/src/websocket/messageHandler.ts
new file mode 100644
index 0000000..395c0de
--- /dev/null
+++ b/src/websocket/messageHandler.ts
@@ -0,0 +1,272 @@
+import { EventEmitter, WebSocket } from 'ws';
+import { BaseMessage, AIMessage, HumanMessage } from '@langchain/core/messages';
+import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
+import type { Embeddings } from '@langchain/core/embeddings';
+import logger from '../utils/logger';
+import db from '../db';
+import { chats, messages as messagesSchema } from '../db/schema';
+import { eq, asc, gt, and } from 'drizzle-orm';
+import crypto from 'crypto';
+import { getFileDetails } from '../utils/files';
+import MetaSearchAgent, {
+ MetaSearchAgentType,
+} from '../search/metaSearchAgent';
+import prompts from '../prompts';
+
+type Message = {
+ messageId: string;
+ chatId: string;
+ content: string;
+};
+
+type WSMessage = {
+ message: Message;
+ optimizationMode: 'speed' | 'balanced' | 'quality';
+ type: string;
+ focusMode: string;
+ history: Array<[string, string]>;
+ files: Array;
+};
+
+export const searchHandlers = {
+ webSearch: new MetaSearchAgent({
+ activeEngines: [],
+ queryGeneratorPrompt: prompts.webSearchRetrieverPrompt,
+ responsePrompt: prompts.webSearchResponsePrompt,
+ rerank: true,
+ rerankThreshold: 0.3,
+ searchWeb: true,
+ summarizer: true,
+ }),
+ academicSearch: new MetaSearchAgent({
+ activeEngines: ['arxiv', 'google scholar', 'pubmed'],
+ queryGeneratorPrompt: prompts.academicSearchRetrieverPrompt,
+ responsePrompt: prompts.academicSearchResponsePrompt,
+ rerank: true,
+ rerankThreshold: 0,
+ searchWeb: true,
+ summarizer: false,
+ }),
+ writingAssistant: new MetaSearchAgent({
+ activeEngines: [],
+ queryGeneratorPrompt: '',
+ responsePrompt: prompts.writingAssistantPrompt,
+ rerank: true,
+ rerankThreshold: 0,
+ searchWeb: false,
+ summarizer: false,
+ }),
+ wolframAlphaSearch: new MetaSearchAgent({
+ activeEngines: ['wolframalpha'],
+ queryGeneratorPrompt: prompts.wolframAlphaSearchRetrieverPrompt,
+ responsePrompt: prompts.wolframAlphaSearchResponsePrompt,
+ rerank: false,
+ rerankThreshold: 0,
+ searchWeb: true,
+ summarizer: false,
+ }),
+ youtubeSearch: new MetaSearchAgent({
+ activeEngines: ['youtube'],
+ queryGeneratorPrompt: prompts.youtubeSearchRetrieverPrompt,
+ responsePrompt: prompts.youtubeSearchResponsePrompt,
+ rerank: true,
+ rerankThreshold: 0.3,
+ searchWeb: true,
+ summarizer: false,
+ }),
+ redditSearch: new MetaSearchAgent({
+ activeEngines: ['reddit'],
+ queryGeneratorPrompt: prompts.redditSearchRetrieverPrompt,
+ responsePrompt: prompts.redditSearchResponsePrompt,
+ rerank: true,
+ rerankThreshold: 0.3,
+ searchWeb: true,
+ summarizer: false,
+ }),
+};
+
+const handleEmitterEvents = (
+ emitter: EventEmitter,
+ ws: WebSocket,
+ messageId: string,
+ chatId: string,
+) => {
+ let recievedMessage = '';
+ let sources = [];
+
+ emitter.on('data', (data) => {
+ const parsedData = JSON.parse(data);
+ if (parsedData.type === 'response') {
+ ws.send(
+ JSON.stringify({
+ type: 'message',
+ data: parsedData.data,
+ messageId: messageId,
+ }),
+ );
+ recievedMessage += parsedData.data;
+ } else if (parsedData.type === 'sources') {
+ ws.send(
+ JSON.stringify({
+ type: 'sources',
+ data: parsedData.data,
+ messageId: messageId,
+ }),
+ );
+ sources = parsedData.data;
+ }
+ });
+ emitter.on('end', () => {
+ ws.send(JSON.stringify({ type: 'messageEnd', messageId: messageId }));
+
+ db.insert(messagesSchema)
+ .values({
+ content: recievedMessage,
+ chatId: chatId,
+ messageId: messageId,
+ role: 'assistant',
+ metadata: JSON.stringify({
+ createdAt: new Date(),
+ ...(sources && sources.length > 0 && { sources }),
+ }),
+ })
+ .execute();
+ });
+ emitter.on('error', (data) => {
+ const parsedData = JSON.parse(data);
+ ws.send(
+ JSON.stringify({
+ type: 'error',
+ data: parsedData.data,
+ key: 'CHAIN_ERROR',
+ }),
+ );
+ });
+};
+
+export const handleMessage = async (
+ message: string,
+ ws: WebSocket,
+ llm: BaseChatModel,
+ embeddings: Embeddings,
+) => {
+ try {
+ const parsedWSMessage = JSON.parse(message) as WSMessage;
+ const parsedMessage = parsedWSMessage.message;
+
+ if (parsedWSMessage.files.length > 0) {
+ /* TODO: Implement uploads in other classes/single meta class system*/
+ parsedWSMessage.focusMode = 'webSearch';
+ }
+
+ const humanMessageId =
+ parsedMessage.messageId ?? crypto.randomBytes(7).toString('hex');
+ const aiMessageId = crypto.randomBytes(7).toString('hex');
+
+ if (!parsedMessage.content)
+ return ws.send(
+ JSON.stringify({
+ type: 'error',
+ data: 'Invalid message format',
+ key: 'INVALID_FORMAT',
+ }),
+ );
+
+ const history: BaseMessage[] = parsedWSMessage.history.map((msg) => {
+ if (msg[0] === 'human') {
+ return new HumanMessage({
+ content: msg[1],
+ });
+ } else {
+ return new AIMessage({
+ content: msg[1],
+ });
+ }
+ });
+
+ if (parsedWSMessage.type === 'message') {
+ const handler: MetaSearchAgentType =
+ searchHandlers[parsedWSMessage.focusMode];
+
+ if (handler) {
+ try {
+ const emitter = await handler.searchAndAnswer(
+ parsedMessage.content,
+ history,
+ llm,
+ embeddings,
+ parsedWSMessage.optimizationMode,
+ parsedWSMessage.files,
+ );
+
+ handleEmitterEvents(emitter, ws, aiMessageId, parsedMessage.chatId);
+
+ const chat = await db.query.chats.findFirst({
+ where: eq(chats.id, parsedMessage.chatId),
+ });
+
+ if (!chat) {
+ await db
+ .insert(chats)
+ .values({
+ id: parsedMessage.chatId,
+ title: parsedMessage.content,
+ createdAt: new Date().toString(),
+ focusMode: parsedWSMessage.focusMode,
+ files: parsedWSMessage.files.map(getFileDetails),
+ })
+ .execute();
+ }
+
+ const messageExists = await db.query.messages.findFirst({
+ where: eq(messagesSchema.messageId, humanMessageId),
+ });
+
+ if (!messageExists) {
+ await db
+ .insert(messagesSchema)
+ .values({
+ content: parsedMessage.content,
+ chatId: parsedMessage.chatId,
+ messageId: humanMessageId,
+ role: 'user',
+ metadata: JSON.stringify({
+ createdAt: new Date(),
+ }),
+ })
+ .execute();
+ } else {
+ await db
+ .delete(messagesSchema)
+ .where(
+ and(
+ gt(messagesSchema.id, messageExists.id),
+ eq(messagesSchema.chatId, parsedMessage.chatId),
+ ),
+ )
+ .execute();
+ }
+ } catch (err) {
+ console.log(err);
+ }
+ } else {
+ ws.send(
+ JSON.stringify({
+ type: 'error',
+ data: 'Invalid focus mode',
+ key: 'INVALID_FOCUS_MODE',
+ }),
+ );
+ }
+ }
+ } catch (err) {
+ ws.send(
+ JSON.stringify({
+ type: 'error',
+ data: 'Invalid message format',
+ key: 'INVALID_FORMAT',
+ }),
+ );
+ logger.error(`Failed to handle message: ${err}`);
+ }
+};
diff --git a/src/websocket/websocketServer.ts b/src/websocket/websocketServer.ts
new file mode 100644
index 0000000..3ab0b51
--- /dev/null
+++ b/src/websocket/websocketServer.ts
@@ -0,0 +1,16 @@
+import { WebSocketServer } from 'ws';
+import { handleConnection } from './connectionManager';
+import http from 'http';
+import { getPort } from '../config';
+import logger from '../utils/logger';
+
+export const initServer = (
+ server: http.Server,
+) => {
+ const port = getPort();
+ const wss = new WebSocketServer({ server });
+
+ wss.on('connection', handleConnection);
+
+ logger.info(`WebSocket server started on port ${port}`);
+};
diff --git a/tsconfig.json b/tsconfig.json
index 51d0dbc..48e6042 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,27 +1,18 @@
{
"compilerOptions": {
- "lib": ["dom", "dom.iterable", "esnext"],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "noEmit": true,
+ "lib": ["ESNext"],
+ "module": "Node16",
+ "moduleResolution": "Node16",
+ "target": "ESNext",
+ "outDir": "dist",
+ "sourceMap": false,
"esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "bundler",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
- "incremental": true,
- "plugins": [
- {
- "name": "next"
- }
- ],
- "paths": {
- "@/*": ["./src/*"]
- },
- "target": "ES2017"
+ "experimentalDecorators": true,
+ "emitDecoratorMetadata": true,
+ "allowSyntheticDefaultImports": true,
+ "skipLibCheck": true,
+ "skipDefaultLibCheck": true
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
- "exclude": ["node_modules"]
+ "include": ["src"],
+ "exclude": ["node_modules", "**/*.spec.ts"]
}
diff --git a/ui/.env.example b/ui/.env.example
new file mode 100644
index 0000000..57a3ed9
--- /dev/null
+++ b/ui/.env.example
@@ -0,0 +1,2 @@
+NEXT_PUBLIC_WS_URL=ws://localhost:3001
+NEXT_PUBLIC_API_URL=http://localhost:3001/api
\ No newline at end of file
diff --git a/.eslintrc.json b/ui/.eslintrc.json
similarity index 100%
rename from .eslintrc.json
rename to ui/.eslintrc.json
diff --git a/ui/.gitignore b/ui/.gitignore
new file mode 100644
index 0000000..5913b49
--- /dev/null
+++ b/ui/.gitignore
@@ -0,0 +1,34 @@
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/ui/.prettierrc.js b/ui/.prettierrc.js
new file mode 100644
index 0000000..8ca480f
--- /dev/null
+++ b/ui/.prettierrc.js
@@ -0,0 +1,11 @@
+/** @type {import("prettier").Config} */
+
+const config = {
+ printWidth: 80,
+ trailingComma: 'all',
+ endOfLine: 'auto',
+ singleQuote: true,
+ tabWidth: 2,
+};
+
+module.exports = config;
diff --git a/ui/app/c/[chatId]/page.tsx b/ui/app/c/[chatId]/page.tsx
new file mode 100644
index 0000000..dc3c92a
--- /dev/null
+++ b/ui/app/c/[chatId]/page.tsx
@@ -0,0 +1,7 @@
+import ChatWindow from '@/components/ChatWindow';
+
+const Page = ({ params }: { params: { chatId: string } }) => {
+ return ;
+};
+
+export default Page;
diff --git a/ui/app/discover/page.tsx b/ui/app/discover/page.tsx
new file mode 100644
index 0000000..eb94040
--- /dev/null
+++ b/ui/app/discover/page.tsx
@@ -0,0 +1,113 @@
+'use client';
+
+import { Search } from 'lucide-react';
+import { useEffect, useState } from 'react';
+import Link from 'next/link';
+import { toast } from 'sonner';
+
+interface Discover {
+ title: string;
+ content: string;
+ url: string;
+ thumbnail: string;
+}
+
+const Page = () => {
+ const [discover, setDiscover] = useState(null);
+ const [loading, setLoading] = useState(true);
+
+ useEffect(() => {
+ const fetchData = async () => {
+ try {
+ const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/discover`, {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ });
+
+ const data = await res.json();
+
+ if (!res.ok) {
+ throw new Error(data.message);
+ }
+
+ data.blogs = data.blogs.filter((blog: Discover) => blog.thumbnail);
+
+ setDiscover(data.blogs);
+ } catch (err: any) {
+ console.error('Error fetching data:', err.message);
+ toast.error('Error fetching data');
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ fetchData();
+ }, []);
+
+ return loading ? (
+
+ ) : (
+ <>
+
+
+
+
+ {discover &&
+ discover?.map((item, i) => (
+
+
+
+
+ {item.title.slice(0, 100)}...
+
+
+ {item.content.slice(0, 100)}...
+
+
+
+ ))}
+
+
+ >
+ );
+};
+
+export default Page;
diff --git a/src/app/favicon.ico b/ui/app/favicon.ico
similarity index 100%
rename from src/app/favicon.ico
rename to ui/app/favicon.ico
diff --git a/src/app/globals.css b/ui/app/globals.css
similarity index 63%
rename from src/app/globals.css
rename to ui/app/globals.css
index 6bdc1a8..f75daca 100644
--- a/src/app/globals.css
+++ b/ui/app/globals.css
@@ -11,11 +11,3 @@
display: none;
}
}
-
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
- select,
- textarea,
- input {
- font-size: 16px !important;
- }
-}
diff --git a/src/app/layout.tsx b/ui/app/layout.tsx
similarity index 100%
rename from src/app/layout.tsx
rename to ui/app/layout.tsx
diff --git a/src/app/library/layout.tsx b/ui/app/library/layout.tsx
similarity index 100%
rename from src/app/library/layout.tsx
rename to ui/app/library/layout.tsx
diff --git a/src/app/library/page.tsx b/ui/app/library/page.tsx
similarity index 98%
rename from src/app/library/page.tsx
rename to ui/app/library/page.tsx
index 9c40b2b..379596c 100644
--- a/src/app/library/page.tsx
+++ b/ui/app/library/page.tsx
@@ -21,7 +21,7 @@ const Page = () => {
const fetchChats = async () => {
setLoading(true);
- const res = await fetch(`/api/chats`, {
+ const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/chats`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
diff --git a/src/app/page.tsx b/ui/app/page.tsx
similarity index 74%
rename from src/app/page.tsx
rename to ui/app/page.tsx
index 25981b5..e18aca9 100644
--- a/src/app/page.tsx
+++ b/ui/app/page.tsx
@@ -1,5 +1,4 @@
import ChatWindow from '@/components/ChatWindow';
-import { ChatProvider } from '@/lib/hooks/useChat';
import { Metadata } from 'next';
import { Suspense } from 'react';
@@ -12,9 +11,7 @@ const Home = () => {
return (
-
-
-
+
);
diff --git a/src/app/settings/page.tsx b/ui/app/settings/page.tsx
similarity index 78%
rename from src/app/settings/page.tsx
rename to ui/app/settings/page.tsx
index 6fb8255..ea8a912 100644
--- a/src/app/settings/page.tsx
+++ b/ui/app/settings/page.tsx
@@ -7,7 +7,6 @@ import { Switch } from '@headlessui/react';
import ThemeSwitcher from '@/components/theme/Switcher';
import { ImagesIcon, VideoIcon } from 'lucide-react';
import Link from 'next/link';
-import { PROVIDER_METADATA } from '@/lib/providers';
interface SettingsType {
chatModelProviders: {
@@ -21,13 +20,21 @@ interface SettingsType {
anthropicApiKey: string;
geminiApiKey: string;
ollamaApiUrl: string;
- ollamaApiKey: string;
- lmStudioApiUrl: string;
- deepseekApiKey: string;
- aimlApiKey: string;
customOpenaiApiKey: string;
customOpenaiApiUrl: string;
customOpenaiModelName: string;
+ searchEngineBackends: {
+ search: string;
+ image: string;
+ video: string;
+ news: string;
+ };
+ searxngEndpoint: string;
+ googleApiKey: string;
+ googleCseId: string;
+ bingSubscriptionKey: string;
+ braveApiKey: string;
+ yacyEndpoint: string;
}
interface InputProps extends React.InputHTMLAttributes {
@@ -59,38 +66,6 @@ const Input = ({ className, isSaving, onSave, ...restProps }: InputProps) => {
);
};
-interface TextareaProps extends React.InputHTMLAttributes {
- isSaving?: boolean;
- onSave?: (value: string) => void;
-}
-
-const Textarea = ({
- className,
- isSaving,
- onSave,
- ...restProps
-}: TextareaProps) => {
- return (
-
- );
-};
-
const Select = ({
className,
options,
@@ -145,18 +120,21 @@ const Page = () => {
const [selectedEmbeddingModel, setSelectedEmbeddingModel] = useState<
string | null
>(null);
- const [isLoading, setIsLoading] = useState(true);
+ const [isLoading, setIsLoading] = useState(false);
const [automaticImageSearch, setAutomaticImageSearch] = useState(false);
const [automaticVideoSearch, setAutomaticVideoSearch] = useState(false);
- const [systemInstructions, setSystemInstructions] = useState('');
- const [measureUnit, setMeasureUnit] = useState<'Imperial' | 'Metric'>(
- 'Metric',
- );
const [savingStates, setSavingStates] = useState>({});
+ const [searchEngineBackends, setSearchEngineBackends] = useState({
+ search: '',
+ image: '',
+ video: '',
+ news: '',
+ });
useEffect(() => {
const fetchConfig = async () => {
- const res = await fetch(`/api/config`, {
+ setIsLoading(true);
+ const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/config`, {
headers: {
'Content-Type': 'application/json',
},
@@ -165,6 +143,16 @@ const Page = () => {
const data = (await res.json()) as SettingsType;
setConfig(data);
+ // Set search engine backends if they exist in the response
+ if (data.searchEngineBackends) {
+ setSearchEngineBackends({
+ search: data.searchEngineBackends.search || '',
+ image: data.searchEngineBackends.image || '',
+ video: data.searchEngineBackends.video || '',
+ news: data.searchEngineBackends.news || '',
+ });
+ }
+
const chatModelProvidersKeys = Object.keys(data.chatModelProviders || {});
const embeddingModelProvidersKeys = Object.keys(
data.embeddingModelProviders || {},
@@ -212,12 +200,6 @@ const Page = () => {
localStorage.getItem('autoVideoSearch') === 'true',
);
- setSystemInstructions(localStorage.getItem('systemInstructions')!);
-
- setMeasureUnit(
- localStorage.getItem('measureUnit')! as 'Imperial' | 'Metric',
- );
-
setIsLoading(false);
};
@@ -233,13 +215,16 @@ const Page = () => {
[key]: value,
} as SettingsType;
- const response = await fetch(`/api/config`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
+ const response = await fetch(
+ `${process.env.NEXT_PUBLIC_API_URL}/config`,
+ {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify(updatedConfig),
},
- body: JSON.stringify(updatedConfig),
- });
+ );
if (!response.ok) {
throw new Error('Failed to update config');
@@ -251,7 +236,7 @@ const Page = () => {
key.toLowerCase().includes('api') ||
key.toLowerCase().includes('url')
) {
- const res = await fetch(`/api/config`, {
+ const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/config`, {
headers: {
'Content-Type': 'application/json',
},
@@ -374,10 +359,8 @@ const Page = () => {
localStorage.setItem('embeddingModelProvider', value);
} else if (key === 'embeddingModel') {
localStorage.setItem('embeddingModel', value);
- } else if (key === 'systemInstructions') {
- localStorage.setItem('systemInstructions', value);
- } else if (key === 'measureUnit') {
- localStorage.setItem('measureUnit', value.toString());
+ } else if (key === 'searchEngineBackends') {
+ localStorage.setItem('searchEngineBackends', value);
}
} catch (err) {
console.error('Failed to save:', err);
@@ -426,35 +409,13 @@ const Page = () => {
) : (
config && (
-
+
-
-
- Measurement Units
-
-
{
- setMeasureUnit(e.target.value as 'Imperial' | 'Metric');
- saveConfig('measureUnit', e.target.value);
- }}
- options={[
- {
- label: 'Metric',
- value: 'Metric',
- },
- {
- label: 'Imperial',
- value: 'Imperial',
- },
- ]}
- />
-
@@ -545,19 +506,6 @@ const Page = () => {
-
-
-
-
-
{config.chatModelProviders && (
@@ -582,9 +530,8 @@ const Page = () => {
(provider) => ({
value: provider,
label:
- (PROVIDER_METADATA as any)[provider]?.displayName ||
provider.charAt(0).toUpperCase() +
- provider.slice(1),
+ provider.slice(1),
}),
)}
/>
@@ -725,9 +672,8 @@ const Page = () => {
(provider) => ({
value: provider,
label:
- (PROVIDER_METADATA as any)[provider]?.displayName ||
provider.charAt(0).toUpperCase() +
- provider.slice(1),
+ provider.slice(1),
}),
)}
/>
@@ -819,25 +765,6 @@ const Page = () => {
/>
-
-
- Ollama API Key (Can be left blank)
-
-
{
- setConfig((prev) => ({
- ...prev!,
- ollamaApiKey: e.target.value,
- }));
- }}
- onSave={(value) => saveConfig('ollamaApiKey', value)}
- />
-
-
GROQ API Key
@@ -894,61 +821,232 @@ const Page = () => {
onSave={(value) => saveConfig('geminiApiKey', value)}
/>
+
+
+
+
- Deepseek API Key
+ Default Search Engine
-
{
- setConfig((prev) => ({
- ...prev!,
- deepseekApiKey: e.target.value,
+ const value = e.target.value;
+ setSearchEngineBackends((prev) => ({
+ ...prev,
+ search: value,
}));
+ saveConfig('searchEngineBackends', {
+ ...searchEngineBackends,
+ search: value,
+ });
}}
- onSave={(value) => saveConfig('deepseekApiKey', value)}
+ options={[
+ { value: 'searxng', label: 'SearXNG' },
+ { value: 'google', label: 'Google' },
+ { value: 'bing', label: 'Bing' },
+ { value: 'brave', label: 'Brave' },
+ { value: 'yacy', label: 'YaCy' },
+ ]}
/>
- AI/ML API Key
+ Image Search Engine
-
{
- setConfig((prev) => ({
- ...prev!,
- aimlApiKey: e.target.value,
+ const value = e.target.value;
+ setSearchEngineBackends((prev) => ({
+ ...prev,
+ image: value,
}));
+ saveConfig('searchEngineBackends', {
+ ...searchEngineBackends,
+ image: value,
+ });
}}
- onSave={(value) => saveConfig('aimlApiKey', value)}
+ options={[
+ { value: '', label: 'Use Default Search Engine' },
+ { value: 'searxng', label: 'SearXNG' },
+ { value: 'google', label: 'Google' },
+ { value: 'bing', label: 'Bing' },
+ { value: 'brave', label: 'Brave' },
+ ]}
/>
- LM Studio API URL
+ Video Search Engine
+
+
{
+ const value = e.target.value;
+ setSearchEngineBackends((prev) => ({
+ ...prev,
+ video: value,
+ }));
+ saveConfig('searchEngineBackends', {
+ ...searchEngineBackends,
+ video: value,
+ });
+ }}
+ options={[
+ { value: '', label: 'Use Default Search Engine' },
+ { value: 'searxng', label: 'SearXNG' },
+ { value: 'google', label: 'Google' },
+ { value: 'bing', label: 'Bing' },
+ { value: 'brave', label: 'Brave' },
+ ]}
+ />
+
+
+
+
+ News Search Engine
+
+
{
+ const value = e.target.value;
+ setSearchEngineBackends((prev) => ({
+ ...prev,
+ news: value,
+ }));
+ saveConfig('searchEngineBackends', {
+ ...searchEngineBackends,
+ news: value,
+ });
+ }}
+ options={[
+ { value: '', label: 'Use Default Search Engine' },
+ { value: 'searxng', label: 'SearXNG' },
+ { value: 'google', label: 'Google' },
+ { value: 'bing', label: 'Bing' },
+ { value: 'brave', label: 'Brave' },
+ ]}
+ />
+
+
+
+
+
+ SearXNG Endpoint
+
+
{
+ setConfig((prev) => ({
+ ...prev!,
+ searxngEndpoint: e.target.value,
+ }));
+ }}
+ onSave={(value) => saveConfig('searxngEndpoint', value)}
+ />
+
+
+
+
+
+ Google API Key
{
setConfig((prev) => ({
...prev!,
- lmStudioApiUrl: e.target.value,
+ googleApiKey: e.target.value,
}));
}}
- onSave={(value) => saveConfig('lmStudioApiUrl', value)}
+ onSave={(value) => saveConfig('googleApiKey', value)}
+ />
+
+
+
+
+ Google CSE ID
+
+
{
+ setConfig((prev) => ({
+ ...prev!,
+ googleCseId: e.target.value,
+ }));
+ }}
+ onSave={(value) => saveConfig('googleCseId', value)}
+ />
+
+
+
+
+ Bing Subscription Key
+
+
{
+ setConfig((prev) => ({
+ ...prev!,
+ bingSubscriptionKey: e.target.value,
+ }));
+ }}
+ onSave={(value) => saveConfig('bingSubscriptionKey', value)}
+ />
+
+
+
+
+ Brave API Key
+
+
{
+ setConfig((prev) => ({
+ ...prev!,
+ braveApiKey: e.target.value,
+ }));
+ }}
+ onSave={(value) => saveConfig('braveApiKey', value)}
+ />
+
+
+
+
+ YaCy Endpoint
+
+
{
+ setConfig((prev) => ({
+ ...prev!,
+ yacyEndpoint: e.target.value,
+ }));
+ }}
+ onSave={(value) => saveConfig('yacyEndpoint', value)}
/>
diff --git a/src/components/Chat.tsx b/ui/components/Chat.tsx
similarity index 69%
rename from src/components/Chat.tsx
rename to ui/components/Chat.tsx
index a5d8cf9..81aa32f 100644
--- a/src/components/Chat.tsx
+++ b/ui/components/Chat.tsx
@@ -5,11 +5,28 @@ import MessageInput from './MessageInput';
import { File, Message } from './ChatWindow';
import MessageBox from './MessageBox';
import MessageBoxLoading from './MessageBoxLoading';
-import { useChat } from '@/lib/hooks/useChat';
-
-const Chat = () => {
- const { messages, loading, messageAppeared } = useChat();
+const Chat = ({
+ loading,
+ messages,
+ sendMessage,
+ messageAppeared,
+ rewrite,
+ fileIds,
+ setFileIds,
+ files,
+ setFiles,
+}: {
+ messages: Message[];
+ sendMessage: (message: string) => void;
+ loading: boolean;
+ messageAppeared: boolean;
+ rewrite: (messageId: string) => void;
+ fileIds: string[];
+ setFileIds: (fileIds: string[]) => void;
+ files: File[];
+ setFiles: (files: File[]) => void;
+}) => {
const [dividerWidth, setDividerWidth] = useState(0);
const dividerRef = useRef(null);
const messageEnd = useRef(null);
@@ -31,17 +48,11 @@ const Chat = () => {
});
useEffect(() => {
- const scroll = () => {
- messageEnd.current?.scrollIntoView({ behavior: 'smooth' });
- };
+ messageEnd.current?.scrollIntoView({ behavior: 'smooth' });
if (messages.length === 1) {
document.title = `${messages[0].content.substring(0, 30)} - Perplexica`;
}
-
- if (messages[messages.length - 1]?.role == 'user') {
- scroll();
- }
}, [messages]);
return (
@@ -55,8 +66,12 @@ const Chat = () => {
key={i}
message={msg}
messageIndex={i}
+ history={messages}
+ loading={loading}
dividerRef={isLast ? dividerRef : undefined}
isLast={isLast}
+ rewrite={rewrite}
+ sendMessage={sendMessage}
/>
{!isLast && msg.role === 'assistant' && (
@@ -71,7 +86,14 @@ const Chat = () => {
className="bottom-24 lg:bottom-10 fixed z-40"
style={{ width: dividerWidth }}
>
-
+
)}
diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx
new file mode 100644
index 0000000..1940f42
--- /dev/null
+++ b/ui/components/ChatWindow.tsx
@@ -0,0 +1,697 @@
+'use client';
+
+import { useEffect, useRef, useState } from 'react';
+import { Document } from '@langchain/core/documents';
+import Navbar from './Navbar';
+import Chat from './Chat';
+import EmptyChat from './EmptyChat';
+import crypto from 'crypto';
+import { toast } from 'sonner';
+import { useSearchParams } from 'next/navigation';
+import { getSuggestions } from '@/lib/actions';
+import { Settings } from 'lucide-react';
+import Link from 'next/link';
+import NextError from 'next/error';
+
+export type Message = {
+ messageId: string;
+ chatId: string;
+ createdAt: Date;
+ content: string;
+ role: 'user' | 'assistant';
+ suggestions?: string[];
+ sources?: Document[];
+};
+
+export interface File {
+ fileName: string;
+ fileExtension: string;
+ fileId: string;
+}
+
+const useSocket = (
+ url: string,
+ setIsWSReady: (ready: boolean) => void,
+ setError: (error: boolean) => void,
+) => {
+ const wsRef = useRef(null);
+ const reconnectTimeoutRef = useRef();
+ const retryCountRef = useRef(0);
+ const isCleaningUpRef = useRef(false);
+ const MAX_RETRIES = 3;
+ const INITIAL_BACKOFF = 1000; // 1 second
+ const isConnectionErrorRef = useRef(false);
+
+ const getBackoffDelay = (retryCount: number) => {
+ return Math.min(INITIAL_BACKOFF * Math.pow(2, retryCount), 10000); // Cap at 10 seconds
+ };
+
+ useEffect(() => {
+ const connectWs = async () => {
+ if (wsRef.current?.readyState === WebSocket.OPEN) {
+ wsRef.current.close();
+ }
+
+ try {
+ let chatModel = localStorage.getItem('chatModel');
+ let chatModelProvider = localStorage.getItem('chatModelProvider');
+ let embeddingModel = localStorage.getItem('embeddingModel');
+ let embeddingModelProvider = localStorage.getItem(
+ 'embeddingModelProvider',
+ );
+
+ const autoImageSearch = localStorage.getItem('autoImageSearch');
+ const autoVideoSearch = localStorage.getItem('autoVideoSearch');
+
+ if (!autoImageSearch) {
+ localStorage.setItem('autoImageSearch', 'true');
+ }
+
+ if (!autoVideoSearch) {
+ localStorage.setItem('autoVideoSearch', 'false');
+ }
+
+ const providers = await fetch(
+ `${process.env.NEXT_PUBLIC_API_URL}/models`,
+ {
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ },
+ ).then(async (res) => {
+ if (!res.ok)
+ throw new Error(
+ `Failed to fetch models: ${res.status} ${res.statusText}`,
+ );
+ return res.json();
+ });
+
+ if (
+ !chatModel ||
+ !chatModelProvider ||
+ !embeddingModel ||
+ !embeddingModelProvider
+ ) {
+ if (!chatModel || !chatModelProvider) {
+ const chatModelProviders = providers.chatModelProviders;
+
+ chatModelProvider =
+ chatModelProvider || Object.keys(chatModelProviders)[0];
+
+ chatModel = Object.keys(chatModelProviders[chatModelProvider])[0];
+
+ if (
+ !chatModelProviders ||
+ Object.keys(chatModelProviders).length === 0
+ )
+ return toast.error('No chat models available');
+ }
+
+ if (!embeddingModel || !embeddingModelProvider) {
+ const embeddingModelProviders = providers.embeddingModelProviders;
+
+ if (
+ !embeddingModelProviders ||
+ Object.keys(embeddingModelProviders).length === 0
+ )
+ return toast.error('No embedding models available');
+
+ embeddingModelProvider = Object.keys(embeddingModelProviders)[0];
+ embeddingModel = Object.keys(
+ embeddingModelProviders[embeddingModelProvider],
+ )[0];
+ }
+
+ localStorage.setItem('chatModel', chatModel!);
+ localStorage.setItem('chatModelProvider', chatModelProvider);
+ localStorage.setItem('embeddingModel', embeddingModel!);
+ localStorage.setItem(
+ 'embeddingModelProvider',
+ embeddingModelProvider,
+ );
+ } else {
+ const chatModelProviders = providers.chatModelProviders;
+ const embeddingModelProviders = providers.embeddingModelProviders;
+
+ if (
+ Object.keys(chatModelProviders).length > 0 &&
+ !chatModelProviders[chatModelProvider]
+ ) {
+ const chatModelProvidersKeys = Object.keys(chatModelProviders);
+ chatModelProvider =
+ chatModelProvidersKeys.find(
+ (key) => Object.keys(chatModelProviders[key]).length > 0,
+ ) || chatModelProvidersKeys[0];
+
+ localStorage.setItem('chatModelProvider', chatModelProvider);
+ }
+
+ if (
+ chatModelProvider &&
+ !chatModelProviders[chatModelProvider][chatModel]
+ ) {
+ chatModel = Object.keys(
+ chatModelProviders[
+ Object.keys(chatModelProviders[chatModelProvider]).length > 0
+ ? chatModelProvider
+ : Object.keys(chatModelProviders)[0]
+ ],
+ )[0];
+ localStorage.setItem('chatModel', chatModel);
+ }
+
+ if (
+ Object.keys(embeddingModelProviders).length > 0 &&
+ !embeddingModelProviders[embeddingModelProvider]
+ ) {
+ embeddingModelProvider = Object.keys(embeddingModelProviders)[0];
+ localStorage.setItem(
+ 'embeddingModelProvider',
+ embeddingModelProvider,
+ );
+ }
+
+ if (
+ embeddingModelProvider &&
+ !embeddingModelProviders[embeddingModelProvider][embeddingModel]
+ ) {
+ embeddingModel = Object.keys(
+ embeddingModelProviders[embeddingModelProvider],
+ )[0];
+ localStorage.setItem('embeddingModel', embeddingModel);
+ }
+ }
+
+ const wsURL = new URL(url);
+ const searchParams = new URLSearchParams({});
+
+ searchParams.append('chatModel', chatModel!);
+ searchParams.append('chatModelProvider', chatModelProvider);
+
+ if (chatModelProvider === 'custom_openai') {
+ searchParams.append(
+ 'openAIApiKey',
+ localStorage.getItem('openAIApiKey')!,
+ );
+ searchParams.append(
+ 'openAIBaseURL',
+ localStorage.getItem('openAIBaseURL')!,
+ );
+ }
+
+ searchParams.append('embeddingModel', embeddingModel!);
+ searchParams.append('embeddingModelProvider', embeddingModelProvider);
+
+ wsURL.search = searchParams.toString();
+
+ const ws = new WebSocket(wsURL.toString());
+ wsRef.current = ws;
+
+ const timeoutId = setTimeout(() => {
+ if (ws.readyState !== 1) {
+ toast.error(
+ 'Failed to connect to the server. Please try again later.',
+ );
+ }
+ }, 10000);
+
+ ws.addEventListener('message', (e) => {
+ const data = JSON.parse(e.data);
+ if (data.type === 'signal' && data.data === 'open') {
+ const interval = setInterval(() => {
+ if (ws.readyState === 1) {
+ setIsWSReady(true);
+ setError(false);
+ if (retryCountRef.current > 0) {
+ toast.success('Connection restored.');
+ }
+ retryCountRef.current = 0;
+ clearInterval(interval);
+ }
+ }, 5);
+ clearTimeout(timeoutId);
+ console.debug(new Date(), 'ws:connected');
+ }
+ if (data.type === 'error') {
+ isConnectionErrorRef.current = true;
+ setError(true);
+ toast.error(data.data);
+ }
+ });
+
+ ws.onerror = () => {
+ clearTimeout(timeoutId);
+ setIsWSReady(false);
+ toast.error('WebSocket connection error.');
+ };
+
+ ws.onclose = () => {
+ clearTimeout(timeoutId);
+ setIsWSReady(false);
+ console.debug(new Date(), 'ws:disconnected');
+ if (!isCleaningUpRef.current && !isConnectionErrorRef.current) {
+ toast.error('Connection lost. Attempting to reconnect...');
+ attemptReconnect();
+ }
+ };
+ } catch (error) {
+ console.debug(new Date(), 'ws:error', error);
+ setIsWSReady(false);
+ attemptReconnect();
+ }
+ };
+
+ const attemptReconnect = () => {
+ retryCountRef.current += 1;
+
+ if (retryCountRef.current > MAX_RETRIES) {
+ console.debug(new Date(), 'ws:max_retries');
+ setError(true);
+ toast.error(
+ 'Unable to connect to server after multiple attempts. Please refresh the page to try again.',
+ );
+ return;
+ }
+
+ const backoffDelay = getBackoffDelay(retryCountRef.current);
+ console.debug(
+ new Date(),
+ `ws:retry attempt=${retryCountRef.current}/${MAX_RETRIES} delay=${backoffDelay}ms`,
+ );
+
+ if (reconnectTimeoutRef.current) {
+ clearTimeout(reconnectTimeoutRef.current);
+ }
+
+ reconnectTimeoutRef.current = setTimeout(() => {
+ connectWs();
+ }, backoffDelay);
+ };
+
+ connectWs();
+
+ return () => {
+ if (reconnectTimeoutRef.current) {
+ clearTimeout(reconnectTimeoutRef.current);
+ }
+ if (wsRef.current?.readyState === WebSocket.OPEN) {
+ wsRef.current.close();
+ isCleaningUpRef.current = true;
+ console.debug(new Date(), 'ws:cleanup');
+ }
+ };
+ }, [url, setIsWSReady, setError]);
+
+ return wsRef.current;
+};
+
+const loadMessages = async (
+ chatId: string,
+ setMessages: (messages: Message[]) => void,
+ setIsMessagesLoaded: (loaded: boolean) => void,
+ setChatHistory: (history: [string, string][]) => void,
+ setFocusMode: (mode: string) => void,
+ setNotFound: (notFound: boolean) => void,
+ setFiles: (files: File[]) => void,
+ setFileIds: (fileIds: string[]) => void,
+) => {
+ const res = await fetch(
+ `${process.env.NEXT_PUBLIC_API_URL}/chats/${chatId}`,
+ {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ },
+ );
+
+ if (res.status === 404) {
+ setNotFound(true);
+ setIsMessagesLoaded(true);
+ return;
+ }
+
+ const data = await res.json();
+
+ const messages = data.messages.map((msg: any) => {
+ return {
+ ...msg,
+ ...JSON.parse(msg.metadata),
+ };
+ }) as Message[];
+
+ setMessages(messages);
+
+ const history = messages.map((msg) => {
+ return [msg.role, msg.content];
+ }) as [string, string][];
+
+ console.debug(new Date(), 'app:messages_loaded');
+
+ document.title = messages[0].content;
+
+ const files = data.chat.files.map((file: any) => {
+ return {
+ fileName: file.name,
+ fileExtension: file.name.split('.').pop(),
+ fileId: file.fileId,
+ };
+ });
+
+ setFiles(files);
+ setFileIds(files.map((file: File) => file.fileId));
+
+ setChatHistory(history);
+ setFocusMode(data.chat.focusMode);
+ setIsMessagesLoaded(true);
+};
+
+const ChatWindow = ({ id }: { id?: string }) => {
+ const searchParams = useSearchParams();
+ const initialMessage = searchParams.get('q');
+
+ const [chatId, setChatId] = useState(id);
+ const [newChatCreated, setNewChatCreated] = useState(false);
+
+ const [hasError, setHasError] = useState(false);
+ const [isReady, setIsReady] = useState(false);
+
+ const [isWSReady, setIsWSReady] = useState(false);
+ const ws = useSocket(
+ process.env.NEXT_PUBLIC_WS_URL!,
+ setIsWSReady,
+ setHasError,
+ );
+
+ const [loading, setLoading] = useState(false);
+ const [messageAppeared, setMessageAppeared] = useState(false);
+
+ const [chatHistory, setChatHistory] = useState<[string, string][]>([]);
+ const [messages, setMessages] = useState([]);
+
+ const [files, setFiles] = useState([]);
+ const [fileIds, setFileIds] = useState([]);
+
+ const [focusMode, setFocusMode] = useState('webSearch');
+ const [optimizationMode, setOptimizationMode] = useState('speed');
+
+ const [isMessagesLoaded, setIsMessagesLoaded] = useState(false);
+
+ const [notFound, setNotFound] = useState(false);
+
+ const [isSettingsOpen, setIsSettingsOpen] = useState(false);
+
+ useEffect(() => {
+ if (
+ chatId &&
+ !newChatCreated &&
+ !isMessagesLoaded &&
+ messages.length === 0
+ ) {
+ loadMessages(
+ chatId,
+ setMessages,
+ setIsMessagesLoaded,
+ setChatHistory,
+ setFocusMode,
+ setNotFound,
+ setFiles,
+ setFileIds,
+ );
+ } else if (!chatId) {
+ setNewChatCreated(true);
+ setIsMessagesLoaded(true);
+ setChatId(crypto.randomBytes(20).toString('hex'));
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ useEffect(() => {
+ return () => {
+ if (ws?.readyState === 1) {
+ ws.close();
+ console.debug(new Date(), 'ws:cleanup');
+ }
+ };
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ const messagesRef = useRef([]);
+
+ useEffect(() => {
+ messagesRef.current = messages;
+ }, [messages]);
+
+ useEffect(() => {
+ if (isMessagesLoaded && isWSReady) {
+ setIsReady(true);
+ console.debug(new Date(), 'app:ready');
+ } else {
+ setIsReady(false);
+ }
+ }, [isMessagesLoaded, isWSReady]);
+
+ const sendMessage = async (message: string, messageId?: string) => {
+ if (loading) return;
+ if (!ws || ws.readyState !== WebSocket.OPEN) {
+ toast.error('Cannot send message while disconnected');
+ return;
+ }
+
+ setLoading(true);
+ setMessageAppeared(false);
+
+ let sources: Document[] | undefined = undefined;
+ let recievedMessage = '';
+ let added = false;
+
+ messageId = messageId ?? crypto.randomBytes(7).toString('hex');
+
+ ws.send(
+ JSON.stringify({
+ type: 'message',
+ message: {
+ messageId: messageId,
+ chatId: chatId!,
+ content: message,
+ },
+ files: fileIds,
+ focusMode: focusMode,
+ optimizationMode: optimizationMode,
+ history: [...chatHistory, ['human', message]],
+ }),
+ );
+
+ setMessages((prevMessages) => [
+ ...prevMessages,
+ {
+ content: message,
+ messageId: messageId,
+ chatId: chatId!,
+ role: 'user',
+ createdAt: new Date(),
+ },
+ ]);
+
+ const messageHandler = async (e: MessageEvent) => {
+ const data = JSON.parse(e.data);
+
+ if (data.type === 'error') {
+ toast.error(data.data);
+ setLoading(false);
+ return;
+ }
+
+ if (data.type === 'sources') {
+ sources = data.data;
+ if (!added) {
+ setMessages((prevMessages) => [
+ ...prevMessages,
+ {
+ content: '',
+ messageId: data.messageId,
+ chatId: chatId!,
+ role: 'assistant',
+ sources: sources,
+ createdAt: new Date(),
+ },
+ ]);
+ added = true;
+ }
+ setMessageAppeared(true);
+ }
+
+ if (data.type === 'message') {
+ if (!added) {
+ setMessages((prevMessages) => [
+ ...prevMessages,
+ {
+ content: data.data,
+ messageId: data.messageId,
+ chatId: chatId!,
+ role: 'assistant',
+ sources: sources,
+ createdAt: new Date(),
+ },
+ ]);
+ added = true;
+ }
+
+ setMessages((prev) =>
+ prev.map((message) => {
+ if (message.messageId === data.messageId) {
+ return { ...message, content: message.content + data.data };
+ }
+
+ return message;
+ }),
+ );
+
+ recievedMessage += data.data;
+ setMessageAppeared(true);
+ }
+
+ if (data.type === 'messageEnd') {
+ setChatHistory((prevHistory) => [
+ ...prevHistory,
+ ['human', message],
+ ['assistant', recievedMessage],
+ ]);
+
+ ws?.removeEventListener('message', messageHandler);
+ setLoading(false);
+
+ const lastMsg = messagesRef.current[messagesRef.current.length - 1];
+
+ if (
+ lastMsg.role === 'assistant' &&
+ lastMsg.sources &&
+ lastMsg.sources.length > 0 &&
+ !lastMsg.suggestions
+ ) {
+ const suggestions = await getSuggestions(messagesRef.current);
+ setMessages((prev) =>
+ prev.map((msg) => {
+ if (msg.messageId === lastMsg.messageId) {
+ return { ...msg, suggestions: suggestions };
+ }
+ return msg;
+ }),
+ );
+ }
+
+ const autoImageSearch = localStorage.getItem('autoImageSearch');
+ const autoVideoSearch = localStorage.getItem('autoVideoSearch');
+
+ if (autoImageSearch === 'true') {
+ document.getElementById('search-images')?.click();
+ }
+
+ if (autoVideoSearch === 'true') {
+ document.getElementById('search-videos')?.click();
+ }
+ }
+ };
+
+ ws?.addEventListener('message', messageHandler);
+ };
+
+ const rewrite = (messageId: string) => {
+ const index = messages.findIndex((msg) => msg.messageId === messageId);
+
+ if (index === -1) return;
+
+ const message = messages[index - 1];
+
+ setMessages((prev) => {
+ return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)];
+ });
+ setChatHistory((prev) => {
+ return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)];
+ });
+
+ sendMessage(message.content, message.messageId);
+ };
+
+ useEffect(() => {
+ if (isReady && initialMessage && ws?.readyState === 1) {
+ sendMessage(initialMessage);
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [ws?.readyState, isReady, initialMessage, isWSReady]);
+
+ if (hasError) {
+ return (
+
+
+
+
+
+
+
+
+ Failed to connect to the server. Please try again later.
+
+
+
+ );
+ }
+
+ return isReady ? (
+ notFound ? (
+
+ ) : (
+
+ {messages.length > 0 ? (
+ <>
+
+
+ >
+ ) : (
+
+ )}
+
+ )
+ ) : (
+
+ );
+};
+
+export default ChatWindow;
diff --git a/src/components/DeleteChat.tsx b/ui/components/DeleteChat.tsx
similarity index 94%
rename from src/components/DeleteChat.tsx
rename to ui/components/DeleteChat.tsx
index 3acc9fc..2857fc8 100644
--- a/src/components/DeleteChat.tsx
+++ b/ui/components/DeleteChat.tsx
@@ -29,12 +29,15 @@ const DeleteChat = ({
const handleDelete = async () => {
setLoading(true);
try {
- const res = await fetch(`/api/chats/${chatId}`, {
- method: 'DELETE',
- headers: {
- 'Content-Type': 'application/json',
+ const res = await fetch(
+ `${process.env.NEXT_PUBLIC_API_URL}/chats/${chatId}`,
+ {
+ method: 'DELETE',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
},
- });
+ );
if (res.status != 200) {
throw new Error('Failed to delete chat');
diff --git a/ui/components/EmptyChat.tsx b/ui/components/EmptyChat.tsx
new file mode 100644
index 0000000..838849f
--- /dev/null
+++ b/ui/components/EmptyChat.tsx
@@ -0,0 +1,57 @@
+import { Settings } from 'lucide-react';
+import EmptyChatMessageInput from './EmptyChatMessageInput';
+import { useState } from 'react';
+import { File } from './ChatWindow';
+import Link from 'next/link';
+
+const EmptyChat = ({
+ sendMessage,
+ focusMode,
+ setFocusMode,
+ optimizationMode,
+ setOptimizationMode,
+ fileIds,
+ setFileIds,
+ files,
+ setFiles,
+}: {
+ sendMessage: (message: string) => void;
+ focusMode: string;
+ setFocusMode: (mode: string) => void;
+ optimizationMode: string;
+ setOptimizationMode: (mode: string) => void;
+ fileIds: string[];
+ setFileIds: (fileIds: string[]) => void;
+ files: File[];
+ setFiles: (files: File[]) => void;
+}) => {
+ const [isSettingsOpen, setIsSettingsOpen] = useState(false);
+
+ return (
+
+
+
+
+
+
+
+
+ Research begins here.
+
+
+
+
+ );
+};
+
+export default EmptyChat;
diff --git a/src/components/EmptyChatMessageInput.tsx b/ui/components/EmptyChatMessageInput.tsx
similarity index 72%
rename from src/components/EmptyChatMessageInput.tsx
rename to ui/components/EmptyChatMessageInput.tsx
index 3c5ff6b..43d1e28 100644
--- a/src/components/EmptyChatMessageInput.tsx
+++ b/ui/components/EmptyChatMessageInput.tsx
@@ -1,15 +1,34 @@
import { ArrowRight } from 'lucide-react';
import { useEffect, useRef, useState } from 'react';
import TextareaAutosize from 'react-textarea-autosize';
+import CopilotToggle from './MessageInputActions/Copilot';
import Focus from './MessageInputActions/Focus';
import Optimization from './MessageInputActions/Optimization';
import Attach from './MessageInputActions/Attach';
-import { useChat } from '@/lib/hooks/useChat';
+import { File } from './ChatWindow';
-const EmptyChatMessageInput = () => {
- const { sendMessage } = useChat();
-
- /* const [copilotEnabled, setCopilotEnabled] = useState(false); */
+const EmptyChatMessageInput = ({
+ sendMessage,
+ focusMode,
+ setFocusMode,
+ optimizationMode,
+ setOptimizationMode,
+ fileIds,
+ setFileIds,
+ files,
+ setFiles,
+}: {
+ sendMessage: (message: string) => void;
+ focusMode: string;
+ setFocusMode: (mode: string) => void;
+ optimizationMode: string;
+ setOptimizationMode: (mode: string) => void;
+ fileIds: string[];
+ setFileIds: (fileIds: string[]) => void;
+ files: File[];
+ setFiles: (files: File[]) => void;
+}) => {
+ const [copilotEnabled, setCopilotEnabled] = useState(false);
const [message, setMessage] = useState('');
const inputRef = useRef(null);
@@ -65,11 +84,20 @@ const EmptyChatMessageInput = () => {
/>
-
+
{
- return (
-
- );
-};
const MessageBox = ({
message,
messageIndex,
+ history,
+ loading,
dividerRef,
isLast,
+ rewrite,
+ sendMessage,
}: {
message: Message;
messageIndex: number;
+ history: Message[];
+ loading: boolean;
dividerRef?: MutableRefObject;
isLast: boolean;
+ rewrite: (messageId: string) => void;
+ sendMessage: (message: string) => void;
}) => {
- const { loading, messages: history, sendMessage, rewrite } = useChat();
-
const [parsedMessage, setParsedMessage] = useState(message.content);
const [speechMessage, setSpeechMessage] = useState(message.content);
- const [thinkingEnded, setThinkingEnded] = useState(false);
useEffect(() => {
- const citationRegex = /\[([^\]]+)\]/g;
const regex = /\[(\d+)\]/g;
- let processedMessage = message.content;
-
- if (message.role === 'assistant' && message.content.includes('')) {
- const openThinkTag = processedMessage.match(//g)?.length || 0;
- const closeThinkTag = processedMessage.match(/<\/think>/g)?.length || 0;
-
- if (openThinkTag > closeThinkTag) {
- processedMessage += ' '; // The extra is to prevent the the think component from looking bad
- }
- }
-
- if (message.role === 'assistant' && message.content.includes(' ')) {
- setThinkingEnded(true);
- }
if (
message.role === 'assistant' &&
message?.sources &&
message.sources.length > 0
) {
- setParsedMessage(
- processedMessage.replace(
- citationRegex,
- (_, capturedContent: string) => {
- const numbers = capturedContent
- .split(',')
- .map((numStr) => numStr.trim());
-
- const linksHtml = numbers
- .map((numStr) => {
- const number = parseInt(numStr);
-
- if (isNaN(number) || number <= 0) {
- return `[${numStr}]`;
- }
-
- const source = message.sources?.[number - 1];
- const url = source?.metadata?.url;
-
- if (url) {
- return `${numStr} `;
- } else {
- return ``;
- }
- })
- .join('');
-
- return linksHtml;
- },
+ return setParsedMessage(
+ message.content.replace(
+ regex,
+ (_, number) =>
+ `${number} `,
),
);
- setSpeechMessage(message.content.replace(regex, ''));
- return;
- } else if (
- message.role === 'assistant' &&
- message?.sources &&
- message.sources.length === 0
- ) {
- setParsedMessage(processedMessage.replace(regex, ''));
- setSpeechMessage(message.content.replace(regex, ''));
- return;
}
setSpeechMessage(message.content.replace(regex, ''));
- setParsedMessage(processedMessage);
+ setParsedMessage(message.content);
}, [message.content, message.sources, message.role]);
const { speechStatus, start, stop } = useSpeech({ text: speechMessage });
- const markdownOverrides: MarkdownToJSX.Options = {
- overrides: {
- think: {
- component: ThinkTagProcessor,
- props: {
- thinkingEnded: thinkingEnded,
- },
- },
- },
- };
-
return (
{message.role === 'user' && (
@@ -180,13 +111,11 @@ const MessageBox = ({
Answer
-
{parsedMessage}
@@ -264,12 +193,10 @@ const MessageBox = ({
diff --git a/src/components/MessageBoxLoading.tsx b/ui/components/MessageBoxLoading.tsx
similarity index 100%
rename from src/components/MessageBoxLoading.tsx
rename to ui/components/MessageBoxLoading.tsx
diff --git a/src/components/MessageInput.tsx b/ui/components/MessageInput.tsx
similarity index 86%
rename from src/components/MessageInput.tsx
rename to ui/components/MessageInput.tsx
index 9949c64..b6b1d96 100644
--- a/src/components/MessageInput.tsx
+++ b/ui/components/MessageInput.tsx
@@ -6,11 +6,22 @@ import Attach from './MessageInputActions/Attach';
import CopilotToggle from './MessageInputActions/Copilot';
import { File } from './ChatWindow';
import AttachSmall from './MessageInputActions/AttachSmall';
-import { useChat } from '@/lib/hooks/useChat';
-
-const MessageInput = () => {
- const { loading, sendMessage } = useChat();
+const MessageInput = ({
+ sendMessage,
+ loading,
+ fileIds,
+ setFileIds,
+ files,
+ setFiles,
+}: {
+ sendMessage: (message: string) => void;
+ loading: boolean;
+ fileIds: string[];
+ setFileIds: (fileIds: string[]) => void;
+ files: File[];
+ setFiles: (files: File[]) => void;
+}) => {
const [copilotEnabled, setCopilotEnabled] = useState(false);
const [message, setMessage] = useState('');
const [textareaRows, setTextareaRows] = useState(1);
@@ -68,7 +79,14 @@ const MessageInput = () => {
mode === 'multi' ? 'flex-col rounded-lg' : 'flex-row rounded-full',
)}
>
- {mode === 'single' && }
+ {mode === 'single' && (
+
+ )}
{
)}
{mode === 'multi' && (
-
+
{
- const { files, setFiles, setFileIds, fileIds } = useChat();
+const Attach = ({
+ fileIds,
+ setFileIds,
+ showText,
+ files,
+ setFiles,
+}: {
+ fileIds: string[];
+ setFileIds: (fileIds: string[]) => void;
+ showText?: boolean;
+ files: FileType[];
+ setFiles: (files: FileType[]) => void;
+}) => {
const [loading, setLoading] = useState(false);
const fileInputRef = useRef();
@@ -32,7 +41,7 @@ const Attach = ({ showText }: { showText?: boolean }) => {
data.append('embedding_model_provider', embeddingModelProvider!);
data.append('embedding_model', embeddingModel!);
- const res = await fetch(`/api/uploads`, {
+ const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/uploads`, {
method: 'POST',
body: data,
});
diff --git a/src/components/MessageInputActions/AttachSmall.tsx b/ui/components/MessageInputActions/AttachSmall.tsx
similarity index 94%
rename from src/components/MessageInputActions/AttachSmall.tsx
rename to ui/components/MessageInputActions/AttachSmall.tsx
index 834b3f4..a0d4b45 100644
--- a/src/components/MessageInputActions/AttachSmall.tsx
+++ b/ui/components/MessageInputActions/AttachSmall.tsx
@@ -8,11 +8,18 @@ import {
import { CopyPlus, File, LoaderCircle, Plus, Trash } from 'lucide-react';
import { Fragment, useRef, useState } from 'react';
import { File as FileType } from '../ChatWindow';
-import { useChat } from '@/lib/hooks/useChat';
-
-const AttachSmall = () => {
- const { files, setFiles, setFileIds, fileIds } = useChat();
+const AttachSmall = ({
+ fileIds,
+ setFileIds,
+ files,
+ setFiles,
+}: {
+ fileIds: string[];
+ setFileIds: (fileIds: string[]) => void;
+ files: FileType[];
+ setFiles: (files: FileType[]) => void;
+}) => {
const [loading, setLoading] = useState(false);
const fileInputRef = useRef();
@@ -32,7 +39,7 @@ const AttachSmall = () => {
data.append('embedding_model_provider', embeddingModelProvider!);
data.append('embedding_model', embeddingModel!);
- const res = await fetch(`/api/uploads`, {
+ const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/uploads`, {
method: 'POST',
body: data,
});
diff --git a/src/components/MessageInputActions/Copilot.tsx b/ui/components/MessageInputActions/Copilot.tsx
similarity index 100%
rename from src/components/MessageInputActions/Copilot.tsx
rename to ui/components/MessageInputActions/Copilot.tsx
diff --git a/src/components/MessageInputActions/Focus.tsx b/ui/components/MessageInputActions/Focus.tsx
similarity index 89%
rename from src/components/MessageInputActions/Focus.tsx
rename to ui/components/MessageInputActions/Focus.tsx
index 9256aa7..613078b 100644
--- a/src/components/MessageInputActions/Focus.tsx
+++ b/ui/components/MessageInputActions/Focus.tsx
@@ -15,7 +15,6 @@ import {
} from '@headlessui/react';
import { SiReddit, SiYoutube } from '@icons-pack/react-simple-icons';
import { Fragment } from 'react';
-import { useChat } from '@/lib/hooks/useChat';
const focusModes = [
{
@@ -46,19 +45,35 @@ const focusModes = [
key: 'youtubeSearch',
title: 'Youtube',
description: 'Search and watch videos',
- icon: ,
+ icon: (
+
+ ),
},
{
key: 'redditSearch',
title: 'Reddit',
description: 'Search for discussions and opinions',
- icon: ,
+ icon: (
+
+ ),
},
];
-const Focus = () => {
- const { focusMode, setFocusMode } = useChat();
-
+const Focus = ({
+ focusMode,
+ setFocusMode,
+}: {
+ focusMode: string;
+ setFocusMode: (mode: string) => void;
+}) => {
return (
{
- const { optimizationMode, setOptimizationMode } = useChat();
-
+const Optimization = ({
+ optimizationMode,
+ setOptimizationMode,
+}: {
+ optimizationMode: string;
+ setOptimizationMode: (mode: string) => void;
+}) => {
return (
{
{sources.slice(3, 6).map((source, i) => {
return source.metadata.url === 'File' ? (
-
+
) : (
{
+ const [title, setTitle] = useState
('');
+ const [timeAgo, setTimeAgo] = useState('');
+
+ useEffect(() => {
+ if (messages.length > 0) {
+ const newTitle =
+ messages[0].content.length > 20
+ ? `${messages[0].content.substring(0, 20).trim()}...`
+ : messages[0].content;
+ setTitle(newTitle);
+ const newTimeAgo = formatTimeDifference(
+ new Date(),
+ messages[0].createdAt,
+ );
+ setTimeAgo(newTimeAgo);
+ }
+ }, [messages]);
+
+ useEffect(() => {
+ const intervalId = setInterval(() => {
+ if (messages.length > 0) {
+ const newTimeAgo = formatTimeDifference(
+ new Date(),
+ messages[0].createdAt,
+ );
+ setTimeAgo(newTimeAgo);
+ }
+ }, 1000);
+
+ return () => clearInterval(intervalId);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ return (
+
+
+
+
+
+
{title}
+
+
+
+ {}} />
+
+
+ );
+};
+
+export default Navbar;
diff --git a/src/components/SearchImages.tsx b/ui/components/SearchImages.tsx
similarity index 86%
rename from src/components/SearchImages.tsx
rename to ui/components/SearchImages.tsx
index 08c16ee..383f780 100644
--- a/src/components/SearchImages.tsx
+++ b/ui/components/SearchImages.tsx
@@ -14,11 +14,9 @@ type Image = {
const SearchImages = ({
query,
chatHistory,
- messageId,
}: {
query: string;
chatHistory: Message[];
- messageId: string;
}) => {
const [images, setImages] = useState(null);
const [loading, setLoading] = useState(false);
@@ -29,7 +27,7 @@ const SearchImages = ({
<>
{!loading && images === null && (
{
setLoading(true);
@@ -39,24 +37,27 @@ const SearchImages = ({
const customOpenAIBaseURL = localStorage.getItem('openAIBaseURL');
const customOpenAIKey = localStorage.getItem('openAIApiKey');
- const res = await fetch(`/api/images`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- query: query,
- chatHistory: chatHistory,
- chatModel: {
- provider: chatModelProvider,
- model: chatModel,
- ...(chatModelProvider === 'custom_openai' && {
- customOpenAIBaseURL: customOpenAIBaseURL,
- customOpenAIKey: customOpenAIKey,
- }),
+ const res = await fetch(
+ `${process.env.NEXT_PUBLIC_API_URL}/images`,
+ {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
},
- }),
- });
+ body: JSON.stringify({
+ query: query,
+ chatHistory: chatHistory,
+ chatModel: {
+ provider: chatModelProvider,
+ model: chatModel,
+ ...(chatModelProvider === 'custom_openai' && {
+ customOpenAIBaseURL: customOpenAIBaseURL,
+ customOpenAIKey: customOpenAIKey,
+ }),
+ },
+ }),
+ },
+ );
const data = await res.json();
diff --git a/src/components/SearchVideos.tsx b/ui/components/SearchVideos.tsx
similarity index 91%
rename from src/components/SearchVideos.tsx
rename to ui/components/SearchVideos.tsx
index a09a0d2..c284dc2 100644
--- a/src/components/SearchVideos.tsx
+++ b/ui/components/SearchVideos.tsx
@@ -27,11 +27,9 @@ declare module 'yet-another-react-lightbox' {
const Searchvideos = ({
query,
chatHistory,
- messageId,
}: {
query: string;
chatHistory: Message[];
- messageId: string;
}) => {
const [videos, setVideos] = useState(null);
const [loading, setLoading] = useState(false);
@@ -44,7 +42,7 @@ const Searchvideos = ({
<>
{!loading && videos === null && (
{
setLoading(true);
@@ -54,24 +52,27 @@ const Searchvideos = ({
const customOpenAIBaseURL = localStorage.getItem('openAIBaseURL');
const customOpenAIKey = localStorage.getItem('openAIApiKey');
- const res = await fetch(`/api/videos`, {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- query: query,
- chatHistory: chatHistory,
- chatModel: {
- provider: chatModelProvider,
- model: chatModel,
- ...(chatModelProvider === 'custom_openai' && {
- customOpenAIBaseURL: customOpenAIBaseURL,
- customOpenAIKey: customOpenAIKey,
- }),
+ const res = await fetch(
+ `${process.env.NEXT_PUBLIC_API_URL}/videos`,
+ {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
},
- }),
- });
+ body: JSON.stringify({
+ query: query,
+ chatHistory: chatHistory,
+ chatModel: {
+ provider: chatModelProvider,
+ model: chatModel,
+ ...(chatModelProvider === 'custom_openai' && {
+ customOpenAIBaseURL: customOpenAIBaseURL,
+ customOpenAIKey: customOpenAIKey,
+ }),
+ },
+ }),
+ },
+ );
const data = await res.json();
diff --git a/src/components/Sidebar.tsx b/ui/components/Sidebar.tsx
similarity index 98%
rename from src/components/Sidebar.tsx
rename to ui/components/Sidebar.tsx
index 5829c60..81db8ba 100644
--- a/src/components/Sidebar.tsx
+++ b/ui/components/Sidebar.tsx
@@ -16,6 +16,8 @@ const VerticalIconContainer = ({ children }: { children: ReactNode }) => {
const Sidebar = ({ children }: { children: React.ReactNode }) => {
const segments = useSelectedLayoutSegments();
+ const [isSettingsOpen, setIsSettingsOpen] = useState(false);
+
const navLinks = [
{
icon: Home,
diff --git a/src/components/theme/Provider.tsx b/ui/components/theme/Provider.tsx
similarity index 100%
rename from src/components/theme/Provider.tsx
rename to ui/components/theme/Provider.tsx
diff --git a/src/components/theme/Switcher.tsx b/ui/components/theme/Switcher.tsx
similarity index 100%
rename from src/components/theme/Switcher.tsx
rename to ui/components/theme/Switcher.tsx
diff --git a/src/components/ui/Select.tsx b/ui/components/ui/Select.tsx
similarity index 100%
rename from src/components/ui/Select.tsx
rename to ui/components/ui/Select.tsx
diff --git a/src/lib/actions.ts b/ui/lib/actions.ts
similarity index 91%
rename from src/lib/actions.ts
rename to ui/lib/actions.ts
index 0f4c0f0..a4409b0 100644
--- a/src/lib/actions.ts
+++ b/ui/lib/actions.ts
@@ -7,7 +7,7 @@ export const getSuggestions = async (chatHisory: Message[]) => {
const customOpenAIKey = localStorage.getItem('openAIApiKey');
const customOpenAIBaseURL = localStorage.getItem('openAIBaseURL');
- const res = await fetch(`/api/suggestions`, {
+ const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/suggestions`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
diff --git a/src/lib/utils.ts b/ui/lib/utils.ts
similarity index 100%
rename from src/lib/utils.ts
rename to ui/lib/utils.ts
diff --git a/next.config.mjs b/ui/next.config.mjs
similarity index 75%
rename from next.config.mjs
rename to ui/next.config.mjs
index 2300ff4..c3f2e1a 100644
--- a/next.config.mjs
+++ b/ui/next.config.mjs
@@ -1,6 +1,5 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
- output: 'standalone',
images: {
remotePatterns: [
{
@@ -8,7 +7,6 @@ const nextConfig = {
},
],
},
- serverExternalPackages: ['pdf-parse'],
};
export default nextConfig;
diff --git a/ui/package.json b/ui/package.json
new file mode 100644
index 0000000..e299391
--- /dev/null
+++ b/ui/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "perplexica-frontend",
+ "version": "1.10.0-rc3",
+ "license": "MIT",
+ "author": "ItzCrazyKns",
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint",
+ "format:write": "prettier . --write"
+ },
+ "dependencies": {
+ "@headlessui/react": "^2.2.0",
+ "@icons-pack/react-simple-icons": "^9.4.0",
+ "@langchain/openai": "^0.0.25",
+ "@tailwindcss/typography": "^0.5.12",
+ "clsx": "^2.1.0",
+ "langchain": "^0.1.30",
+ "lucide-react": "^0.363.0",
+ "markdown-to-jsx": "^7.7.2",
+ "next": "14.1.4",
+ "next-themes": "^0.3.0",
+ "react": "^18",
+ "react-dom": "^18",
+ "react-text-to-speech": "^0.14.5",
+ "react-textarea-autosize": "^8.5.3",
+ "sonner": "^1.4.41",
+ "tailwind-merge": "^2.2.2",
+ "yet-another-react-lightbox": "^3.17.2",
+ "zod": "^3.22.4"
+ },
+ "devDependencies": {
+ "@types/node": "^20",
+ "@types/react": "^18",
+ "@types/react-dom": "^18",
+ "autoprefixer": "^10.0.1",
+ "eslint": "^8",
+ "eslint-config-next": "14.1.4",
+ "postcss": "^8",
+ "prettier": "^3.2.5",
+ "tailwindcss": "^3.3.0",
+ "typescript": "^5"
+ }
+}
diff --git a/postcss.config.js b/ui/postcss.config.js
similarity index 100%
rename from postcss.config.js
rename to ui/postcss.config.js
diff --git a/public/next.svg b/ui/public/next.svg
similarity index 100%
rename from public/next.svg
rename to ui/public/next.svg
diff --git a/public/vercel.svg b/ui/public/vercel.svg
similarity index 100%
rename from public/vercel.svg
rename to ui/public/vercel.svg
diff --git a/tailwind.config.ts b/ui/tailwind.config.ts
similarity index 88%
rename from tailwind.config.ts
rename to ui/tailwind.config.ts
index ae2cba9..00ae10a 100644
--- a/tailwind.config.ts
+++ b/ui/tailwind.config.ts
@@ -15,9 +15,9 @@ const themeLight = (colors: DefaultColors) => ({
const config: Config = {
content: [
- './src/pages/**/*.{js,ts,jsx,tsx,mdx}',
- './src/components/**/*.{js,ts,jsx,tsx,mdx}',
- './src/app/**/*.{js,ts,jsx,tsx,mdx}',
+ './pages/**/*.{js,ts,jsx,tsx,mdx}',
+ './components/**/*.{js,ts,jsx,tsx,mdx}',
+ './app/**/*.{js,ts,jsx,tsx,mdx}',
],
darkMode: 'class',
theme: {
diff --git a/ui/tsconfig.json b/ui/tsconfig.json
new file mode 100644
index 0000000..e7ff90f
--- /dev/null
+++ b/ui/tsconfig.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
+}
diff --git a/ui/yarn.lock b/ui/yarn.lock
new file mode 100644
index 0000000..7eb109f
--- /dev/null
+++ b/ui/yarn.lock
@@ -0,0 +1,3449 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@aashutoshrathi/word-wrap@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
+ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
+
+"@alloc/quick-lru@^5.2.0":
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
+ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
+
+"@anthropic-ai/sdk@^0.9.1":
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/@anthropic-ai/sdk/-/sdk-0.9.1.tgz#b2d2b7bf05c90dce502c9a2e869066870f69ba88"
+ integrity sha512-wa1meQ2WSfoY8Uor3EdrJq0jTiZJoKoSii2ZVWRY1oN4Tlr5s59pADg9T79FTbPe1/se5c3pBeZgJL63wmuoBA==
+ dependencies:
+ "@types/node" "^18.11.18"
+ "@types/node-fetch" "^2.6.4"
+ abort-controller "^3.0.0"
+ agentkeepalive "^4.2.1"
+ digest-fetch "^1.3.0"
+ form-data-encoder "1.7.2"
+ formdata-node "^4.3.2"
+ node-fetch "^2.6.7"
+ web-streams-polyfill "^3.2.1"
+
+"@babel/runtime@^7.20.13", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.0":
+ version "7.24.4"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd"
+ integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
+"@eslint-community/eslint-utils@^4.2.0":
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
+ integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ dependencies:
+ eslint-visitor-keys "^3.3.0"
+
+"@eslint-community/regexpp@^4.6.1":
+ version "4.10.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
+ integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
+
+"@eslint/eslintrc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
+ integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.6.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/js@8.57.0":
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
+ integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
+
+"@floating-ui/core@^1.6.0":
+ version "1.6.8"
+ resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12"
+ integrity sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==
+ dependencies:
+ "@floating-ui/utils" "^0.2.8"
+
+"@floating-ui/dom@^1.0.0":
+ version "1.6.12"
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.12.tgz#6333dcb5a8ead3b2bf82f33d6bc410e95f54e556"
+ integrity sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==
+ dependencies:
+ "@floating-ui/core" "^1.6.0"
+ "@floating-ui/utils" "^0.2.8"
+
+"@floating-ui/react-dom@^2.1.2":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31"
+ integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==
+ dependencies:
+ "@floating-ui/dom" "^1.0.0"
+
+"@floating-ui/react@^0.26.16":
+ version "0.26.28"
+ resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.28.tgz#93f44ebaeb02409312e9df9507e83aab4a8c0dc7"
+ integrity sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==
+ dependencies:
+ "@floating-ui/react-dom" "^2.1.2"
+ "@floating-ui/utils" "^0.2.8"
+ tabbable "^6.0.0"
+
+"@floating-ui/utils@^0.2.8":
+ version "0.2.8"
+ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62"
+ integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==
+
+"@headlessui/react@^2.2.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-2.2.0.tgz#a8e32f0899862849a1ce1615fa280e7891431ab7"
+ integrity sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==
+ dependencies:
+ "@floating-ui/react" "^0.26.16"
+ "@react-aria/focus" "^3.17.1"
+ "@react-aria/interactions" "^3.21.3"
+ "@tanstack/react-virtual" "^3.8.1"
+
+"@humanwhocodes/config-array@^0.11.14":
+ version "0.11.14"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
+ integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
+ dependencies:
+ "@humanwhocodes/object-schema" "^2.0.2"
+ debug "^4.3.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
+ integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
+
+"@icons-pack/react-simple-icons@^9.4.0":
+ version "9.4.0"
+ resolved "https://registry.yarnpkg.com/@icons-pack/react-simple-icons/-/react-simple-icons-9.4.0.tgz#37871d830f9ec9cfa1d1aab186036df2ab075f26"
+ integrity sha512-fZtC4Zv53hE+IQE2dJlFt3EB6UOifwTrUNMuEu4hSXemtqMahd05Dpvj2K0j2ewVc+j/ibavud3xjfaMB2Nj7g==
+
+"@isaacs/cliui@^8.0.2":
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+ integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+ dependencies:
+ string-width "^5.1.2"
+ string-width-cjs "npm:string-width@^4.2.0"
+ strip-ansi "^7.0.1"
+ strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+ wrap-ansi "^8.1.0"
+ wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
+"@jridgewell/gen-mapping@^0.3.2":
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
+ integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
+ dependencies:
+ "@jridgewell/set-array" "^1.2.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/set-array@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+ version "1.4.15"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.24":
+ version "0.3.25"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@langchain/community@~0.0.41":
+ version "0.0.44"
+ resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.0.44.tgz#b4f3453e3fd0b7a8c704fc35b004d7d738bd3416"
+ integrity sha512-II9Hz90jJmfWRICtxTg1auQWzFw0npqacWiiOpaxNhzs6rptdf56gyfC48Z6n1ii4R8FfAlfX6YxhOE7lGGKXg==
+ dependencies:
+ "@langchain/core" "~0.1.44"
+ "@langchain/openai" "~0.0.19"
+ expr-eval "^2.0.2"
+ flat "^5.0.2"
+ langsmith "~0.1.1"
+ uuid "^9.0.0"
+ zod "^3.22.3"
+ zod-to-json-schema "^3.22.5"
+
+"@langchain/core@~0.1.44", "@langchain/core@~0.1.45":
+ version "0.1.54"
+ resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.1.54.tgz#63dfbd5c116798f6d080fbe675a68a87d84a1be4"
+ integrity sha512-87pQ8dnWY8P1Kgnu/SgnRijLRNSEzTzkjBK6O/Z1klXf/eQTXAG5O5cKwe3lwM6Afn+4U2byzSMYjwViAYuR4g==
+ dependencies:
+ ansi-styles "^5.0.0"
+ camelcase "6"
+ decamelize "1.2.0"
+ js-tiktoken "^1.0.8"
+ langsmith "~0.1.7"
+ ml-distance "^4.0.0"
+ p-queue "^6.6.2"
+ p-retry "4"
+ uuid "^9.0.0"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
+
+"@langchain/openai@^0.0.25":
+ version "0.0.25"
+ resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.25.tgz#8332abea1e3acb9b1169f90636e518c0ee90622e"
+ integrity sha512-cD9xPDDXK2Cjs6yYg27BpdzBnQZvBb1yaNgMoGLWIT27UQVRyT96PLC1OVMQOmMmHaKDBCj/1bW4GQQgX7+d2Q==
+ dependencies:
+ "@langchain/core" "~0.1.45"
+ js-tiktoken "^1.0.7"
+ openai "^4.26.0"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
+
+"@langchain/openai@~0.0.19", "@langchain/openai@~0.0.26":
+ version "0.0.26"
+ resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.26.tgz#ab989085e03f8bcc26a40d4d5abe9a2b73e5f2a8"
+ integrity sha512-FpqYvVRP2CkFFjTLrj2tbXeY6JTIgbq8tRoi0rvGzmhRpoi6cWHlfgclSzDm+e6P9DqKBkzDjo6SPTJgTOabNA==
+ dependencies:
+ "@langchain/core" "~0.1.45"
+ js-tiktoken "^1.0.7"
+ openai "^4.32.1"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
+
+"@next/env@14.1.4":
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.4.tgz#432e80651733fbd67230bf262aee28be65252674"
+ integrity sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==
+
+"@next/eslint-plugin-next@14.1.4":
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.4.tgz#d7372b5ffede0e466af8af2ff534386418827fc8"
+ integrity sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==
+ dependencies:
+ glob "10.3.10"
+
+"@next/swc-darwin-arm64@14.1.4":
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz#a3bca0dc4393ac4cf3169bbf24df63441de66bb7"
+ integrity sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==
+
+"@next/swc-darwin-x64@14.1.4":
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz#ba3683d4e2d30099f3f2864dd7349a4d9f440140"
+ integrity sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==
+
+"@next/swc-linux-arm64-gnu@14.1.4":
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz#3519969293f16379954b7e196deb0c1eecbb2f8b"
+ integrity sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==
+
+"@next/swc-linux-arm64-musl@14.1.4":
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz#4bb3196bd402b3f84cf5373ff1021f547264d62f"
+ integrity sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==
+
+"@next/swc-linux-x64-gnu@14.1.4":
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz#1b3372c98c83dcdab946cdb4ee06e068b8139ba3"
+ integrity sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==
+
+"@next/swc-linux-x64-musl@14.1.4":
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz#8459088bdc872648ff78f121db596f2533df5808"
+ integrity sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==
+
+"@next/swc-win32-arm64-msvc@14.1.4":
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz#84280a08c00cc3be24ddd3a12f4617b108e6dea6"
+ integrity sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==
+
+"@next/swc-win32-ia32-msvc@14.1.4":
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz#23ff7f4bd0a27177428669ef6fa5c3923c738031"
+ integrity sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==
+
+"@next/swc-win32-x64-msvc@14.1.4":
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz#bccf5beccfde66d6c66fa4e2509118c796385eda"
+ integrity sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@pkgjs/parseargs@^0.11.0":
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
+"@react-aria/focus@^3.17.1":
+ version "3.18.4"
+ resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.18.4.tgz#a6e95896bc8680d1b5bcd855e983fc2c195a1a55"
+ integrity sha512-91J35077w9UNaMK1cpMUEFRkNNz0uZjnSwiyBCFuRdaVuivO53wNC9XtWSDNDdcO5cGy87vfJRVAiyoCn/mjqA==
+ dependencies:
+ "@react-aria/interactions" "^3.22.4"
+ "@react-aria/utils" "^3.25.3"
+ "@react-types/shared" "^3.25.0"
+ "@swc/helpers" "^0.5.0"
+ clsx "^2.0.0"
+
+"@react-aria/interactions@^3.21.3", "@react-aria/interactions@^3.22.4":
+ version "3.22.4"
+ resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.22.4.tgz#88ed61ab6a485f869bc1f65ae6688d48ca96064b"
+ integrity sha512-E0vsgtpItmknq/MJELqYJwib+YN18Qag8nroqwjk1qOnBa9ROIkUhWJerLi1qs5diXq9LHKehZDXRlwPvdEFww==
+ dependencies:
+ "@react-aria/ssr" "^3.9.6"
+ "@react-aria/utils" "^3.25.3"
+ "@react-types/shared" "^3.25.0"
+ "@swc/helpers" "^0.5.0"
+
+"@react-aria/ssr@^3.9.6":
+ version "3.9.6"
+ resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.6.tgz#a9e8b351acdc8238f2b5215b0ce904636c6ea690"
+ integrity sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA==
+ dependencies:
+ "@swc/helpers" "^0.5.0"
+
+"@react-aria/utils@^3.25.3":
+ version "3.25.3"
+ resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.25.3.tgz#cad9bffc07b045cdc283df2cb65c18747acbf76d"
+ integrity sha512-PR5H/2vaD8fSq0H/UB9inNbc8KDcVmW6fYAfSWkkn+OAdhTTMVKqXXrZuZBWyFfSD5Ze7VN6acr4hrOQm2bmrA==
+ dependencies:
+ "@react-aria/ssr" "^3.9.6"
+ "@react-stately/utils" "^3.10.4"
+ "@react-types/shared" "^3.25.0"
+ "@swc/helpers" "^0.5.0"
+ clsx "^2.0.0"
+
+"@react-stately/utils@^3.10.4":
+ version "3.10.4"
+ resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.10.4.tgz#310663a834b67048d305e1680ed258130092fe51"
+ integrity sha512-gBEQEIMRh5f60KCm7QKQ2WfvhB2gLUr9b72sqUdIZ2EG+xuPgaIlCBeSicvjmjBvYZwOjoOEnmIkcx2GHp/HWw==
+ dependencies:
+ "@swc/helpers" "^0.5.0"
+
+"@react-types/shared@^3.25.0":
+ version "3.25.0"
+ resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.25.0.tgz#7223baf72256e918a3c29081bb1ecc6fad4fbf58"
+ integrity sha512-OZSyhzU6vTdW3eV/mz5i6hQwQUhkRs7xwY2d1aqPvTdMe0+2cY7Fwp45PAiwYLEj73i9ro2FxF9qC4DvHGSCgQ==
+
+"@rushstack/eslint-patch@^1.3.3":
+ version "1.10.1"
+ resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz#7ca168b6937818e9a74b47ac4e2112b2e1a024cf"
+ integrity sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==
+
+"@swc/helpers@0.5.2":
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d"
+ integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==
+ dependencies:
+ tslib "^2.4.0"
+
+"@swc/helpers@^0.5.0":
+ version "0.5.15"
+ resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7"
+ integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==
+ dependencies:
+ tslib "^2.8.0"
+
+"@tailwindcss/typography@^0.5.12":
+ version "0.5.12"
+ resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.12.tgz#c0532fd594427b7f4e8e38eff7bf272c63a1dca4"
+ integrity sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==
+ dependencies:
+ lodash.castarray "^4.4.0"
+ lodash.isplainobject "^4.0.6"
+ lodash.merge "^4.6.2"
+ postcss-selector-parser "6.0.10"
+
+"@tanstack/react-virtual@^3.8.1":
+ version "3.10.9"
+ resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.10.9.tgz#40606b6dd8aba8e977f576d8f7df07f69ca63eea"
+ integrity sha512-OXO2uBjFqA4Ibr2O3y0YMnkrRWGVNqcvHQXmGvMu6IK8chZl3PrDxFXdGZ2iZkSrKh3/qUYoFqYe+Rx23RoU0g==
+ dependencies:
+ "@tanstack/virtual-core" "3.10.9"
+
+"@tanstack/virtual-core@3.10.9":
+ version "3.10.9"
+ resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.10.9.tgz#55710c92b311fdaa8d8c66682a0dbdd684bc77c4"
+ integrity sha512-kBknKOKzmeR7lN+vSadaKWXaLS0SZZG+oqpQ/k80Q6g9REn6zRHS/ZYdrIzHnpHgy/eWs00SujveUN/GJT2qTw==
+
+"@types/json5@^0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+
+"@types/node-fetch@^2.6.4":
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24"
+ integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==
+ dependencies:
+ "@types/node" "*"
+ form-data "^4.0.0"
+
+"@types/node@*", "@types/node@^20":
+ version "20.12.5"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.5.tgz#74c4f31ab17955d0b5808cdc8fd2839526ad00b3"
+ integrity sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==
+ dependencies:
+ undici-types "~5.26.4"
+
+"@types/node@^18.11.18":
+ version "18.19.30"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.30.tgz#0b1e6f824ed7ce37ef6e56f8f0d7d0ec2847b327"
+ integrity sha512-453z1zPuJLVDbyahaa1sSD5C2sht6ZpHp5rgJNs+H8YGqhluCXcuOUmBYsAo0Tos0cHySJ3lVUGbGgLlqIkpyg==
+ dependencies:
+ undici-types "~5.26.4"
+
+"@types/prop-types@*":
+ version "15.7.12"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6"
+ integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==
+
+"@types/react-dom@^18":
+ version "18.2.24"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.24.tgz#8dda8f449ae436a7a6e91efed8035d4ab03ff759"
+ integrity sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react@*", "@types/react@^18":
+ version "18.2.74"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.74.tgz#2d52eb80e4e7c4ea8812c89181d6d590b53f958c"
+ integrity sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^3.0.2"
+
+"@types/retry@0.12.0":
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
+ integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
+
+"@types/uuid@^9.0.1":
+ version "9.0.8"
+ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba"
+ integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==
+
+"@typescript-eslint/parser@^5.4.2 || ^6.0.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b"
+ integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
+ dependencies:
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+ debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1"
+ integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+
+"@typescript-eslint/types@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d"
+ integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
+
+"@typescript-eslint/typescript-estree@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46"
+ integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ minimatch "9.0.3"
+ semver "^7.5.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/visitor-keys@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47"
+ integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==
+ dependencies:
+ "@typescript-eslint/types" "6.21.0"
+ eslint-visitor-keys "^3.4.1"
+
+"@ungap/structured-clone@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
+ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
+
+abort-controller@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
+ integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+ dependencies:
+ event-target-shim "^5.0.0"
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn@^8.9.0:
+ version "8.11.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
+ integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+
+agentkeepalive@^4.2.1:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923"
+ integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==
+ dependencies:
+ humanize-ms "^1.2.1"
+
+ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
+ integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+
+ansi-styles@^6.1.0:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+ integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
+any-promise@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+arg@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
+ integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+aria-query@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
+ integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
+ dependencies:
+ dequal "^2.0.3"
+
+array-buffer-byte-length@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f"
+ integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==
+ dependencies:
+ call-bind "^1.0.5"
+ is-array-buffer "^3.0.4"
+
+array-includes@^3.1.6, array-includes@^3.1.7:
+ version "3.1.8"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d"
+ integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-object-atoms "^1.0.0"
+ get-intrinsic "^1.2.4"
+ is-string "^1.0.7"
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array.prototype.findlast@^1.2.4:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904"
+ integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ es-shim-unscopables "^1.0.2"
+
+array.prototype.findlastindex@^1.2.3:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d"
+ integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ es-shim-unscopables "^1.0.2"
+
+array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18"
+ integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ es-shim-unscopables "^1.0.0"
+
+array.prototype.flatmap@^1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527"
+ integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ es-shim-unscopables "^1.0.0"
+
+array.prototype.toreversed@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba"
+ integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ es-shim-unscopables "^1.0.0"
+
+array.prototype.tosorted@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8"
+ integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==
+ dependencies:
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ es-abstract "^1.22.3"
+ es-errors "^1.1.0"
+ es-shim-unscopables "^1.0.2"
+
+arraybuffer.prototype.slice@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6"
+ integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==
+ dependencies:
+ array-buffer-byte-length "^1.0.1"
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ es-abstract "^1.22.3"
+ es-errors "^1.2.1"
+ get-intrinsic "^1.2.3"
+ is-array-buffer "^3.0.4"
+ is-shared-array-buffer "^1.0.2"
+
+ast-types-flow@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6"
+ integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+autoprefixer@^10.0.1:
+ version "10.4.19"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f"
+ integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==
+ dependencies:
+ browserslist "^4.23.0"
+ caniuse-lite "^1.0.30001599"
+ fraction.js "^4.3.7"
+ normalize-range "^0.1.2"
+ picocolors "^1.0.0"
+ postcss-value-parser "^4.2.0"
+
+available-typed-arrays@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846"
+ integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==
+ dependencies:
+ possible-typed-array-names "^1.0.0"
+
+axe-core@=4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf"
+ integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==
+
+axobject-query@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a"
+ integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==
+ dependencies:
+ dequal "^2.0.3"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base-64@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb"
+ integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==
+
+base64-js@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+binary-extensions@^2.0.0, binary-extensions@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
+ integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+
+binary-search@^1.3.5:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.6.tgz#e32426016a0c5092f0f3598836a1c7da3560565c"
+ integrity sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@^3.0.2, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browserslist@^4.23.0:
+ version "4.23.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab"
+ integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==
+ dependencies:
+ caniuse-lite "^1.0.30001587"
+ electron-to-chromium "^1.4.668"
+ node-releases "^2.0.14"
+ update-browserslist-db "^1.0.13"
+
+busboy@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
+ integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
+ dependencies:
+ streamsearch "^1.1.0"
+
+call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
+ integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
+ dependencies:
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.4"
+ set-function-length "^1.2.1"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelcase-css@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
+ integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
+
+camelcase@6:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+ integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599:
+ version "1.0.30001606"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz#b4d5f67ab0746a3b8b5b6d1f06e39c51beb39a9e"
+ integrity sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg==
+
+chalk@^4.0.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+charenc@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+ integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
+
+chokidar@^3.5.3:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+client-only@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
+ integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
+
+clsx@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"
+ integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
+
+clsx@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb"
+ integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
+ integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
+
+commander@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+cross-spawn@^7.0.0, cross-spawn@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+crypt@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+ integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+csstype@^3.0.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
+ integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
+damerau-levenshtein@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
+ integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
+
+data-view-buffer@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2"
+ integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==
+ dependencies:
+ call-bind "^1.0.6"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.1"
+
+data-view-byte-length@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2"
+ integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==
+ dependencies:
+ call-bind "^1.0.7"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.1"
+
+data-view-byte-offset@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a"
+ integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==
+ dependencies:
+ call-bind "^1.0.6"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.1"
+
+debug@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+decamelize@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+
+deep-is@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+define-data-property@^1.0.1, define-data-property@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
+ integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
+ dependencies:
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ gopd "^1.0.1"
+
+define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
+ integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
+ dependencies:
+ define-data-property "^1.0.1"
+ has-property-descriptors "^1.0.0"
+ object-keys "^1.1.1"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+dequal@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
+ integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+
+didyoumean@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
+ integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+
+digest-fetch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/digest-fetch/-/digest-fetch-1.3.0.tgz#898e69264d00012a23cf26e8a3e40320143fc661"
+ integrity sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==
+ dependencies:
+ base-64 "^0.1.0"
+ md5 "^2.3.0"
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+dlv@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
+ integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ esutils "^2.0.2"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+electron-to-chromium@^1.4.668:
+ version "1.4.729"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.729.tgz#8477d21e2a50993781950885b2731d92ad532c00"
+ integrity sha512-bx7+5Saea/qu14kmPTDHQxkp2UnziG3iajUQu3BxFvCOnpAJdDbMV4rSl+EqFDkkpNNVUFlR1kDfpL59xfy1HA==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+enhanced-resolve@^5.12.0:
+ version "5.16.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787"
+ integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==
+ dependencies:
+ graceful-fs "^4.2.4"
+ tapable "^2.2.0"
+
+es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2:
+ version "1.23.3"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0"
+ integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==
+ dependencies:
+ array-buffer-byte-length "^1.0.1"
+ arraybuffer.prototype.slice "^1.0.3"
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.7"
+ data-view-buffer "^1.0.1"
+ data-view-byte-length "^1.0.1"
+ data-view-byte-offset "^1.0.0"
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ es-set-tostringtag "^2.0.3"
+ es-to-primitive "^1.2.1"
+ function.prototype.name "^1.1.6"
+ get-intrinsic "^1.2.4"
+ get-symbol-description "^1.0.2"
+ globalthis "^1.0.3"
+ gopd "^1.0.1"
+ has-property-descriptors "^1.0.2"
+ has-proto "^1.0.3"
+ has-symbols "^1.0.3"
+ hasown "^2.0.2"
+ internal-slot "^1.0.7"
+ is-array-buffer "^3.0.4"
+ is-callable "^1.2.7"
+ is-data-view "^1.0.1"
+ is-negative-zero "^2.0.3"
+ is-regex "^1.1.4"
+ is-shared-array-buffer "^1.0.3"
+ is-string "^1.0.7"
+ is-typed-array "^1.1.13"
+ is-weakref "^1.0.2"
+ object-inspect "^1.13.1"
+ object-keys "^1.1.1"
+ object.assign "^4.1.5"
+ regexp.prototype.flags "^1.5.2"
+ safe-array-concat "^1.1.2"
+ safe-regex-test "^1.0.3"
+ string.prototype.trim "^1.2.9"
+ string.prototype.trimend "^1.0.8"
+ string.prototype.trimstart "^1.0.8"
+ typed-array-buffer "^1.0.2"
+ typed-array-byte-length "^1.0.1"
+ typed-array-byte-offset "^1.0.2"
+ typed-array-length "^1.0.6"
+ unbox-primitive "^1.0.2"
+ which-typed-array "^1.1.15"
+
+es-define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
+ integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
+ dependencies:
+ get-intrinsic "^1.2.4"
+
+es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17:
+ version "1.0.18"
+ resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d"
+ integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.0"
+ es-errors "^1.3.0"
+ es-set-tostringtag "^2.0.3"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.4"
+ globalthis "^1.0.3"
+ has-property-descriptors "^1.0.2"
+ has-proto "^1.0.3"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.7"
+ iterator.prototype "^1.1.2"
+ safe-array-concat "^1.1.2"
+
+es-object-atoms@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941"
+ integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==
+ dependencies:
+ es-errors "^1.3.0"
+
+es-set-tostringtag@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777"
+ integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==
+ dependencies:
+ get-intrinsic "^1.2.4"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.1"
+
+es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763"
+ integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==
+ dependencies:
+ hasown "^2.0.0"
+
+es-to-primitive@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+ integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ dependencies:
+ is-callable "^1.1.4"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.2"
+
+escalade@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
+ integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint-config-next@14.1.4:
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.4.tgz#22f2ba4c0993e991249d863656a64c204bae542c"
+ integrity sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==
+ dependencies:
+ "@next/eslint-plugin-next" "14.1.4"
+ "@rushstack/eslint-patch" "^1.3.3"
+ "@typescript-eslint/parser" "^5.4.2 || ^6.0.0"
+ eslint-import-resolver-node "^0.3.6"
+ eslint-import-resolver-typescript "^3.5.2"
+ eslint-plugin-import "^2.28.1"
+ eslint-plugin-jsx-a11y "^6.7.1"
+ eslint-plugin-react "^7.33.2"
+ eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
+
+eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9:
+ version "0.3.9"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac"
+ integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==
+ dependencies:
+ debug "^3.2.7"
+ is-core-module "^2.13.0"
+ resolve "^1.22.4"
+
+eslint-import-resolver-typescript@^3.5.2:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa"
+ integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==
+ dependencies:
+ debug "^4.3.4"
+ enhanced-resolve "^5.12.0"
+ eslint-module-utils "^2.7.4"
+ fast-glob "^3.3.1"
+ get-tsconfig "^4.5.0"
+ is-core-module "^2.11.0"
+ is-glob "^4.0.3"
+
+eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34"
+ integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==
+ dependencies:
+ debug "^3.2.7"
+
+eslint-plugin-import@^2.28.1:
+ version "2.29.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643"
+ integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==
+ dependencies:
+ array-includes "^3.1.7"
+ array.prototype.findlastindex "^1.2.3"
+ array.prototype.flat "^1.3.2"
+ array.prototype.flatmap "^1.3.2"
+ debug "^3.2.7"
+ doctrine "^2.1.0"
+ eslint-import-resolver-node "^0.3.9"
+ eslint-module-utils "^2.8.0"
+ hasown "^2.0.0"
+ is-core-module "^2.13.1"
+ is-glob "^4.0.3"
+ minimatch "^3.1.2"
+ object.fromentries "^2.0.7"
+ object.groupby "^1.0.1"
+ object.values "^1.1.7"
+ semver "^6.3.1"
+ tsconfig-paths "^3.15.0"
+
+eslint-plugin-jsx-a11y@^6.7.1:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2"
+ integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==
+ dependencies:
+ "@babel/runtime" "^7.23.2"
+ aria-query "^5.3.0"
+ array-includes "^3.1.7"
+ array.prototype.flatmap "^1.3.2"
+ ast-types-flow "^0.0.8"
+ axe-core "=4.7.0"
+ axobject-query "^3.2.1"
+ damerau-levenshtein "^1.0.8"
+ emoji-regex "^9.2.2"
+ es-iterator-helpers "^1.0.15"
+ hasown "^2.0.0"
+ jsx-ast-utils "^3.3.5"
+ language-tags "^1.0.9"
+ minimatch "^3.1.2"
+ object.entries "^1.1.7"
+ object.fromentries "^2.0.7"
+
+"eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705":
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
+ integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
+
+eslint-plugin-react@^7.33.2:
+ version "7.34.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997"
+ integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==
+ dependencies:
+ array-includes "^3.1.7"
+ array.prototype.findlast "^1.2.4"
+ array.prototype.flatmap "^1.3.2"
+ array.prototype.toreversed "^1.1.2"
+ array.prototype.tosorted "^1.1.3"
+ doctrine "^2.1.0"
+ es-iterator-helpers "^1.0.17"
+ estraverse "^5.3.0"
+ jsx-ast-utils "^2.4.1 || ^3.0.0"
+ minimatch "^3.1.2"
+ object.entries "^1.1.7"
+ object.fromentries "^2.0.7"
+ object.hasown "^1.1.3"
+ object.values "^1.1.7"
+ prop-types "^15.8.1"
+ resolve "^2.0.0-next.5"
+ semver "^6.3.1"
+ string.prototype.matchall "^4.0.10"
+
+eslint-scope@^7.2.2:
+ version "7.2.2"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
+eslint@^8:
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
+ integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^2.1.4"
+ "@eslint/js" "8.57.0"
+ "@humanwhocodes/config-array" "^0.11.14"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ "@ungap/structured-clone" "^1.2.0"
+ ajv "^6.12.4"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.2.2"
+ eslint-visitor-keys "^3.4.3"
+ espree "^9.6.1"
+ esquery "^1.4.2"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ graphemer "^1.4.0"
+ ignore "^5.2.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
+espree@^9.6.0, espree@^9.6.1:
+ version "9.6.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
+ integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
+ dependencies:
+ acorn "^8.9.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.4.1"
+
+esquery@^1.4.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
+ integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+event-target-shim@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
+ integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
+
+eventemitter3@^4.0.4:
+ version "4.0.7"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+ integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
+
+expr-eval@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expr-eval/-/expr-eval-2.0.2.tgz#fa6f044a7b0c93fde830954eb9c5b0f7fbc7e201"
+ integrity sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.17.1"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
+ integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
+ dependencies:
+ reusify "^1.0.4"
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^3.0.4:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
+ integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.3"
+ rimraf "^3.0.2"
+
+flat@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
+flatted@^3.2.9:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
+ integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
+
+for-each@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+ integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+ dependencies:
+ is-callable "^1.1.3"
+
+foreground-child@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+ integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+ dependencies:
+ cross-spawn "^7.0.0"
+ signal-exit "^4.0.1"
+
+form-data-encoder@1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040"
+ integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==
+
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+formdata-node@^4.3.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2"
+ integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==
+ dependencies:
+ node-domexception "1.0.0"
+ web-streams-polyfill "4.0.0-beta.3"
+
+fraction.js@^4.3.7:
+ version "4.3.7"
+ resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
+ integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+function.prototype.name@^1.1.5, function.prototype.name@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd"
+ integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.2.0"
+ es-abstract "^1.22.1"
+ functions-have-names "^1.2.3"
+
+functions-have-names@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+ integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
+ integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
+ dependencies:
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+ has-proto "^1.0.1"
+ has-symbols "^1.0.3"
+ hasown "^2.0.0"
+
+get-symbol-description@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5"
+ integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==
+ dependencies:
+ call-bind "^1.0.5"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.4"
+
+get-tsconfig@^4.5.0:
+ version "4.7.3"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83"
+ integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==
+ dependencies:
+ resolve-pkg-maps "^1.0.0"
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob@10.3.10:
+ version "10.3.10"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
+ integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^2.3.5"
+ minimatch "^9.0.1"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+ path-scurry "^1.10.1"
+
+glob@^10.3.10:
+ version "10.3.12"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b"
+ integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^2.3.6"
+ minimatch "^9.0.1"
+ minipass "^7.0.4"
+ path-scurry "^1.10.2"
+
+glob@^7.1.3:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^13.19.0:
+ version "13.24.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
+ integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
+ dependencies:
+ type-fest "^0.20.2"
+
+globalthis@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+ integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+ dependencies:
+ define-properties "^1.1.3"
+
+globby@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.9"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^3.0.0"
+
+gopd@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
+ integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
+ dependencies:
+ get-intrinsic "^1.1.3"
+
+graceful-fs@^4.2.11, graceful-fs@^4.2.4:
+ version "4.2.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
+has-bigints@^1.0.1, has-bigints@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+ integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
+ integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
+ dependencies:
+ es-define-property "^1.0.0"
+
+has-proto@^1.0.1, has-proto@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
+ integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
+
+has-symbols@^1.0.2, has-symbols@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+ integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-tostringtag@^1.0.0, has-tostringtag@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
+ integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
+ dependencies:
+ has-symbols "^1.0.3"
+
+hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
+ dependencies:
+ function-bind "^1.1.2"
+
+humanize-ms@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+ integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+ dependencies:
+ ms "^2.0.0"
+
+ignore@^5.2.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
+ integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
+
+import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+internal-slot@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802"
+ integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==
+ dependencies:
+ es-errors "^1.3.0"
+ hasown "^2.0.0"
+ side-channel "^1.0.4"
+
+is-any-array@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e"
+ integrity sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==
+
+is-array-buffer@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98"
+ integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==
+ dependencies:
+ call-bind "^1.0.2"
+ get-intrinsic "^1.2.1"
+
+is-async-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646"
+ integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-bigint@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+ integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+ dependencies:
+ has-bigints "^1.0.1"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-boolean-object@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+ integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-buffer@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
+ integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
+
+is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
+ integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
+ dependencies:
+ hasown "^2.0.0"
+
+is-data-view@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f"
+ integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==
+ dependencies:
+ is-typed-array "^1.1.13"
+
+is-date-object@^1.0.1, is-date-object@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
+ integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-finalizationregistry@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6"
+ integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-generator-function@^1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
+ integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-map@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e"
+ integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==
+
+is-negative-zero@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747"
+ integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==
+
+is-number-object@^1.0.4:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
+ integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-regex@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+ integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
+is-set@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d"
+ integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==
+
+is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688"
+ integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==
+ dependencies:
+ call-bind "^1.0.7"
+
+is-string@^1.0.5, is-string@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+ integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+ dependencies:
+ has-tostringtag "^1.0.0"
+
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+ integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+ dependencies:
+ has-symbols "^1.0.2"
+
+is-typed-array@^1.1.13:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229"
+ integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==
+ dependencies:
+ which-typed-array "^1.1.14"
+
+is-weakmap@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd"
+ integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==
+
+is-weakref@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+ integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+ dependencies:
+ call-bind "^1.0.2"
+
+is-weakset@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007"
+ integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==
+ dependencies:
+ call-bind "^1.0.7"
+ get-intrinsic "^1.2.4"
+
+isarray@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
+ integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+iterator.prototype@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0"
+ integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==
+ dependencies:
+ define-properties "^1.2.1"
+ get-intrinsic "^1.2.1"
+ has-symbols "^1.0.3"
+ reflect.getprototypeof "^1.0.4"
+ set-function-name "^2.0.1"
+
+jackspeak@^2.3.5, jackspeak@^2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
+ integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
+ dependencies:
+ "@isaacs/cliui" "^8.0.2"
+ optionalDependencies:
+ "@pkgjs/parseargs" "^0.11.0"
+
+jiti@^1.21.0:
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
+ integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==
+
+js-tiktoken@^1.0.7, js-tiktoken@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.10.tgz#2b343ec169399dcee8f9ef9807dbd4fafd3b30dc"
+ integrity sha512-ZoSxbGjvGyMT13x6ACo9ebhDha/0FHdKA+OsQcMOWcm1Zs7r90Rhk5lhERLzji+3rA7EKpXCgwXcM5fF3DMpdA==
+ dependencies:
+ base64-js "^1.5.1"
+
+"js-tokens@^3.0.0 || ^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json5@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
+ integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
+ dependencies:
+ minimist "^1.2.0"
+
+jsonpointer@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
+ integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5:
+ version "3.3.5"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a"
+ integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==
+ dependencies:
+ array-includes "^3.1.6"
+ array.prototype.flat "^1.3.1"
+ object.assign "^4.1.4"
+ object.values "^1.1.6"
+
+keyv@^4.5.3:
+ version "4.5.4"
+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+langchain@^0.1.30:
+ version "0.1.31"
+ resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.1.31.tgz#4f3a0e84a00d77214b325156e661762f945f33ae"
+ integrity sha512-J2iZZL48Nwdo1XDU5cS5YYm91b2L6sL3a8hH1gBljvDzCY7jbtUOTuIoRVx5iHN3DXuuLnszS4lhqg0u9hQxBQ==
+ dependencies:
+ "@anthropic-ai/sdk" "^0.9.1"
+ "@langchain/community" "~0.0.41"
+ "@langchain/core" "~0.1.44"
+ "@langchain/openai" "~0.0.26"
+ binary-extensions "^2.2.0"
+ js-tiktoken "^1.0.7"
+ js-yaml "^4.1.0"
+ jsonpointer "^5.0.1"
+ langchainhub "~0.0.8"
+ langsmith "~0.1.7"
+ ml-distance "^4.0.0"
+ openapi-types "^12.1.3"
+ p-retry "4"
+ uuid "^9.0.0"
+ yaml "^2.2.1"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
+
+langchainhub@~0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/langchainhub/-/langchainhub-0.0.8.tgz#fd4b96dc795e22e36c1a20bad31b61b0c33d3110"
+ integrity sha512-Woyb8YDHgqqTOZvWIbm2CaFDGfZ4NTSyXV687AG4vXEfoNo7cGQp7nhl7wL3ehenKWmNEmcxCLgOZzW8jE6lOQ==
+
+langsmith@~0.1.1, langsmith@~0.1.7:
+ version "0.1.14"
+ resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.14.tgz#2b889dbcfb49547614df276a4a5a063092a1585d"
+ integrity sha512-iEzQLLB7/0nRpAwNBAR7B7N64fyByg5UsNjSvLaCCkQ9AS68PSafjB8xQkyI8QXXrGjU1dEqDRoa8m4SUuRdUw==
+ dependencies:
+ "@types/uuid" "^9.0.1"
+ commander "^10.0.1"
+ p-queue "^6.6.2"
+ p-retry "4"
+ uuid "^9.0.0"
+
+language-subtag-registry@^0.3.20:
+ version "0.3.22"
+ resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d"
+ integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==
+
+language-tags@^1.0.9:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777"
+ integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==
+ dependencies:
+ language-subtag-registry "^0.3.20"
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+lilconfig@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
+ integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
+
+lilconfig@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3"
+ integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==
+
+lines-and-columns@^1.1.6:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+ integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash.castarray@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115"
+ integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+ integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+loose-envify@^1.1.0, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lru-cache@^10.2.0:
+ version "10.2.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3"
+ integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+lucide-react@^0.363.0:
+ version "0.363.0"
+ resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.363.0.tgz#2bb1f9d09b830dda86f5118fcd097f87247fe0e3"
+ integrity sha512-AlsfPCsXQyQx7wwsIgzcKOL9LwC498LIMAo+c0Es5PkHJa33xwmYAkkSoKoJWWWSYQEStqu58/jT4tL2gi32uQ==
+
+markdown-to-jsx@^7.7.2:
+ version "7.7.2"
+ resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.7.2.tgz#59c1dd64f48b53719311ab140be3cd51cdabccd3"
+ integrity sha512-N3AKfYRvxNscvcIH6HDnDKILp4S8UWbebp+s92Y8SwIq0CuSbLW4Jgmrbjku3CWKjTQO0OyIMS6AhzqrwjEa3g==
+
+md5@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f"
+ integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==
+ dependencies:
+ charenc "0.0.2"
+ crypt "0.0.2"
+ is-buffer "~1.1.6"
+
+merge2@^1.3.0, merge2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.4, micromatch@^4.0.5:
+ version "4.0.5"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ dependencies:
+ braces "^3.0.2"
+ picomatch "^2.3.1"
+
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+ version "2.1.35"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+minimatch@9.0.3:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^9.0.1:
+ version "9.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51"
+ integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimist@^1.2.0, minimist@^1.2.6:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
+ integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
+
+ml-array-mean@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/ml-array-mean/-/ml-array-mean-1.1.6.tgz#d951a700dc8e3a17b3e0a583c2c64abd0c619c56"
+ integrity sha512-MIdf7Zc8HznwIisyiJGRH9tRigg3Yf4FldW8DxKxpCCv/g5CafTw0RRu51nojVEOXuCQC7DRVVu5c7XXO/5joQ==
+ dependencies:
+ ml-array-sum "^1.1.6"
+
+ml-array-sum@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/ml-array-sum/-/ml-array-sum-1.1.6.tgz#d1d89c20793cd29c37b09d40e85681aa4515a955"
+ integrity sha512-29mAh2GwH7ZmiRnup4UyibQZB9+ZLyMShvt4cH4eTK+cL2oEMIZFnSyB3SS8MlsTh6q/w/yh48KmqLxmovN4Dw==
+ dependencies:
+ is-any-array "^2.0.0"
+
+ml-distance-euclidean@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ml-distance-euclidean/-/ml-distance-euclidean-2.0.0.tgz#3a668d236649d1b8fec96380b9435c6f42c9a817"
+ integrity sha512-yC9/2o8QF0A3m/0IXqCTXCzz2pNEzvmcE/9HFKOZGnTjatvBbsn4lWYJkxENkA4Ug2fnYl7PXQxnPi21sgMy/Q==
+
+ml-distance@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/ml-distance/-/ml-distance-4.0.1.tgz#4741d17a1735888c5388823762271dfe604bd019"
+ integrity sha512-feZ5ziXs01zhyFUUUeZV5hwc0f5JW0Sh0ckU1koZe/wdVkJdGxcP06KNQuF0WBTj8FttQUzcvQcpcrOp/XrlEw==
+ dependencies:
+ ml-array-mean "^1.1.6"
+ ml-distance-euclidean "^2.0.0"
+ ml-tree-similarity "^1.0.0"
+
+ml-tree-similarity@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ml-tree-similarity/-/ml-tree-similarity-1.0.0.tgz#24705a107e32829e24d945e87219e892159c53f0"
+ integrity sha512-XJUyYqjSuUQkNQHMscr6tcjldsOoAekxADTplt40QKfwW6nd++1wHWV9AArl0Zvw/TIHgNaZZNvr8QGvE8wLRg==
+ dependencies:
+ binary-search "^1.3.5"
+ num-sort "^2.0.0"
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.0.0, ms@^2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+mz@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
+nanoid@^3.3.6, nanoid@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+next-themes@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.3.0.tgz#b4d2a866137a67d42564b07f3a3e720e2ff3871a"
+ integrity sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==
+
+next@14.1.4:
+ version "14.1.4"
+ resolved "https://registry.yarnpkg.com/next/-/next-14.1.4.tgz#203310f7310578563fd5c961f0db4729ce7a502d"
+ integrity sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==
+ dependencies:
+ "@next/env" "14.1.4"
+ "@swc/helpers" "0.5.2"
+ busboy "1.6.0"
+ caniuse-lite "^1.0.30001579"
+ graceful-fs "^4.2.11"
+ postcss "8.4.31"
+ styled-jsx "5.1.1"
+ optionalDependencies:
+ "@next/swc-darwin-arm64" "14.1.4"
+ "@next/swc-darwin-x64" "14.1.4"
+ "@next/swc-linux-arm64-gnu" "14.1.4"
+ "@next/swc-linux-arm64-musl" "14.1.4"
+ "@next/swc-linux-x64-gnu" "14.1.4"
+ "@next/swc-linux-x64-musl" "14.1.4"
+ "@next/swc-win32-arm64-msvc" "14.1.4"
+ "@next/swc-win32-ia32-msvc" "14.1.4"
+ "@next/swc-win32-x64-msvc" "14.1.4"
+
+node-domexception@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
+ integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
+
+node-fetch@^2.6.7:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
+ integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
+ dependencies:
+ whatwg-url "^5.0.0"
+
+node-releases@^2.0.14:
+ version "2.0.14"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
+ integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+normalize-range@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+
+num-sort@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/num-sort/-/num-sort-2.1.0.tgz#1cbb37aed071329fdf41151258bc011898577a9b"
+ integrity sha512-1MQz1Ed8z2yckoBeSfkQHHO9K1yDRxxtotKSJ9yvcTUUxSvfvzEq5GwBrjjHEpMlq/k5gvXdmJ1SbYxWtpNoVg==
+
+object-assign@^4.0.1, object-assign@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+
+object-hash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
+ integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
+
+object-inspect@^1.13.1:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
+ integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
+
+object-keys@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+ integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object.assign@^4.1.4, object.assign@^4.1.5:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0"
+ integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==
+ dependencies:
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ has-symbols "^1.0.3"
+ object-keys "^1.1.1"
+
+object.entries@^1.1.7:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41"
+ integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+object.fromentries@^2.0.7:
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65"
+ integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-object-atoms "^1.0.0"
+
+object.groupby@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e"
+ integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+
+object.hasown@^1.1.3:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc"
+ integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==
+ dependencies:
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-object-atoms "^1.0.0"
+
+object.values@^1.1.6, object.values@^1.1.7:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b"
+ integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+openai@^4.26.0, openai@^4.32.1:
+ version "4.33.0"
+ resolved "https://registry.yarnpkg.com/openai/-/openai-4.33.0.tgz#8c33da687d4a7f3dd7576179318341615394c79d"
+ integrity sha512-Sh4KvplkvkAREuhb8yZpohqsOo08cBBu6LNWLD8YyMxe8yCxbE+ouJYUs1X2oDPrzQGANj0rFNQYiwW9gWLBOg==
+ dependencies:
+ "@types/node" "^18.11.18"
+ "@types/node-fetch" "^2.6.4"
+ abort-controller "^3.0.0"
+ agentkeepalive "^4.2.1"
+ form-data-encoder "1.7.2"
+ formdata-node "^4.3.2"
+ node-fetch "^2.6.7"
+ web-streams-polyfill "^3.2.1"
+
+openapi-types@^12.1.3:
+ version "12.1.3"
+ resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3"
+ integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==
+
+optionator@^0.9.3:
+ version "0.9.3"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
+ integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
+ dependencies:
+ "@aashutoshrathi/word-wrap" "^1.2.3"
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+p-queue@^6.6.2:
+ version "6.6.2"
+ resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426"
+ integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==
+ dependencies:
+ eventemitter3 "^4.0.4"
+ p-timeout "^3.2.0"
+
+p-retry@4:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16"
+ integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==
+ dependencies:
+ "@types/retry" "0.12.0"
+ retry "^0.13.1"
+
+p-timeout@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe"
+ integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==
+ dependencies:
+ p-finally "^1.0.0"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-scurry@^1.10.1, path-scurry@^1.10.2:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7"
+ integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==
+ dependencies:
+ lru-cache "^10.2.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
+
+pirates@^4.0.1:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
+ integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
+
+possible-typed-array-names@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f"
+ integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==
+
+postcss-import@^15.1.0:
+ version "15.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
+ integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==
+ dependencies:
+ postcss-value-parser "^4.0.0"
+ read-cache "^1.0.0"
+ resolve "^1.1.7"
+
+postcss-js@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
+ integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==
+ dependencies:
+ camelcase-css "^2.0.1"
+
+postcss-load-config@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3"
+ integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==
+ dependencies:
+ lilconfig "^3.0.0"
+ yaml "^2.3.4"
+
+postcss-nested@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c"
+ integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==
+ dependencies:
+ postcss-selector-parser "^6.0.11"
+
+postcss-selector-parser@6.0.10:
+ version "6.0.10"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
+ integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-selector-parser@^6.0.11:
+ version "6.0.16"
+ resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04"
+ integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@8.4.31:
+ version "8.4.31"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
+ integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
+ dependencies:
+ nanoid "^3.3.6"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+postcss@^8, postcss@^8.4.23:
+ version "8.4.38"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e"
+ integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.0"
+ source-map-js "^1.2.0"
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prettier@^3.2.5:
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368"
+ integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==
+
+prop-types@^15.8.1:
+ version "15.8.1"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+ dependencies:
+ loose-envify "^1.4.0"
+ object-assign "^4.1.1"
+ react-is "^16.13.1"
+
+punycode@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+react-dom@^18:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
+ integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
+ dependencies:
+ loose-envify "^1.1.0"
+ scheduler "^0.23.0"
+
+react-is@^16.13.1:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react-text-to-speech@^0.14.5:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/react-text-to-speech/-/react-text-to-speech-0.14.5.tgz#f918786ab283311535682011045bd49777193300"
+ integrity sha512-3brr/IrK/5YTtOZSTo+Y8b+dnWelzfZiDZvkXnOct1e7O7fgA/h9bYAVrtwSRo/VxKfdw+wh6glkj6M0mlQuQQ==
+
+react-textarea-autosize@^8.5.3:
+ version "8.5.3"
+ resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz#d1e9fe760178413891484847d3378706052dd409"
+ integrity sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==
+ dependencies:
+ "@babel/runtime" "^7.20.13"
+ use-composed-ref "^1.3.0"
+ use-latest "^1.2.1"
+
+react@^18:
+ version "18.2.0"
+ resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
+ integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
+ dependencies:
+ loose-envify "^1.1.0"
+
+read-cache@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
+ integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
+ dependencies:
+ pify "^2.3.0"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+reflect.getprototypeof@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859"
+ integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.1"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.4"
+ globalthis "^1.0.3"
+ which-builtin-type "^1.1.3"
+
+regenerator-runtime@^0.14.0:
+ version "0.14.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
+ integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
+
+regexp.prototype.flags@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334"
+ integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==
+ dependencies:
+ call-bind "^1.0.6"
+ define-properties "^1.2.1"
+ es-errors "^1.3.0"
+ set-function-name "^2.0.1"
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve-pkg-maps@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
+ integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
+
+resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4:
+ version "1.22.8"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^2.0.0-next.5:
+ version "2.0.0-next.5"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c"
+ integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+retry@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
+ integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-array-concat@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb"
+ integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==
+ dependencies:
+ call-bind "^1.0.7"
+ get-intrinsic "^1.2.4"
+ has-symbols "^1.0.3"
+ isarray "^2.0.5"
+
+safe-regex-test@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377"
+ integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==
+ dependencies:
+ call-bind "^1.0.6"
+ es-errors "^1.3.0"
+ is-regex "^1.1.4"
+
+scheduler@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
+ integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
+ dependencies:
+ loose-envify "^1.1.0"
+
+semver@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.5.4:
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
+ integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
+ dependencies:
+ lru-cache "^6.0.0"
+
+set-function-length@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
+ integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
+ dependencies:
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.4"
+ gopd "^1.0.1"
+ has-property-descriptors "^1.0.2"
+
+set-function-name@^2.0.1, set-function-name@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985"
+ integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==
+ dependencies:
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
+ functions-have-names "^1.2.3"
+ has-property-descriptors "^1.0.2"
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+side-channel@^1.0.4, side-channel@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
+ integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
+ dependencies:
+ call-bind "^1.0.7"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.4"
+ object-inspect "^1.13.1"
+
+signal-exit@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+sonner@^1.4.41:
+ version "1.4.41"
+ resolved "https://registry.yarnpkg.com/sonner/-/sonner-1.4.41.tgz#ff085ae4f4244713daf294959beaa3e90f842d2c"
+ integrity sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ==
+
+source-map-js@^1.0.2, source-map-js@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
+ integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
+
+streamsearch@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
+ integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
+
+"string-width-cjs@npm:string-width@^4.2.0":
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^4.1.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+ integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+ dependencies:
+ eastasianwidth "^0.2.0"
+ emoji-regex "^9.2.2"
+ strip-ansi "^7.0.1"
+
+string.prototype.matchall@^4.0.10:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a"
+ integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ get-intrinsic "^1.2.4"
+ gopd "^1.0.1"
+ has-symbols "^1.0.3"
+ internal-slot "^1.0.7"
+ regexp.prototype.flags "^1.5.2"
+ set-function-name "^2.0.2"
+ side-channel "^1.0.6"
+
+string.prototype.trim@^1.2.9:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4"
+ integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.0"
+ es-object-atoms "^1.0.0"
+
+string.prototype.trimend@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229"
+ integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+string.prototype.trimstart@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde"
+ integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
+
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+styled-jsx@5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f"
+ integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==
+ dependencies:
+ client-only "0.0.1"
+
+sucrase@^3.32.0:
+ version "3.35.0"
+ resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
+ integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.2"
+ commander "^4.0.0"
+ glob "^10.3.10"
+ lines-and-columns "^1.1.6"
+ mz "^2.7.0"
+ pirates "^4.0.1"
+ ts-interface-checker "^0.1.9"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+tabbable@^6.0.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
+ integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
+
+tailwind-merge@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.2.2.tgz#87341e7604f0e20499939e152cd2841f41f7a3df"
+ integrity sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==
+ dependencies:
+ "@babel/runtime" "^7.24.0"
+
+tailwindcss@^3.3.0:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.3.tgz#be48f5283df77dfced705451319a5dffb8621519"
+ integrity sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==
+ dependencies:
+ "@alloc/quick-lru" "^5.2.0"
+ arg "^5.0.2"
+ chokidar "^3.5.3"
+ didyoumean "^1.2.2"
+ dlv "^1.1.3"
+ fast-glob "^3.3.0"
+ glob-parent "^6.0.2"
+ is-glob "^4.0.3"
+ jiti "^1.21.0"
+ lilconfig "^2.1.0"
+ micromatch "^4.0.5"
+ normalize-path "^3.0.0"
+ object-hash "^3.0.0"
+ picocolors "^1.0.0"
+ postcss "^8.4.23"
+ postcss-import "^15.1.0"
+ postcss-js "^4.0.1"
+ postcss-load-config "^4.0.1"
+ postcss-nested "^6.0.1"
+ postcss-selector-parser "^6.0.11"
+ resolve "^1.22.2"
+ sucrase "^3.32.0"
+
+tapable@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
+ integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+ integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+ dependencies:
+ any-promise "^1.0.0"
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+ts-api-utils@^1.0.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
+ integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
+
+ts-interface-checker@^0.1.9:
+ version "0.1.13"
+ resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
+ integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
+
+tsconfig-paths@^3.15.0:
+ version "3.15.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4"
+ integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.2"
+ minimist "^1.2.6"
+ strip-bom "^3.0.0"
+
+tslib@^2.4.0, tslib@^2.8.0:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
+ integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+typed-array-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3"
+ integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==
+ dependencies:
+ call-bind "^1.0.7"
+ es-errors "^1.3.0"
+ is-typed-array "^1.1.13"
+
+typed-array-byte-length@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67"
+ integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==
+ dependencies:
+ call-bind "^1.0.7"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-proto "^1.0.3"
+ is-typed-array "^1.1.13"
+
+typed-array-byte-offset@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063"
+ integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==
+ dependencies:
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.7"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-proto "^1.0.3"
+ is-typed-array "^1.1.13"
+
+typed-array-length@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3"
+ integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==
+ dependencies:
+ call-bind "^1.0.7"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-proto "^1.0.3"
+ is-typed-array "^1.1.13"
+ possible-typed-array-names "^1.0.0"
+
+typescript@^5:
+ version "5.4.4"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952"
+ integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==
+
+unbox-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+ integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
+ dependencies:
+ call-bind "^1.0.2"
+ has-bigints "^1.0.2"
+ has-symbols "^1.0.3"
+ which-boxed-primitive "^1.0.2"
+
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
+update-browserslist-db@^1.0.13:
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
+ integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
+ dependencies:
+ escalade "^3.1.1"
+ picocolors "^1.0.0"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+use-composed-ref@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda"
+ integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==
+
+use-isomorphic-layout-effect@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb"
+ integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==
+
+use-latest@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2"
+ integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==
+ dependencies:
+ use-isomorphic-layout-effect "^1.1.1"
+
+util-deprecate@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+uuid@^9.0.0:
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
+ integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
+
+web-streams-polyfill@4.0.0-beta.3:
+ version "4.0.0-beta.3"
+ resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38"
+ integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==
+
+web-streams-polyfill@^3.2.1:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b"
+ integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==
+
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
+which-boxed-primitive@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+ integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+ dependencies:
+ is-bigint "^1.0.1"
+ is-boolean-object "^1.1.0"
+ is-number-object "^1.0.4"
+ is-string "^1.0.5"
+ is-symbol "^1.0.3"
+
+which-builtin-type@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b"
+ integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==
+ dependencies:
+ function.prototype.name "^1.1.5"
+ has-tostringtag "^1.0.0"
+ is-async-function "^2.0.0"
+ is-date-object "^1.0.5"
+ is-finalizationregistry "^1.0.2"
+ is-generator-function "^1.0.10"
+ is-regex "^1.1.4"
+ is-weakref "^1.0.2"
+ isarray "^2.0.5"
+ which-boxed-primitive "^1.0.2"
+ which-collection "^1.0.1"
+ which-typed-array "^1.1.9"
+
+which-collection@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0"
+ integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==
+ dependencies:
+ is-map "^2.0.3"
+ is-set "^2.0.3"
+ is-weakmap "^2.0.2"
+ is-weakset "^2.0.3"
+
+which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9:
+ version "1.1.15"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d"
+ integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==
+ dependencies:
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.7"
+ for-each "^0.3.3"
+ gopd "^1.0.1"
+ has-tostringtag "^1.0.2"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+ integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+ dependencies:
+ ansi-styles "^6.1.0"
+ string-width "^5.0.1"
+ strip-ansi "^7.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yaml@^2.2.1, yaml@^2.3.4:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed"
+ integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==
+
+yet-another-react-lightbox@^3.17.2:
+ version "3.17.2"
+ resolved "https://registry.yarnpkg.com/yet-another-react-lightbox/-/yet-another-react-lightbox-3.17.2.tgz#00474b83189ec4d81302792211ca31ffb808554c"
+ integrity sha512-fM+Br5nR2kt/oBAOHDqVdUmogiHRLCt4iuIJHPS9Q+ME+h+ciME6vEpLt3IPgGU8whib1agEyZBgWJOAKjgadQ==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+zod-to-json-schema@^3.22.3, zod-to-json-schema@^3.22.5:
+ version "3.22.5"
+ resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.22.5.tgz#3646e81cfc318dbad2a22519e5ce661615418673"
+ integrity sha512-+akaPo6a0zpVCCseDed504KBJUQpEW5QZw7RMneNmKw+fGaML1Z9tUNLnHHAC8x6dzVRO1eB2oEMyZRnuBZg7Q==
+
+zod@^3.22.3, zod@^3.22.4:
+ version "3.22.4"
+ resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff"
+ integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==
diff --git a/yarn.lock b/yarn.lock
index 8a6859a..5764b3c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,43 +2,47 @@
# yarn lockfile v1
-"@aashutoshrathi/word-wrap@^1.2.3":
- version "1.2.6"
- resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
- integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
-
-"@alloc/quick-lru@^5.2.0":
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
- integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
-
-"@anthropic-ai/sdk@^0.56.0":
- version "0.56.0"
- resolved "https://registry.yarnpkg.com/@anthropic-ai/sdk/-/sdk-0.56.0.tgz#8b6366d5d22235c3ec978c05b2c9420fdf426ed9"
- integrity sha512-SLCB8M8+VMg1cpCucnA1XWHGWqVSZtIWzmOdDOEu3eTFZMB+A0sGZ1ESO5MHDnqrNTXz3safMrWx9x4rMZSOqA==
-
-"@babel/runtime@^7.12.5", "@babel/runtime@^7.26.7":
- version "7.27.3"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.3.tgz#10491113799fb8d77e1d9273384d5d68deeea8f6"
- integrity sha512-7EYtGezsdiDMyY80+65EzwiGmcJqpmcZCojSXaRgdrBaGtWTgDZKq69cPIVped6MkIM78cTQ2GOiEYjwOlG4xw==
-
-"@babel/runtime@^7.20.13", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.0":
- version "7.24.4"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd"
- integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==
+"@anthropic-ai/sdk@^0.22.0":
+ version "0.22.0"
+ resolved "https://registry.yarnpkg.com/@anthropic-ai/sdk/-/sdk-0.22.0.tgz#548e4218d9810fd494e595d4e57cb2d46d301a1a"
+ integrity sha512-dv4BCC6FZJw3w66WNLsHlUFjhu19fS1L/5jMPApwhZLa/Oy1j0A2i3RypmDtHEPp4Wwg3aZkSHksp7VzYWjzmw==
dependencies:
- regenerator-runtime "^0.14.0"
+ "@types/node" "^18.11.18"
+ "@types/node-fetch" "^2.6.4"
+ abort-controller "^3.0.0"
+ agentkeepalive "^4.2.1"
+ form-data-encoder "1.7.2"
+ formdata-node "^4.3.2"
+ node-fetch "^2.6.7"
+ web-streams-polyfill "^3.2.1"
-"@cfworker/json-schema@^4.0.2":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@cfworker/json-schema/-/json-schema-4.1.1.tgz#4a2a3947ee9fa7b7c24be981422831b8674c3be6"
- integrity sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==
+"@anthropic-ai/sdk@^0.9.1":
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/@anthropic-ai/sdk/-/sdk-0.9.1.tgz#b2d2b7bf05c90dce502c9a2e869066870f69ba88"
+ integrity sha512-wa1meQ2WSfoY8Uor3EdrJq0jTiZJoKoSii2ZVWRY1oN4Tlr5s59pADg9T79FTbPe1/se5c3pBeZgJL63wmuoBA==
+ dependencies:
+ "@types/node" "^18.11.18"
+ "@types/node-fetch" "^2.6.4"
+ abort-controller "^3.0.0"
+ agentkeepalive "^4.2.1"
+ digest-fetch "^1.3.0"
+ form-data-encoder "1.7.2"
+ formdata-node "^4.3.2"
+ node-fetch "^2.6.7"
+ web-streams-polyfill "^3.2.1"
"@colors/colors@1.6.0", "@colors/colors@^1.6.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0"
integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==
+"@cspotcode/source-map-support@^0.8.0":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
+ integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
+ dependencies:
+ "@jridgewell/trace-mapping" "0.3.9"
+
"@dabh/diagnostics@^2.0.2":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a"
@@ -48,18 +52,6 @@
enabled "2.0.x"
kuler "^2.0.0"
-"@drizzle-team/brocli@^0.10.2":
- version "0.10.2"
- resolved "https://registry.yarnpkg.com/@drizzle-team/brocli/-/brocli-0.10.2.tgz#9757c006a43daaa6f45512e6cf5fabed36fb9da7"
- integrity sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==
-
-"@emnapi/runtime@^1.2.0":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60"
- integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==
- dependencies:
- tslib "^2.4.0"
-
"@esbuild-kit/core-utils@^3.3.2":
version "3.3.2"
resolved "https://registry.yarnpkg.com/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz#186b6598a5066f0413471d7c4d45828e399ba96c"
@@ -301,480 +293,199 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae"
integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==
-"@eslint-community/eslint-utils@^4.2.0":
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
- integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
- dependencies:
- eslint-visitor-keys "^3.3.0"
-
-"@eslint-community/regexpp@^4.6.1":
- version "4.10.0"
- resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
- integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
-
-"@eslint/eslintrc@^2.1.4":
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
- integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
- dependencies:
- ajv "^6.12.4"
- debug "^4.3.2"
- espree "^9.6.0"
- globals "^13.19.0"
- ignore "^5.2.0"
- import-fresh "^3.2.1"
- js-yaml "^4.1.0"
- minimatch "^3.1.2"
- strip-json-comments "^3.1.1"
-
-"@eslint/js@8.57.0":
- version "8.57.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
- integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
-
-"@floating-ui/core@^1.6.0":
- version "1.6.8"
- resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12"
- integrity sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==
- dependencies:
- "@floating-ui/utils" "^0.2.8"
-
-"@floating-ui/dom@^1.0.0":
- version "1.6.12"
- resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.12.tgz#6333dcb5a8ead3b2bf82f33d6bc410e95f54e556"
- integrity sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==
- dependencies:
- "@floating-ui/core" "^1.6.0"
- "@floating-ui/utils" "^0.2.8"
-
-"@floating-ui/react-dom@^2.1.2":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31"
- integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==
- dependencies:
- "@floating-ui/dom" "^1.0.0"
-
-"@floating-ui/react@^0.26.16":
- version "0.26.28"
- resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.28.tgz#93f44ebaeb02409312e9df9507e83aab4a8c0dc7"
- integrity sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==
- dependencies:
- "@floating-ui/react-dom" "^2.1.2"
- "@floating-ui/utils" "^0.2.8"
- tabbable "^6.0.0"
-
-"@floating-ui/utils@^0.2.8":
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62"
- integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==
-
-"@google/generative-ai@^0.24.0":
- version "0.24.1"
- resolved "https://registry.yarnpkg.com/@google/generative-ai/-/generative-ai-0.24.1.tgz#634a3c06f8ea7a6125c1b0d6c1e66bb11afb52c9"
- integrity sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==
-
-"@graphql-typed-document-node/core@^3.2.0":
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861"
- integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==
-
-"@grpc/grpc-js@^1.13.1":
- version "1.13.4"
- resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.13.4.tgz#922fbc496e229c5fa66802d2369bf181c1df1c5a"
- integrity sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==
- dependencies:
- "@grpc/proto-loader" "^0.7.13"
- "@js-sdsl/ordered-map" "^4.4.2"
-
-"@grpc/proto-loader@^0.7.13":
- version "0.7.15"
- resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.15.tgz#4cdfbf35a35461fc843abe8b9e2c0770b5095e60"
- integrity sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==
- dependencies:
- lodash.camelcase "^4.3.0"
- long "^5.0.0"
- protobufjs "^7.2.5"
- yargs "^17.7.2"
-
-"@headlessui/react@^2.2.0":
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-2.2.0.tgz#a8e32f0899862849a1ce1615fa280e7891431ab7"
- integrity sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==
- dependencies:
- "@floating-ui/react" "^0.26.16"
- "@react-aria/focus" "^3.17.1"
- "@react-aria/interactions" "^3.21.3"
- "@tanstack/react-virtual" "^3.8.1"
+"@google/generative-ai@^0.7.0":
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/@google/generative-ai/-/generative-ai-0.7.1.tgz#eb187c75080c0706245699dbc06816c830d8c6a7"
+ integrity sha512-WTjMLLYL/xfA5BW6xAycRPiAX7FNHKAxrid/ayqC1QMam0KAK0NbMeS9Lubw80gVg5xFMLE+H7pw4wdNzTOlxw==
"@huggingface/jinja@^0.2.2":
version "0.2.2"
resolved "https://registry.yarnpkg.com/@huggingface/jinja/-/jinja-0.2.2.tgz#faeb205a9d6995089bef52655ddd8245d3190627"
integrity sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==
-"@humanwhocodes/config-array@^0.11.14":
- version "0.11.14"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
- integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
- dependencies:
- "@humanwhocodes/object-schema" "^2.0.2"
- debug "^4.3.1"
- minimatch "^3.0.5"
-
-"@humanwhocodes/module-importer@^1.0.1":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
- integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
-
-"@humanwhocodes/object-schema@^2.0.2":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
- integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
-
"@iarna/toml@^2.2.5":
version "2.2.5"
resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c"
integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==
-"@icons-pack/react-simple-icons@^12.3.0":
- version "12.3.0"
- resolved "https://registry.yarnpkg.com/@icons-pack/react-simple-icons/-/react-simple-icons-12.3.0.tgz#2089c8226842611d751fc86fa93fea053076db77"
- integrity sha512-71KKdd2tg36Pctg5pQTAmPRIdFrtxsLccoSexkZLztn46eV6Ek6ov69o0Ph4t4ZPs6n4+Fw4sBnIzEsKssnXxg==
-
-"@img/sharp-darwin-arm64@0.33.5":
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08"
- integrity sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==
- optionalDependencies:
- "@img/sharp-libvips-darwin-arm64" "1.0.4"
-
-"@img/sharp-darwin-x64@0.33.5":
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz#e03d3451cd9e664faa72948cc70a403ea4063d61"
- integrity sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==
- optionalDependencies:
- "@img/sharp-libvips-darwin-x64" "1.0.4"
-
-"@img/sharp-libvips-darwin-arm64@1.0.4":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz#447c5026700c01a993c7804eb8af5f6e9868c07f"
- integrity sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==
-
-"@img/sharp-libvips-darwin-x64@1.0.4":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz#e0456f8f7c623f9dbfbdc77383caa72281d86062"
- integrity sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==
-
-"@img/sharp-libvips-linux-arm64@1.0.4":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz#979b1c66c9a91f7ff2893556ef267f90ebe51704"
- integrity sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==
-
-"@img/sharp-libvips-linux-arm@1.0.5":
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz#99f922d4e15216ec205dcb6891b721bfd2884197"
- integrity sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==
-
-"@img/sharp-libvips-linux-s390x@1.0.4":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz#f8a5eb1f374a082f72b3f45e2fb25b8118a8a5ce"
- integrity sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==
-
-"@img/sharp-libvips-linux-x64@1.0.4":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz#d4c4619cdd157774906e15770ee119931c7ef5e0"
- integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==
-
-"@img/sharp-libvips-linuxmusl-arm64@1.0.4":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz#166778da0f48dd2bded1fa3033cee6b588f0d5d5"
- integrity sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==
-
-"@img/sharp-libvips-linuxmusl-x64@1.0.4":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz#93794e4d7720b077fcad3e02982f2f1c246751ff"
- integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==
-
-"@img/sharp-linux-arm64@0.33.5":
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz#edb0697e7a8279c9fc829a60fc35644c4839bb22"
- integrity sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==
- optionalDependencies:
- "@img/sharp-libvips-linux-arm64" "1.0.4"
-
-"@img/sharp-linux-arm@0.33.5":
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz#422c1a352e7b5832842577dc51602bcd5b6f5eff"
- integrity sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==
- optionalDependencies:
- "@img/sharp-libvips-linux-arm" "1.0.5"
-
-"@img/sharp-linux-s390x@0.33.5":
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz#f5c077926b48e97e4a04d004dfaf175972059667"
- integrity sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==
- optionalDependencies:
- "@img/sharp-libvips-linux-s390x" "1.0.4"
-
-"@img/sharp-linux-x64@0.33.5":
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz#d806e0afd71ae6775cc87f0da8f2d03a7c2209cb"
- integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==
- optionalDependencies:
- "@img/sharp-libvips-linux-x64" "1.0.4"
-
-"@img/sharp-linuxmusl-arm64@0.33.5":
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz#252975b915894fb315af5deea174651e208d3d6b"
- integrity sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==
- optionalDependencies:
- "@img/sharp-libvips-linuxmusl-arm64" "1.0.4"
-
-"@img/sharp-linuxmusl-x64@0.33.5":
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz#3f4609ac5d8ef8ec7dadee80b560961a60fd4f48"
- integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==
- optionalDependencies:
- "@img/sharp-libvips-linuxmusl-x64" "1.0.4"
-
-"@img/sharp-wasm32@0.33.5":
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz#6f44f3283069d935bb5ca5813153572f3e6f61a1"
- integrity sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==
- dependencies:
- "@emnapi/runtime" "^1.2.0"
-
-"@img/sharp-win32-ia32@0.33.5":
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz#1a0c839a40c5351e9885628c85f2e5dfd02b52a9"
- integrity sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==
-
-"@img/sharp-win32-x64@0.33.5":
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz#56f00962ff0c4e0eb93d34a047d29fa995e3e342"
- integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==
-
-"@isaacs/cliui@^8.0.2":
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
- integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
- dependencies:
- string-width "^5.1.2"
- string-width-cjs "npm:string-width@^4.2.0"
- strip-ansi "^7.0.1"
- strip-ansi-cjs "npm:strip-ansi@^6.0.1"
- wrap-ansi "^8.1.0"
- wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
-
-"@jridgewell/gen-mapping@^0.3.2":
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
- integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
- dependencies:
- "@jridgewell/set-array" "^1.2.1"
- "@jridgewell/sourcemap-codec" "^1.4.10"
- "@jridgewell/trace-mapping" "^0.3.24"
-
-"@jridgewell/resolve-uri@^3.1.0":
+"@jridgewell/resolve-uri@^3.0.3":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
-"@jridgewell/set-array@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
- integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
-
-"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+"@jridgewell/sourcemap-codec@^1.4.10":
version "1.4.15"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
-"@jridgewell/trace-mapping@^0.3.24":
- version "0.3.25"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
- integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+"@jridgewell/trace-mapping@0.3.9":
+ version "0.3.9"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
+ integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
dependencies:
- "@jridgewell/resolve-uri" "^3.1.0"
- "@jridgewell/sourcemap-codec" "^1.4.14"
+ "@jridgewell/resolve-uri" "^3.0.3"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
-"@js-sdsl/ordered-map@^4.4.2":
- version "4.4.2"
- resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c"
- integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==
-
-"@langchain/anthropic@^0.3.24":
- version "0.3.24"
- resolved "https://registry.yarnpkg.com/@langchain/anthropic/-/anthropic-0.3.24.tgz#bc64ccab419fa61f0e3a1abb733046cc12bfadb4"
- integrity sha512-Gi1TwXu5vkCxUMToiXaiwTTWq9v3WMyU3ldB/VEWjzbkr3nKF5kcp+HLqhvV7WWOFVTTNgG+pzfq8JALecq5MA==
+"@langchain/anthropic@^0.2.3":
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@langchain/anthropic/-/anthropic-0.2.3.tgz#1505da939f47c90e53dfede0407c497b8177bdf0"
+ integrity sha512-f2fqzLGcvsXXUyZ1vl8cgwkKDGLshOGrPuR9hkhGuBG5m91eq755OqPBxWJuS1TFtNU813cXft3xh0MQbxavwg==
dependencies:
- "@anthropic-ai/sdk" "^0.56.0"
- fast-xml-parser "^4.4.1"
+ "@anthropic-ai/sdk" "^0.22.0"
+ "@langchain/core" ">=0.2.9 <0.3.0"
+ fast-xml-parser "^4.3.5"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.4"
-"@langchain/community@^0.3.49":
- version "0.3.49"
- resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.3.49.tgz#9e67791c686cfbd378439afb7044cec571dca0f4"
- integrity sha512-1AAo9mvr1FmqYHUpXhYI8P4NBPC4t9TfUAuvefEImrtb3gZ60fPelVu17ljWlKJcHC1hPSHYpPJWm0Yx7yRvrw==
+"@langchain/community@^0.2.16":
+ version "0.2.16"
+ resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.2.16.tgz#5888baf7fc7ea272c5f91aaa0e71bc444167262d"
+ integrity sha512-dFDcMabKACvuRd0w6EIRLWf1ubPGZEeEwFt9v1jiEr4HCFxH0OF+iM1QUCcVRbB2fK5lqmKeTD1XAeZV8+AyXA==
dependencies:
- "@langchain/openai" ">=0.2.0 <0.7.0"
- "@langchain/weaviate" "^0.2.0"
+ "@langchain/core" "~0.2.11"
+ "@langchain/openai" "~0.1.0"
binary-extensions "^2.2.0"
expr-eval "^2.0.2"
flat "^5.0.2"
js-yaml "^4.1.0"
- langchain ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0"
- langsmith "^0.3.33"
- uuid "^10.0.0"
- zod "^3.25.32"
+ langchain "0.2.3"
+ langsmith "~0.1.30"
+ uuid "^9.0.0"
+ zod "^3.22.3"
+ zod-to-json-schema "^3.22.5"
-"@langchain/core@^0.3.66":
- version "0.3.66"
- resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.3.66.tgz#cd20687f29a07148436cd8b72b88c66d076c500c"
- integrity sha512-d3SgSDOlgOjdIbReIXVQl9HaQzKqO/5+E+o3kJwoKXLGP9dxi7+lMyaII7yv7G8/aUxMWLwFES9zc1jFoeJEZw==
+"@langchain/community@~0.0.41":
+ version "0.0.43"
+ resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.0.43.tgz#017e2f9b3209b3999482f10df5aec2520731a63c"
+ integrity sha512-60TjV3knGGOPHfbJxLpuwARr8oA0r6Txm8wTFvFx+TjRUrloyBUcWSbJIdm62gAwBJDEHmdjjyWOOzU+eewcuA==
+ dependencies:
+ "@langchain/core" "~0.1.44"
+ "@langchain/openai" "~0.0.19"
+ expr-eval "^2.0.2"
+ flat "^5.0.2"
+ langsmith "~0.1.1"
+ uuid "^9.0.0"
+ zod "^3.22.3"
+
+"@langchain/core@>0.1.56 <0.3.0", "@langchain/core@>0.2.0 <0.3.0", "@langchain/core@>=0.2.5 <0.3.0", "@langchain/core@~0.2.0", "@langchain/core@~0.2.11":
+ version "0.2.11"
+ resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.11.tgz#5f47467e20e56b250831baef20083657c6facb4c"
+ integrity sha512-d4SNL7WI0c3oHrV4WxCRH1/TNqdePXEzYjYwIb4aEH6lW1aM0utGhLbNthX+aYkOL4Ynx2FoG4h91ECIipiKWQ==
dependencies:
- "@cfworker/json-schema" "^4.0.2"
ansi-styles "^5.0.0"
camelcase "6"
decamelize "1.2.0"
js-tiktoken "^1.0.12"
- langsmith "^0.3.46"
+ langsmith "~0.1.30"
+ ml-distance "^4.0.0"
+ mustache "^4.2.0"
+ p-queue "^6.6.2"
+ p-retry "4"
+ uuid "^9.0.0"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
+
+"@langchain/core@>=0.2.16 <0.3.0":
+ version "0.2.36"
+ resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.36.tgz#75754c33aa5b9310dcf117047374a1ae011005a4"
+ integrity sha512-qHLvScqERDeH7y2cLuJaSAlMwg3f/3Oc9nayRSXRU2UuaK/SOhI42cxiPLj1FnuHJSmN0rBQFkrLx02gI4mcVg==
+ dependencies:
+ ansi-styles "^5.0.0"
+ camelcase "6"
+ decamelize "1.2.0"
+ js-tiktoken "^1.0.12"
+ langsmith "^0.1.56-rc.1"
mustache "^4.2.0"
p-queue "^6.6.2"
p-retry "4"
uuid "^10.0.0"
- zod "^3.25.32"
+ zod "^3.22.4"
zod-to-json-schema "^3.22.3"
-"@langchain/google-genai@^0.2.15":
+"@langchain/core@>=0.2.9 <0.3.0":
version "0.2.15"
- resolved "https://registry.yarnpkg.com/@langchain/google-genai/-/google-genai-0.2.15.tgz#bf8c7f14ee5a0c16aaafc71f902ad8619e8089f2"
- integrity sha512-fAD3xjzd5TxWQCKlttNeEc+b5tUX43hBqKH3rk3g+wbl1ToLqe3ocWawKRmGotEuI5jhDVmoHjDxoNMifFDgmg==
+ resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.15.tgz#1bb99ac4fffe935c7ba37edcaa91abfba3c82219"
+ integrity sha512-L096itIBQ5XNsy5BCCPqIQEk/x4rzI+U4BhYT+fDBYtljESshIi/WzXdmiGfY/6MpVjB76jNuaRgMDmo1m9NeQ==
dependencies:
- "@google/generative-ai" "^0.24.0"
- uuid "^11.1.0"
-
-"@langchain/groq@^0.2.3":
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/@langchain/groq/-/groq-0.2.3.tgz#3bfcbfc827cf469df3a1b5bb9799f4b0212b4625"
- integrity sha512-r+yjysG36a0IZxTlCMr655Feumfb4IrOyA0jLLq4l7gEhVyMpYXMwyE6evseyU2LRP+7qOPbGRVpGqAIK0MsUA==
- dependencies:
- groq-sdk "^0.19.0"
+ ansi-styles "^5.0.0"
+ camelcase "6"
+ decamelize "1.2.0"
+ js-tiktoken "^1.0.12"
+ langsmith "~0.1.30"
+ ml-distance "^4.0.0"
+ mustache "^4.2.0"
+ p-queue "^6.6.2"
+ p-retry "4"
+ uuid "^10.0.0"
zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
-"@langchain/ollama@^0.2.3":
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/@langchain/ollama/-/ollama-0.2.3.tgz#4868e66db4fc480f08c42fc652274abbab0416f0"
- integrity sha512-1Obe45jgQspqLMBVlayQbGdywFmri8DgmGRdzNu0li56cG5RReYlRCFVDZBRMMvF9JhsP5eXRyfyivtKfITHWQ==
+"@langchain/core@~0.1.44", "@langchain/core@~0.1.45":
+ version "0.1.52"
+ resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.1.52.tgz#7619310b83ffa841628efe2e1eda873ca714d068"
+ integrity sha512-AEyP99r7jijF33pyzaWtqCkiO9crotgethqq7jznAGlIojMCL9BT/id2DjVyN32SGFTpet273kkjsmEdFSHqpA==
dependencies:
- ollama "^0.5.12"
- uuid "^10.0.0"
+ ansi-styles "^5.0.0"
+ camelcase "6"
+ decamelize "1.2.0"
+ js-tiktoken "^1.0.8"
+ langsmith "~0.1.7"
+ ml-distance "^4.0.0"
+ p-queue "^6.6.2"
+ p-retry "4"
+ uuid "^9.0.0"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
-"@langchain/openai@>=0.1.0 <0.7.0", "@langchain/openai@>=0.2.0 <0.7.0", "@langchain/openai@^0.6.2":
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.6.2.tgz#fb68fa7305ef419e772a56c29146810c0923513d"
- integrity sha512-OjdSfGENdz4tR9TPN4KTat7vJIE6cgt7vT0z69qU1J1aHCs9MyNwqdaQFF++LVlZAae9aTpyCyqeODyge42oKw==
+"@langchain/google-genai@^0.0.23":
+ version "0.0.23"
+ resolved "https://registry.yarnpkg.com/@langchain/google-genai/-/google-genai-0.0.23.tgz#e73af501bc1df4c7642b531759b82dc3eb7ae459"
+ integrity sha512-MTSCJEoKsfU1inz0PWvAjITdNFM4s41uvBCwLpcgx3jWJIEisczFD82x86ahYqJlb2fD6tohYSaCH/4tKAdkXA==
dependencies:
+ "@google/generative-ai" "^0.7.0"
+ "@langchain/core" ">=0.2.16 <0.3.0"
+ zod-to-json-schema "^3.22.4"
+
+"@langchain/openai@^0.0.25", "@langchain/openai@~0.0.19":
+ version "0.0.25"
+ resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.25.tgz#8332abea1e3acb9b1169f90636e518c0ee90622e"
+ integrity sha512-cD9xPDDXK2Cjs6yYg27BpdzBnQZvBb1yaNgMoGLWIT27UQVRyT96PLC1OVMQOmMmHaKDBCj/1bW4GQQgX7+d2Q==
+ dependencies:
+ "@langchain/core" "~0.1.45"
+ js-tiktoken "^1.0.7"
+ openai "^4.26.0"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
+
+"@langchain/openai@~0.0.28":
+ version "0.0.34"
+ resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.34.tgz#36c9bca0721ab9f7e5d40927e7c0429cacbd5b56"
+ integrity sha512-M+CW4oXle5fdoz2T2SwdOef8pl3/1XmUx1vjn2mXUVM/128aO0l23FMF0SNBsAbRV6P+p/TuzjodchJbi0Ht/A==
+ dependencies:
+ "@langchain/core" ">0.1.56 <0.3.0"
js-tiktoken "^1.0.12"
- openai "^5.3.0"
- zod "^3.25.32"
+ openai "^4.41.1"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
-"@langchain/textsplitters@>=0.0.0 <0.2.0", "@langchain/textsplitters@^0.1.0":
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/@langchain/textsplitters/-/textsplitters-0.1.0.tgz#f37620992192df09ecda3dfbd545b36a6bcbae46"
- integrity sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==
+"@langchain/openai@~0.1.0":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.1.3.tgz#6eb0994e970d85ffa9aaeafb94449024ccf6ca63"
+ integrity sha512-riv/JC9x2A8b7GcHu8sx+mlZJ8KAwSSi231IPTlcciYnKozmrQ5H0vrtiD31fxiDbaRsk7tyCpkSBIOQEo7CyQ==
dependencies:
+ "@langchain/core" ">=0.2.5 <0.3.0"
js-tiktoken "^1.0.12"
+ openai "^4.49.1"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
-"@langchain/weaviate@^0.2.0":
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/@langchain/weaviate/-/weaviate-0.2.1.tgz#51ad20cf6d40e63d6149e5d01f91597cdff66744"
- integrity sha512-rlfAKF+GB0A5MUrol34oDrBkl4q6AefARk9KDW+LfzhV/74pZZLZyIPYPxvE4XwI3gvpwp024DNsDxK/4UW0/g==
+"@langchain/textsplitters@~0.0.0":
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/@langchain/textsplitters/-/textsplitters-0.0.3.tgz#1a3cc93dd2ab330edb225400ded190a22fea14e3"
+ integrity sha512-cXWgKE3sdWLSqAa8ykbCcUsUF1Kyr5J3HOWYGuobhPEycXW4WI++d5DhzdpL238mzoEXTi90VqfSCra37l5YqA==
dependencies:
- uuid "^10.0.0"
- weaviate-client "^3.5.2"
-
-"@next/env@15.2.2":
- version "15.2.2"
- resolved "https://registry.yarnpkg.com/@next/env/-/env-15.2.2.tgz#6345352365a811c523cecf284874ff489b675e59"
- integrity sha512-yWgopCfA9XDR8ZH3taB5nRKtKJ1Q5fYsTOuYkzIIoS8TJ0UAUKAGF73JnGszbjk2ufAQDj6mDdgsJAFx5CLtYQ==
-
-"@next/eslint-plugin-next@14.1.4":
- version "14.1.4"
- resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.4.tgz#d7372b5ffede0e466af8af2ff534386418827fc8"
- integrity sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==
- dependencies:
- glob "10.3.10"
-
-"@next/swc-darwin-arm64@15.2.2":
- version "15.2.2"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.2.tgz#d3131279d4815ed7604eba7bf0063e0b8bfd2135"
- integrity sha512-HNBRnz+bkZ+KfyOExpUxTMR0Ow8nkkcE6IlsdEa9W/rI7gefud19+Sn1xYKwB9pdCdxIP1lPru/ZfjfA+iT8pw==
-
-"@next/swc-darwin-x64@15.2.2":
- version "15.2.2"
- resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.2.tgz#8562f6b51177aa30f3a6e95a8b3e0e176a6cb04f"
- integrity sha512-mJOUwp7al63tDpLpEFpKwwg5jwvtL1lhRW2fI1Aog0nYCPAhxbJsaZKdoVyPZCy8MYf/iQVNDuk/+i29iLCzIA==
-
-"@next/swc-linux-arm64-gnu@15.2.2":
- version "15.2.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.2.tgz#c2466cffc541f39ae4d435087c81f5899d401903"
- integrity sha512-5ZZ0Zwy3SgMr7MfWtRE7cQWVssfOvxYfD9O7XHM7KM4nrf5EOeqwq67ZXDgo86LVmffgsu5tPO57EeFKRnrfSQ==
-
-"@next/swc-linux-arm64-musl@15.2.2":
- version "15.2.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.2.tgz#24ed87fe47325597e986bd01c427efae53d6b677"
- integrity sha512-cgKWBuFMLlJ4TWcFHl1KOaVVUAF8vy4qEvX5KsNd0Yj5mhu989QFCq1WjuaEbv/tO1ZpsQI6h/0YR8bLwEi+nA==
-
-"@next/swc-linux-x64-gnu@15.2.2":
- version "15.2.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.2.tgz#0240f44530ca39c1fc899fabe8f33aa35d7e77da"
- integrity sha512-c3kWSOSsVL8rcNBBfOq1+/j2PKs2nsMwJUV4icUxRgGBwUOfppeh7YhN5s79enBQFU+8xRgVatFkhHU1QW7yUA==
-
-"@next/swc-linux-x64-musl@15.2.2":
- version "15.2.2"
- resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.2.tgz#cca6ce8e9ec89afaa618673f0f8658682c30ff56"
- integrity sha512-PXTW9PLTxdNlVYgPJ0equojcq1kNu5NtwcNjRjHAB+/sdoKZ+X8FBu70fdJFadkxFIGekQTyRvPMFF+SOJaQjw==
-
-"@next/swc-win32-arm64-msvc@15.2.2":
- version "15.2.2"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.2.tgz#08f621602ed53fa21ddf6f656160b9186860be15"
- integrity sha512-nG644Es5llSGEcTaXhnGWR/aThM/hIaz0jx4MDg4gWC8GfTCp8eDBWZ77CVuv2ha/uL9Ce+nPTfYkSLG67/sHg==
-
-"@next/swc-win32-x64-msvc@15.2.2":
- version "15.2.2"
- resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.2.tgz#2072d69374f8c944134a5c5a80ce03ff84254cfa"
- integrity sha512-52nWy65S/R6/kejz3jpvHAjZDPKIbEQu4x9jDBzmB9jJfuOy5rspjKu4u77+fI4M/WzLXrrQd57hlFGzz1ubcQ==
-
-"@nodelib/fs.scandir@2.1.5":
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
- integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
- dependencies:
- "@nodelib/fs.stat" "2.0.5"
- run-parallel "^1.1.9"
-
-"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
- integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
-
-"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
- integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
- dependencies:
- "@nodelib/fs.scandir" "2.1.5"
- fastq "^1.6.0"
-
-"@petamoriken/float16@^3.8.7":
- version "3.9.2"
- resolved "https://registry.yarnpkg.com/@petamoriken/float16/-/float16-3.9.2.tgz#217a5d349f3655b8e286be447e0ed1eae063a78f"
- integrity sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog==
-
-"@pkgjs/parseargs@^0.11.0":
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
- integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+ "@langchain/core" ">0.2.0 <0.3.0"
+ js-tiktoken "^1.0.12"
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
@@ -829,62 +540,6 @@
resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==
-"@react-aria/focus@^3.17.1":
- version "3.18.4"
- resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.18.4.tgz#a6e95896bc8680d1b5bcd855e983fc2c195a1a55"
- integrity sha512-91J35077w9UNaMK1cpMUEFRkNNz0uZjnSwiyBCFuRdaVuivO53wNC9XtWSDNDdcO5cGy87vfJRVAiyoCn/mjqA==
- dependencies:
- "@react-aria/interactions" "^3.22.4"
- "@react-aria/utils" "^3.25.3"
- "@react-types/shared" "^3.25.0"
- "@swc/helpers" "^0.5.0"
- clsx "^2.0.0"
-
-"@react-aria/interactions@^3.21.3", "@react-aria/interactions@^3.22.4":
- version "3.22.4"
- resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.22.4.tgz#88ed61ab6a485f869bc1f65ae6688d48ca96064b"
- integrity sha512-E0vsgtpItmknq/MJELqYJwib+YN18Qag8nroqwjk1qOnBa9ROIkUhWJerLi1qs5diXq9LHKehZDXRlwPvdEFww==
- dependencies:
- "@react-aria/ssr" "^3.9.6"
- "@react-aria/utils" "^3.25.3"
- "@react-types/shared" "^3.25.0"
- "@swc/helpers" "^0.5.0"
-
-"@react-aria/ssr@^3.9.6":
- version "3.9.6"
- resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.6.tgz#a9e8b351acdc8238f2b5215b0ce904636c6ea690"
- integrity sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA==
- dependencies:
- "@swc/helpers" "^0.5.0"
-
-"@react-aria/utils@^3.25.3":
- version "3.25.3"
- resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.25.3.tgz#cad9bffc07b045cdc283df2cb65c18747acbf76d"
- integrity sha512-PR5H/2vaD8fSq0H/UB9inNbc8KDcVmW6fYAfSWkkn+OAdhTTMVKqXXrZuZBWyFfSD5Ze7VN6acr4hrOQm2bmrA==
- dependencies:
- "@react-aria/ssr" "^3.9.6"
- "@react-stately/utils" "^3.10.4"
- "@react-types/shared" "^3.25.0"
- "@swc/helpers" "^0.5.0"
- clsx "^2.0.0"
-
-"@react-stately/utils@^3.10.4":
- version "3.10.4"
- resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.10.4.tgz#310663a834b67048d305e1680ed258130092fe51"
- integrity sha512-gBEQEIMRh5f60KCm7QKQ2WfvhB2gLUr9b72sqUdIZ2EG+xuPgaIlCBeSicvjmjBvYZwOjoOEnmIkcx2GHp/HWw==
- dependencies:
- "@swc/helpers" "^0.5.0"
-
-"@react-types/shared@^3.25.0":
- version "3.25.0"
- resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.25.0.tgz#7223baf72256e918a3c29081bb1ecc6fad4fbf58"
- integrity sha512-OZSyhzU6vTdW3eV/mz5i6hQwQUhkRs7xwY2d1aqPvTdMe0+2cY7Fwp45PAiwYLEj73i9ro2FxF9qC4DvHGSCgQ==
-
-"@rushstack/eslint-patch@^1.3.3":
- version "1.10.1"
- resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz#7ca168b6937818e9a74b47ac4e2112b2e1a024cf"
- integrity sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==
-
"@selderee/plugin-htmlparser2@^0.11.0":
version "0.11.0"
resolved "https://registry.yarnpkg.com/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz#d5b5e29a7ba6d3958a1972c7be16f4b2c188c517"
@@ -893,188 +548,222 @@
domhandler "^5.0.3"
selderee "^0.11.0"
-"@swc/counter@0.1.3":
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9"
- integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==
+"@tsconfig/node10@^1.0.7":
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2"
+ integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==
-"@swc/helpers@0.5.15", "@swc/helpers@^0.5.0":
- version "0.5.15"
- resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7"
- integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==
- dependencies:
- tslib "^2.8.0"
+"@tsconfig/node12@^1.0.7":
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
+ integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
-"@tailwindcss/typography@^0.5.12":
- version "0.5.12"
- resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.12.tgz#c0532fd594427b7f4e8e38eff7bf272c63a1dca4"
- integrity sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==
- dependencies:
- lodash.castarray "^4.4.0"
- lodash.isplainobject "^4.0.6"
- lodash.merge "^4.6.2"
- postcss-selector-parser "6.0.10"
+"@tsconfig/node14@^1.0.0":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
+ integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
-"@tanstack/react-virtual@^3.8.1":
- version "3.10.9"
- resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.10.9.tgz#40606b6dd8aba8e977f576d8f7df07f69ca63eea"
- integrity sha512-OXO2uBjFqA4Ibr2O3y0YMnkrRWGVNqcvHQXmGvMu6IK8chZl3PrDxFXdGZ2iZkSrKh3/qUYoFqYe+Rx23RoU0g==
- dependencies:
- "@tanstack/virtual-core" "3.10.9"
+"@tsconfig/node16@^1.0.2":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
+ integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
-"@tanstack/virtual-core@3.10.9":
- version "3.10.9"
- resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.10.9.tgz#55710c92b311fdaa8d8c66682a0dbdd684bc77c4"
- integrity sha512-kBknKOKzmeR7lN+vSadaKWXaLS0SZZG+oqpQ/k80Q6g9REn6zRHS/ZYdrIzHnpHgy/eWs00SujveUN/GJT2qTw==
-
-"@types/better-sqlite3@^7.6.12":
- version "7.6.12"
- resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-7.6.12.tgz#e5712d46d71097dcc2775c0b068072eadc15deb7"
- integrity sha512-fnQmj8lELIj7BSrZQAdBMHEHX8OZLYIHXqAKT1O7tDfLxaINzf00PMjw22r3N/xXh0w/sGHlO6SVaCQ2mj78lg==
+"@types/better-sqlite3@^7.6.10":
+ version "7.6.10"
+ resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-7.6.10.tgz#1818e56490953404acfd44cdde0464f201be6105"
+ integrity sha512-TZBjD+yOsyrUJGmcUj6OS3JADk3+UZcNv3NOBqGkM09bZdi28fNZw8ODqbMOLfKCu7RYCO62/ldq1iHbzxqoPw==
dependencies:
"@types/node" "*"
+"@types/body-parser@*":
+ version "1.19.5"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4"
+ integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==
+ dependencies:
+ "@types/connect" "*"
+ "@types/node" "*"
+
+"@types/connect@*":
+ version "3.4.38"
+ resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858"
+ integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==
+ dependencies:
+ "@types/node" "*"
+
+"@types/cors@^2.8.17":
+ version "2.8.17"
+ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b"
+ integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==
+ dependencies:
+ "@types/node" "*"
+
+"@types/express-serve-static-core@^4.17.33":
+ version "4.17.43"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54"
+ integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==
+ dependencies:
+ "@types/node" "*"
+ "@types/qs" "*"
+ "@types/range-parser" "*"
+ "@types/send" "*"
+
+"@types/express-serve-static-core@^5.0.0":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz#3c9997ae9d00bc236e45c6374e84f2596458d9db"
+ integrity sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==
+ dependencies:
+ "@types/node" "*"
+ "@types/qs" "*"
+ "@types/range-parser" "*"
+ "@types/send" "*"
+
+"@types/express@*":
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.0.tgz#13a7d1f75295e90d19ed6e74cab3678488eaa96c"
+ integrity sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==
+ dependencies:
+ "@types/body-parser" "*"
+ "@types/express-serve-static-core" "^5.0.0"
+ "@types/qs" "*"
+ "@types/serve-static" "*"
+
+"@types/express@^4.17.21":
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d"
+ integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==
+ dependencies:
+ "@types/body-parser" "*"
+ "@types/express-serve-static-core" "^4.17.33"
+ "@types/qs" "*"
+ "@types/serve-static" "*"
+
"@types/html-to-text@^9.0.4":
version "9.0.4"
resolved "https://registry.yarnpkg.com/@types/html-to-text/-/html-to-text-9.0.4.tgz#4a83dd8ae8bfa91457d0b1ffc26f4d0537eff58c"
integrity sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==
-"@types/json5@^0.0.29":
- version "0.0.29"
- resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
- integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
-
-"@types/jspdf@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@types/jspdf/-/jspdf-2.0.0.tgz#c64d63e9248a62849902085c1cd4753b33f8ee0c"
- integrity sha512-oonYDXI4GegGaG7FFVtriJ+Yqlh4YR3L3NVDiwCEBVG7sbya19SoGx4MW4kg1MCMRPgkbbFTck8YKJL8PrkDfA==
- dependencies:
- jspdf "*"
+"@types/http-errors@*":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
+ integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==
"@types/long@^4.0.1":
version "4.0.2"
resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a"
integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==
-"@types/node@*", "@types/node@^20":
- version "20.12.5"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.5.tgz#74c4f31ab17955d0b5808cdc8fd2839526ad00b3"
- integrity sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw==
+"@types/mime@^1":
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
+ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
+
+"@types/multer@^1.4.12":
+ version "1.4.12"
+ resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.12.tgz#da67bd0c809f3a63fe097c458c0d4af1fea50ab7"
+ integrity sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==
+ dependencies:
+ "@types/express" "*"
+
+"@types/node-fetch@^2.6.4":
+ version "2.6.11"
+ resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24"
+ integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==
+ dependencies:
+ "@types/node" "*"
+ form-data "^4.0.0"
+
+"@types/node@*":
+ version "20.12.2"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.2.tgz#9facdd11102f38b21b4ebedd9d7999663343d72e"
+ integrity sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==
dependencies:
undici-types "~5.26.4"
"@types/node@>=13.7.0":
- version "22.13.10"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.10.tgz#df9ea358c5ed991266becc3109dc2dc9125d77e4"
- integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==
+ version "20.12.9"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.9.tgz#d7234f2e7839b55fcab5048404aef0195684adff"
+ integrity sha512-o93r47yu04MHumPBCFg0bMPBMNgtMg3jzbhl7e68z50+BMHmRMGDJv13eBlUgOdc9i/uoJXGMGYLtJV4ReTXEg==
dependencies:
- undici-types "~6.20.0"
+ undici-types "~5.26.4"
+
+"@types/node@^18.11.18":
+ version "18.19.28"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.28.tgz#c64a2c992c8ebbf61100a4570e4eebc1934ae030"
+ integrity sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw==
+ dependencies:
+ undici-types "~5.26.4"
"@types/pdf-parse@^1.1.4":
version "1.1.4"
resolved "https://registry.yarnpkg.com/@types/pdf-parse/-/pdf-parse-1.1.4.tgz#21a539efd2f16009d08aeed3350133948b5d7ed1"
integrity sha512-+gbBHbNCVGGYw1S9lAIIvrHW47UYOhMIFUsJcMkMrzy1Jf0vulBN3XQIjPgnoOXveMuHnF3b57fXROnY/Or7eg==
-"@types/prop-types@*":
- version "15.7.12"
- resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6"
- integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==
+"@types/qs@*":
+ version "6.9.14"
+ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b"
+ integrity sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==
-"@types/raf@^3.4.0":
- version "3.4.3"
- resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.3.tgz#85f1d1d17569b28b8db45e16e996407a56b0ab04"
- integrity sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==
+"@types/range-parser@*":
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb"
+ integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==
-"@types/react-dom@^18":
- version "18.2.24"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.24.tgz#8dda8f449ae436a7a6e91efed8035d4ab03ff759"
- integrity sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==
+"@types/readable-stream@^4.0.11":
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-4.0.11.tgz#684f1e947c90cb6a8ad3904523d650bb66cdbb84"
+ integrity sha512-R3eUMUTTKoIoaz7UpYLxvZCrOmCRPRbAmoDDHKcimTEySltaJhF8hLzj4+EzyDifiX5eK6oDQGSfmNnXjxZzYQ==
dependencies:
- "@types/react" "*"
-
-"@types/react@*", "@types/react@^18":
- version "18.2.74"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.74.tgz#2d52eb80e4e7c4ea8812c89181d6d590b53f958c"
- integrity sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==
- dependencies:
- "@types/prop-types" "*"
- csstype "^3.0.2"
+ "@types/node" "*"
+ safe-buffer "~5.1.1"
"@types/retry@0.12.0":
version "0.12.0"
resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
+"@types/send@*":
+ version "0.17.4"
+ resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a"
+ integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==
+ dependencies:
+ "@types/mime" "^1"
+ "@types/node" "*"
+
+"@types/serve-static@*":
+ version "1.15.7"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714"
+ integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==
+ dependencies:
+ "@types/http-errors" "*"
+ "@types/node" "*"
+ "@types/send" "*"
+
"@types/triple-beam@^1.3.2":
version "1.3.5"
resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c"
integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==
-"@types/trusted-types@^2.0.7":
- version "2.0.7"
- resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11"
- integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==
-
"@types/uuid@^10.0.0":
version "10.0.0"
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d"
integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==
-"@typescript-eslint/parser@^5.4.2 || ^6.0.0":
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b"
- integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
+"@types/uuid@^9.0.1":
+ version "9.0.8"
+ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba"
+ integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==
+
+"@types/ws@^8.5.12":
+ version "8.5.12"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e"
+ integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==
dependencies:
- "@typescript-eslint/scope-manager" "6.21.0"
- "@typescript-eslint/types" "6.21.0"
- "@typescript-eslint/typescript-estree" "6.21.0"
- "@typescript-eslint/visitor-keys" "6.21.0"
- debug "^4.3.4"
+ "@types/node" "*"
-"@typescript-eslint/scope-manager@6.21.0":
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1"
- integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==
- dependencies:
- "@typescript-eslint/types" "6.21.0"
- "@typescript-eslint/visitor-keys" "6.21.0"
-
-"@typescript-eslint/types@6.21.0":
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d"
- integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
-
-"@typescript-eslint/typescript-estree@6.21.0":
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46"
- integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==
- dependencies:
- "@typescript-eslint/types" "6.21.0"
- "@typescript-eslint/visitor-keys" "6.21.0"
- debug "^4.3.4"
- globby "^11.1.0"
- is-glob "^4.0.3"
- minimatch "9.0.3"
- semver "^7.5.4"
- ts-api-utils "^1.0.1"
-
-"@typescript-eslint/visitor-keys@6.21.0":
- version "6.21.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47"
- integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==
- dependencies:
- "@typescript-eslint/types" "6.21.0"
- eslint-visitor-keys "^3.4.1"
-
-"@ungap/structured-clone@^1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
- integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
-
-"@xenova/transformers@^2.17.2":
- version "2.17.2"
- resolved "https://registry.yarnpkg.com/@xenova/transformers/-/transformers-2.17.2.tgz#7448d73b90f67bced66f39fe2dd656adc891fde5"
- integrity sha512-lZmHqzrVIkSvZdKZEx7IYY51TK0WDrC8eR0c5IMnBsO8di8are1zzw8BlLhyO2TklZKLN5UffNGs1IJwT6oOqQ==
+"@xenova/transformers@^2.17.1":
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/@xenova/transformers/-/transformers-2.17.1.tgz#712f7a72c76c8aa2075749382f83dc7dd4e5a9a5"
+ integrity sha512-zo702tQAFZXhzeD2GCYUNUqeqkoueOdiSbQWa4s0q7ZE4z8WBIwIsMMPGobpgdqjQ2u0Qulo08wuqVEUrBXjkQ==
dependencies:
"@huggingface/jinja" "^0.2.2"
onnxruntime-web "1.14.0"
@@ -1087,63 +776,48 @@
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
-abort-controller-x@^0.4.0, abort-controller-x@^0.4.3:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/abort-controller-x/-/abort-controller-x-0.4.3.tgz#ff269788386fabd58a7b6eeaafcb6cf55c2958e0"
- integrity sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-acorn-jsx@^5.3.2:
- version "5.3.2"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
- integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+abort-controller@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
+ integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+ dependencies:
+ event-target-shim "^5.0.0"
-acorn@^8.9.0:
+accepts@~1.3.8:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
+ integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
+ dependencies:
+ mime-types "~2.1.34"
+ negotiator "0.6.3"
+
+acorn-walk@^8.1.1:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
+ integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==
+
+acorn@^8.4.1:
version "8.11.3"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
-ajv@^6.12.4:
- version "6.12.6"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
- integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+agentkeepalive@^4.2.1:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923"
+ integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==
dependencies:
- fast-deep-equal "^3.1.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
-ansi-regex@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
- integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-
-ansi-regex@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
- integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
-
-ansi-styles@^4.0.0, ansi-styles@^4.1.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
- integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
- dependencies:
- color-convert "^2.0.1"
+ humanize-ms "^1.2.1"
ansi-styles@^5.0.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-ansi-styles@^6.1.0:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
- integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
-
-any-promise@^1.0.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
- integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
-
anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
@@ -1152,10 +826,15 @@ anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
-arg@^5.0.2:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
- integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
+append-field@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56"
+ integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==
+
+arg@^4.1.0:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+ integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
argparse@^2.0.1:
version "2.0.1"
@@ -1169,181 +848,34 @@ argparse@~1.0.3:
dependencies:
sprintf-js "~1.0.2"
-aria-query@^5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e"
- integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==
- dependencies:
- dequal "^2.0.3"
-
-array-buffer-byte-length@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f"
- integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==
- dependencies:
- call-bind "^1.0.5"
- is-array-buffer "^3.0.4"
-
-array-includes@^3.1.6, array-includes@^3.1.7:
- version "3.1.8"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d"
- integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-abstract "^1.23.2"
- es-object-atoms "^1.0.0"
- get-intrinsic "^1.2.4"
- is-string "^1.0.7"
-
-array-union@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
- integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
-
-array.prototype.findlast@^1.2.4:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904"
- integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-abstract "^1.23.2"
- es-errors "^1.3.0"
- es-object-atoms "^1.0.0"
- es-shim-unscopables "^1.0.2"
-
-array.prototype.findlastindex@^1.2.3:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d"
- integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-abstract "^1.23.2"
- es-errors "^1.3.0"
- es-object-atoms "^1.0.0"
- es-shim-unscopables "^1.0.2"
-
-array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18"
- integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- es-shim-unscopables "^1.0.0"
-
-array.prototype.flatmap@^1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527"
- integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- es-shim-unscopables "^1.0.0"
-
-array.prototype.toreversed@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba"
- integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- es-shim-unscopables "^1.0.0"
-
-array.prototype.tosorted@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8"
- integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==
- dependencies:
- call-bind "^1.0.5"
- define-properties "^1.2.1"
- es-abstract "^1.22.3"
- es-errors "^1.1.0"
- es-shim-unscopables "^1.0.2"
-
-arraybuffer.prototype.slice@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6"
- integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==
- dependencies:
- array-buffer-byte-length "^1.0.1"
- call-bind "^1.0.5"
- define-properties "^1.2.1"
- es-abstract "^1.22.3"
- es-errors "^1.2.1"
- get-intrinsic "^1.2.3"
- is-array-buffer "^3.0.4"
- is-shared-array-buffer "^1.0.2"
-
-ast-types-flow@^0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6"
- integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
async@^3.2.3:
- version "3.2.6"
- resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce"
- integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66"
+ integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
-atob@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
- integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-
-autoprefixer@^10.0.1:
- version "10.4.19"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f"
- integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==
- dependencies:
- browserslist "^4.23.0"
- caniuse-lite "^1.0.30001599"
- fraction.js "^4.3.7"
- normalize-range "^0.1.2"
- picocolors "^1.0.0"
- postcss-value-parser "^4.2.0"
-
-available-typed-arrays@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846"
- integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==
- dependencies:
- possible-typed-array-names "^1.0.0"
-
-axe-core@=4.7.0:
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf"
- integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==
-
-axios@^1.8.3:
- version "1.8.3"
- resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.3.tgz#9ebccd71c98651d547162a018a1a95a4b4ed4de8"
- integrity sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==
+axios@^1.6.8:
+ version "1.6.8"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66"
+ integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==
dependencies:
follow-redirects "^1.15.6"
form-data "^4.0.0"
proxy-from-env "^1.1.0"
-axobject-query@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a"
- integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==
- dependencies:
- dequal "^2.0.3"
-
b4a@^1.6.4:
- version "1.6.7"
- resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4"
- integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==
+ version "1.6.6"
+ resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba"
+ integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==
balanced-match@^1.0.0:
version "1.0.2"
@@ -1351,52 +883,52 @@ balanced-match@^1.0.0:
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
bare-events@^2.0.0, bare-events@^2.2.0:
- version "2.5.4"
- resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.4.tgz#16143d435e1ed9eafd1ab85f12b89b3357a41745"
- integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.2.2.tgz#a98a41841f98b2efe7ecc5c5468814469b018078"
+ integrity sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==
-bare-fs@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-4.0.1.tgz#85844f34da819c76754d545323a8b23ed3617c76"
- integrity sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==
+bare-fs@^2.1.1:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.0.tgz#0872f8e33cf291c9fd527d827154f156a298d402"
+ integrity sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==
dependencies:
bare-events "^2.0.0"
- bare-path "^3.0.0"
- bare-stream "^2.0.0"
+ bare-path "^2.0.0"
+ bare-stream "^1.0.0"
-bare-os@^3.0.1:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-3.6.0.tgz#1465dd7e1bebe0dec230097a23ad00f7db51f957"
- integrity sha512-BUrFS5TqSBdA0LwHop4OjPJwisqxGy6JsWVqV6qaFoe965qqtaKfDzHY5T2YA1gUL0ZeeQeA+4BBc1FJTcHiPw==
+bare-os@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.3.0.tgz#718e680b139effff0624a7421c098e7a2c2d63da"
+ integrity sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==
-bare-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-3.0.0.tgz#b59d18130ba52a6af9276db3e96a2e3d3ea52178"
- integrity sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==
+bare-path@^2.0.0, bare-path@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.2.tgz#7a0940d34ebe65f7e179fa61ed8d49d9dc151d67"
+ integrity sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig==
dependencies:
- bare-os "^3.0.1"
+ bare-os "^2.1.0"
-bare-stream@^2.0.0:
- version "2.6.5"
- resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-2.6.5.tgz#bba8e879674c4c27f7e27805df005c15d7a2ca07"
- integrity sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==
+bare-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-1.0.0.tgz#25c3e56198d922187320c3f8c52d75c4051178b4"
+ integrity sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==
dependencies:
- streamx "^2.21.0"
+ streamx "^2.16.1"
-base64-arraybuffer@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc"
- integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==
+base-64@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb"
+ integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==
base64-js@^1.3.1, base64-js@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-better-sqlite3@^11.9.1:
- version "11.9.1"
- resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.9.1.tgz#0540da2f2ce24cbd766bb35db412f4be2c75b8bb"
- integrity sha512-Ba0KR+Fzxh2jDRhdg6TSH0SJGzb8C0aBY4hR8w8madIdIzzC6Y1+kx5qR6eS1Z+Gy20h6ZU28aeyg0z1VIrShQ==
+better-sqlite3@^11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.0.0.tgz#12083acfe0ded6abdba908ed73520f2003e3ea0e"
+ integrity sha512-1NnNhmT3EZTsKtofJlMox1jkMxdedILury74PwUbQBjWgo4tL4kf7uTAjU55mgQwjdzqakSTjkf+E1imrFwjnA==
dependencies:
bindings "^1.5.0"
prebuild-install "^7.1.1"
@@ -1406,6 +938,11 @@ binary-extensions@^2.0.0, binary-extensions@^2.2.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
+binary-search@^1.3.5:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.6.tgz#e32426016a0c5092f0f3598836a1c7da3560565c"
+ integrity sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==
+
bindings@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
@@ -1427,6 +964,24 @@ bluebird@~3.4.0:
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3"
integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==
+body-parser@1.20.2:
+ version "1.20.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
+ integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
+ dependencies:
+ bytes "3.1.2"
+ content-type "~1.0.5"
+ debug "2.6.9"
+ depd "2.0.0"
+ destroy "1.2.0"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ on-finished "2.4.1"
+ qs "6.11.0"
+ raw-body "2.5.2"
+ type-is "~1.6.18"
+ unpipe "1.0.0"
+
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -1435,35 +990,13 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
-brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
- dependencies:
- balanced-match "^1.0.0"
-
-braces@^3.0.2, braces@~3.0.2:
+braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
fill-range "^7.0.1"
-browserslist@^4.23.0:
- version "4.23.0"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab"
- integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==
- dependencies:
- caniuse-lite "^1.0.30001587"
- electron-to-chromium "^1.4.668"
- node-releases "^2.0.14"
- update-browserslist-db "^1.0.13"
-
-btoa@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73"
- integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==
-
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
@@ -1477,14 +1010,19 @@ buffer@^5.5.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
-busboy@1.6.0:
+busboy@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
dependencies:
streamsearch "^1.1.0"
-call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
+bytes@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+ integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
+call-bind@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
@@ -1495,54 +1033,17 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
get-intrinsic "^1.2.4"
set-function-length "^1.2.1"
-callsites@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
- integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-
-camelcase-css@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
- integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
-
camelcase@6:
version "6.3.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-caniuse-lite@^1.0.30001579:
- version "1.0.30001705"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001705.tgz#dc3510bcdef261444ca944b7be9c8d0bb7fafeef"
- integrity sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg==
+charenc@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+ integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
-caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599:
- version "1.0.30001606"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz#b4d5f67ab0746a3b8b5b6d1f06e39c51beb39a9e"
- integrity sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg==
-
-canvg@^3.0.11:
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/canvg/-/canvg-3.0.11.tgz#4b4290a6c7fa36871fac2b14e432eff33b33cf2b"
- integrity sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==
- dependencies:
- "@babel/runtime" "^7.12.5"
- "@types/raf" "^3.4.0"
- core-js "^3.8.3"
- raf "^3.4.1"
- regenerator-runtime "^0.13.7"
- rgbcolor "^1.0.1"
- stackblur-canvas "^2.0.0"
- svg-pathdata "^6.0.3"
-
-chalk@^4.0.0, chalk@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
- integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
-chokidar@^3.5.3:
+chokidar@^3.5.2:
version "3.6.0"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
@@ -1562,30 +1063,6 @@ chownr@^1.1.1:
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
-client-only@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
- integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
-
-cliui@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
- integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
- dependencies:
- string-width "^4.2.0"
- strip-ansi "^6.0.1"
- wrap-ansi "^7.0.0"
-
-clsx@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"
- integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==
-
-clsx@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb"
- integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==
-
color-convert@^1.9.3:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -1649,10 +1126,10 @@ combined-stream@^1.0.8:
dependencies:
delayed-stream "~1.0.0"
-commander@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
- integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+commander@^10.0.1:
+ version "10.0.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
+ integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
compute-cosine-similarity@^1.1.0:
version "1.1.0"
@@ -1685,102 +1162,89 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
-console-table-printer@^2.12.1:
- version "2.14.6"
- resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.14.6.tgz#edfe0bf311fa2701922ed509443145ab51e06436"
- integrity sha512-MCBl5HNVaFuuHW6FGbL/4fB7N/ormCy+tQ+sxTrF6QtSbSNETvPuOVbkJBhzDgYhvjWGrTma4eYJa37ZuoQsPw==
+concat-stream@^1.5.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
dependencies:
- simple-wcswidth "^1.0.1"
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
-core-js@^3.6.0, core-js@^3.8.3:
- version "3.42.0"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.42.0.tgz#edbe91f78ac8cfb6df8d997e74d368a68082fe37"
- integrity sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==
+content-disposition@0.5.4:
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
+ integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
+ dependencies:
+ safe-buffer "5.2.1"
+
+content-type@~1.0.4, content-type@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
+ integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
+
+cookie@0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
+ integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
core-util-is@~1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
-cross-fetch@^3.1.5:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3"
- integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==
+cors@^2.8.5:
+ version "2.8.5"
+ resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
+ integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
dependencies:
- node-fetch "^2.7.0"
+ object-assign "^4"
+ vary "^1"
-cross-spawn@^7.0.0, cross-spawn@^7.0.2:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+create-require@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
+ integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+
+crypt@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+ integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
+
+debug@2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
- path-key "^3.1.0"
- shebang-command "^2.0.0"
- which "^2.0.1"
+ ms "2.0.0"
-css-line-break@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0"
- integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==
- dependencies:
- utrie "^1.0.2"
-
-cssesc@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
- integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
-
-csstype@^3.0.2:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
- integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
-
-damerau-levenshtein@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
- integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
-
-data-view-buffer@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2"
- integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==
- dependencies:
- call-bind "^1.0.6"
- es-errors "^1.3.0"
- is-data-view "^1.0.1"
-
-data-view-byte-length@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2"
- integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==
- dependencies:
- call-bind "^1.0.7"
- es-errors "^1.3.0"
- is-data-view "^1.0.1"
-
-data-view-byte-offset@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a"
- integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==
- dependencies:
- call-bind "^1.0.6"
- es-errors "^1.3.0"
- is-data-view "^1.0.1"
-
-debug@^3.1.0, debug@^3.2.7:
+debug@^3.1.0:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
-debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
+debug@^4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
+debug@^4.3.4:
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e"
+ integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
+ dependencies:
+ ms "2.1.2"
+
decamelize@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
@@ -1798,17 +1262,12 @@ deep-extend@^0.6.0:
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-deep-is@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
- integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
-
deepmerge@^4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
-define-data-property@^1.0.1, define-data-property@^1.1.4:
+define-data-property@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
@@ -1817,66 +1276,44 @@ define-data-property@^1.0.1, define-data-property@^1.1.4:
es-errors "^1.3.0"
gopd "^1.0.1"
-define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
- integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
- dependencies:
- define-data-property "^1.0.1"
- has-property-descriptors "^1.0.0"
- object-keys "^1.1.1"
-
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
-dequal@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be"
- integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==
+depd@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
-detect-libc@^2.0.0, detect-libc@^2.0.2, detect-libc@^2.0.3:
+destroy@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
+ integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
+
+detect-libc@^2.0.0, detect-libc@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700"
integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==
-didyoumean@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
- integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+diff@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
+digest-fetch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/digest-fetch/-/digest-fetch-1.3.0.tgz#898e69264d00012a23cf26e8a3e40320143fc661"
+ integrity sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==
+ dependencies:
+ base-64 "^0.1.0"
+ md5 "^2.3.0"
dingbat-to-unicode@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz#5091dd673241453e6b5865e26e5a4452cdef5c83"
integrity sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==
-dir-glob@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
- integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
- dependencies:
- path-type "^4.0.0"
-
-dlv@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79"
- integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
-
-doctrine@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
- integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
- dependencies:
- esutils "^2.0.2"
-
-doctrine@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
- integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
- dependencies:
- esutils "^2.0.2"
-
dom-serializer@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
@@ -1898,37 +1335,33 @@ domhandler@^5.0.2, domhandler@^5.0.3:
dependencies:
domelementtype "^2.3.0"
-dompurify@^3.2.4:
- version "3.2.6"
- resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.2.6.tgz#ca040a6ad2b88e2a92dc45f38c79f84a714a1cad"
- integrity sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==
- optionalDependencies:
- "@types/trusted-types" "^2.0.7"
-
domutils@^3.0.1:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78"
- integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e"
+ integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==
dependencies:
dom-serializer "^2.0.0"
domelementtype "^2.3.0"
domhandler "^5.0.3"
-drizzle-kit@^0.30.5:
- version "0.30.5"
- resolved "https://registry.yarnpkg.com/drizzle-kit/-/drizzle-kit-0.30.5.tgz#fce34a8ca9f82da5212f31c266e407c78523166f"
- integrity sha512-l6dMSE100u7sDaTbLczibrQZjA35jLsHNqIV+jmhNVO3O8jzM6kywMOmV9uOz9ZVSCMPQhAZEFjL/qDPVrqpUA==
+dotenv@^16.4.5:
+ version "16.4.5"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
+ integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
+
+drizzle-kit@^0.22.7:
+ version "0.22.7"
+ resolved "https://registry.yarnpkg.com/drizzle-kit/-/drizzle-kit-0.22.7.tgz#4339c3e24c6555ea8cbad605f005b3db3e604a9c"
+ integrity sha512-9THPCb2l1GPt7wxhws9LvTR0YG565ZlVgTuqGMwjs590Kch1pXu4GyjEArVijSF5m0OBj3qgdeKmuJXhKXgWFw==
dependencies:
- "@drizzle-team/brocli" "^0.10.2"
"@esbuild-kit/esm-loader" "^2.5.5"
esbuild "^0.19.7"
esbuild-register "^3.5.0"
- gel "^2.0.0"
-drizzle-orm@^0.40.1:
- version "0.40.1"
- resolved "https://registry.yarnpkg.com/drizzle-orm/-/drizzle-orm-0.40.1.tgz#15f1d970d4fb034db2b13e4a33fcbbccda9bf1cb"
- integrity sha512-aPNhtiJiPfm3qxz1czrnIDkfvkSdKGXYeZkpG55NPTVI186LmK2fBLMi4dsHpPHlJrZeQ92D322YFPHADBALew==
+drizzle-orm@^0.31.2:
+ version "0.31.2"
+ resolved "https://registry.yarnpkg.com/drizzle-orm/-/drizzle-orm-0.31.2.tgz#221a257dd487bab49ddb88a17bd82388600cf655"
+ integrity sha512-QnenevbnnAzmbNzQwbhklvIYrDE8YER8K7kSrAWQSV1YvFCdSQPzj+jzqRdTSsV2cDqSpQ0NXGyL1G9I43LDLg==
duck@^0.1.12:
version "0.1.12"
@@ -1937,31 +1370,21 @@ duck@^0.1.12:
dependencies:
underscore "^1.13.1"
-eastasianwidth@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
- integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
-
-electron-to-chromium@^1.4.668:
- version "1.4.729"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.729.tgz#8477d21e2a50993781950885b2731d92ad532c00"
- integrity sha512-bx7+5Saea/qu14kmPTDHQxkp2UnziG3iajUQu3BxFvCOnpAJdDbMV4rSl+EqFDkkpNNVUFlR1kDfpL59xfy1HA==
-
-emoji-regex@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
- integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
-emoji-regex@^9.2.2:
- version "9.2.2"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
- integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
enabled@2.0.x:
version "2.0.0"
resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2"
integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==
+encodeurl@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
+
end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@@ -1969,76 +1392,11 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1:
dependencies:
once "^1.4.0"
-enhanced-resolve@^5.12.0:
- version "5.16.0"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787"
- integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==
- dependencies:
- graceful-fs "^4.2.4"
- tapable "^2.2.0"
-
entities@^4.2.0, entities@^4.4.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
-env-paths@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-3.0.0.tgz#2f1e89c2f6dbd3408e1b1711dd82d62e317f58da"
- integrity sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==
-
-es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2:
- version "1.23.3"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0"
- integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==
- dependencies:
- array-buffer-byte-length "^1.0.1"
- arraybuffer.prototype.slice "^1.0.3"
- available-typed-arrays "^1.0.7"
- call-bind "^1.0.7"
- data-view-buffer "^1.0.1"
- data-view-byte-length "^1.0.1"
- data-view-byte-offset "^1.0.0"
- es-define-property "^1.0.0"
- es-errors "^1.3.0"
- es-object-atoms "^1.0.0"
- es-set-tostringtag "^2.0.3"
- es-to-primitive "^1.2.1"
- function.prototype.name "^1.1.6"
- get-intrinsic "^1.2.4"
- get-symbol-description "^1.0.2"
- globalthis "^1.0.3"
- gopd "^1.0.1"
- has-property-descriptors "^1.0.2"
- has-proto "^1.0.3"
- has-symbols "^1.0.3"
- hasown "^2.0.2"
- internal-slot "^1.0.7"
- is-array-buffer "^3.0.4"
- is-callable "^1.2.7"
- is-data-view "^1.0.1"
- is-negative-zero "^2.0.3"
- is-regex "^1.1.4"
- is-shared-array-buffer "^1.0.3"
- is-string "^1.0.7"
- is-typed-array "^1.1.13"
- is-weakref "^1.0.2"
- object-inspect "^1.13.1"
- object-keys "^1.1.1"
- object.assign "^4.1.5"
- regexp.prototype.flags "^1.5.2"
- safe-array-concat "^1.1.2"
- safe-regex-test "^1.0.3"
- string.prototype.trim "^1.2.9"
- string.prototype.trimend "^1.0.8"
- string.prototype.trimstart "^1.0.8"
- typed-array-buffer "^1.0.2"
- typed-array-byte-length "^1.0.1"
- typed-array-byte-offset "^1.0.2"
- typed-array-length "^1.0.6"
- unbox-primitive "^1.0.2"
- which-typed-array "^1.1.15"
-
es-define-property@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
@@ -2046,67 +1404,15 @@ es-define-property@^1.0.0:
dependencies:
get-intrinsic "^1.2.4"
-es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0:
+es-errors@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
-es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17:
- version "1.0.18"
- resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d"
- integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-abstract "^1.23.0"
- es-errors "^1.3.0"
- es-set-tostringtag "^2.0.3"
- function-bind "^1.1.2"
- get-intrinsic "^1.2.4"
- globalthis "^1.0.3"
- has-property-descriptors "^1.0.2"
- has-proto "^1.0.3"
- has-symbols "^1.0.3"
- internal-slot "^1.0.7"
- iterator.prototype "^1.1.2"
- safe-array-concat "^1.1.2"
-
-es-object-atoms@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941"
- integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==
- dependencies:
- es-errors "^1.3.0"
-
-es-set-tostringtag@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777"
- integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==
- dependencies:
- get-intrinsic "^1.2.4"
- has-tostringtag "^1.0.2"
- hasown "^2.0.1"
-
-es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763"
- integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==
- dependencies:
- hasown "^2.0.0"
-
-es-to-primitive@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
- integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
- dependencies:
- is-callable "^1.1.4"
- is-date-object "^1.0.1"
- is-symbol "^1.0.2"
-
esbuild-register@^3.5.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.6.0.tgz#cf270cfa677baebbc0010ac024b823cbf723a36d"
- integrity sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.5.0.tgz#449613fb29ab94325c722f560f800dd946dc8ea8"
+ integrity sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==
dependencies:
debug "^4.3.4"
@@ -2167,223 +1473,20 @@ esbuild@~0.18.20:
"@esbuild/win32-ia32" "0.18.20"
"@esbuild/win32-x64" "0.18.20"
-escalade@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
- integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
-escape-string-regexp@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
- integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+etag@~1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
-eslint-config-next@14.1.4:
- version "14.1.4"
- resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.4.tgz#22f2ba4c0993e991249d863656a64c204bae542c"
- integrity sha512-cihIahbhYAWwXJwZkAaRPpUi5t9aOi/HdfWXOjZeUOqNWXHD8X22kd1KG58Dc3MVaRx3HoR/oMGk2ltcrqDn8g==
- dependencies:
- "@next/eslint-plugin-next" "14.1.4"
- "@rushstack/eslint-patch" "^1.3.3"
- "@typescript-eslint/parser" "^5.4.2 || ^6.0.0"
- eslint-import-resolver-node "^0.3.6"
- eslint-import-resolver-typescript "^3.5.2"
- eslint-plugin-import "^2.28.1"
- eslint-plugin-jsx-a11y "^6.7.1"
- eslint-plugin-react "^7.33.2"
- eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
-
-eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9:
- version "0.3.9"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac"
- integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==
- dependencies:
- debug "^3.2.7"
- is-core-module "^2.13.0"
- resolve "^1.22.4"
-
-eslint-import-resolver-typescript@^3.5.2:
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa"
- integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==
- dependencies:
- debug "^4.3.4"
- enhanced-resolve "^5.12.0"
- eslint-module-utils "^2.7.4"
- fast-glob "^3.3.1"
- get-tsconfig "^4.5.0"
- is-core-module "^2.11.0"
- is-glob "^4.0.3"
-
-eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34"
- integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==
- dependencies:
- debug "^3.2.7"
-
-eslint-plugin-import@^2.28.1:
- version "2.29.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643"
- integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==
- dependencies:
- array-includes "^3.1.7"
- array.prototype.findlastindex "^1.2.3"
- array.prototype.flat "^1.3.2"
- array.prototype.flatmap "^1.3.2"
- debug "^3.2.7"
- doctrine "^2.1.0"
- eslint-import-resolver-node "^0.3.9"
- eslint-module-utils "^2.8.0"
- hasown "^2.0.0"
- is-core-module "^2.13.1"
- is-glob "^4.0.3"
- minimatch "^3.1.2"
- object.fromentries "^2.0.7"
- object.groupby "^1.0.1"
- object.values "^1.1.7"
- semver "^6.3.1"
- tsconfig-paths "^3.15.0"
-
-eslint-plugin-jsx-a11y@^6.7.1:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2"
- integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==
- dependencies:
- "@babel/runtime" "^7.23.2"
- aria-query "^5.3.0"
- array-includes "^3.1.7"
- array.prototype.flatmap "^1.3.2"
- ast-types-flow "^0.0.8"
- axe-core "=4.7.0"
- axobject-query "^3.2.1"
- damerau-levenshtein "^1.0.8"
- emoji-regex "^9.2.2"
- es-iterator-helpers "^1.0.15"
- hasown "^2.0.0"
- jsx-ast-utils "^3.3.5"
- language-tags "^1.0.9"
- minimatch "^3.1.2"
- object.entries "^1.1.7"
- object.fromentries "^2.0.7"
-
-"eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705":
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
- integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
-
-eslint-plugin-react@^7.33.2:
- version "7.34.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997"
- integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==
- dependencies:
- array-includes "^3.1.7"
- array.prototype.findlast "^1.2.4"
- array.prototype.flatmap "^1.3.2"
- array.prototype.toreversed "^1.1.2"
- array.prototype.tosorted "^1.1.3"
- doctrine "^2.1.0"
- es-iterator-helpers "^1.0.17"
- estraverse "^5.3.0"
- jsx-ast-utils "^2.4.1 || ^3.0.0"
- minimatch "^3.1.2"
- object.entries "^1.1.7"
- object.fromentries "^2.0.7"
- object.hasown "^1.1.3"
- object.values "^1.1.7"
- prop-types "^15.8.1"
- resolve "^2.0.0-next.5"
- semver "^6.3.1"
- string.prototype.matchall "^4.0.10"
-
-eslint-scope@^7.2.2:
- version "7.2.2"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
- integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
- dependencies:
- esrecurse "^4.3.0"
- estraverse "^5.2.0"
-
-eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
- version "3.4.3"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
- integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
-
-eslint@^8:
- version "8.57.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
- integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
- dependencies:
- "@eslint-community/eslint-utils" "^4.2.0"
- "@eslint-community/regexpp" "^4.6.1"
- "@eslint/eslintrc" "^2.1.4"
- "@eslint/js" "8.57.0"
- "@humanwhocodes/config-array" "^0.11.14"
- "@humanwhocodes/module-importer" "^1.0.1"
- "@nodelib/fs.walk" "^1.2.8"
- "@ungap/structured-clone" "^1.2.0"
- ajv "^6.12.4"
- chalk "^4.0.0"
- cross-spawn "^7.0.2"
- debug "^4.3.2"
- doctrine "^3.0.0"
- escape-string-regexp "^4.0.0"
- eslint-scope "^7.2.2"
- eslint-visitor-keys "^3.4.3"
- espree "^9.6.1"
- esquery "^1.4.2"
- esutils "^2.0.2"
- fast-deep-equal "^3.1.3"
- file-entry-cache "^6.0.1"
- find-up "^5.0.0"
- glob-parent "^6.0.2"
- globals "^13.19.0"
- graphemer "^1.4.0"
- ignore "^5.2.0"
- imurmurhash "^0.1.4"
- is-glob "^4.0.0"
- is-path-inside "^3.0.3"
- js-yaml "^4.1.0"
- json-stable-stringify-without-jsonify "^1.0.1"
- levn "^0.4.1"
- lodash.merge "^4.6.2"
- minimatch "^3.1.2"
- natural-compare "^1.4.0"
- optionator "^0.9.3"
- strip-ansi "^6.0.1"
- text-table "^0.2.0"
-
-espree@^9.6.0, espree@^9.6.1:
- version "9.6.1"
- resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
- integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
- dependencies:
- acorn "^8.9.0"
- acorn-jsx "^5.3.2"
- eslint-visitor-keys "^3.4.1"
-
-esquery@^1.4.2:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
- integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
- dependencies:
- estraverse "^5.1.0"
-
-esrecurse@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
- integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
- dependencies:
- estraverse "^5.2.0"
-
-estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
- integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
-
-esutils@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
- integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+event-target-shim@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
+ integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
eventemitter3@^4.0.4:
version "4.0.7"
@@ -2400,68 +1503,60 @@ expr-eval@^2.0.2:
resolved "https://registry.yarnpkg.com/expr-eval/-/expr-eval-2.0.2.tgz#fa6f044a7b0c93fde830954eb9c5b0f7fbc7e201"
integrity sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg==
-fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
- integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+express@^4.19.2:
+ version "4.19.2"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465"
+ integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==
+ dependencies:
+ accepts "~1.3.8"
+ array-flatten "1.1.1"
+ body-parser "1.20.2"
+ content-disposition "0.5.4"
+ content-type "~1.0.4"
+ cookie "0.6.0"
+ cookie-signature "1.0.6"
+ debug "2.6.9"
+ depd "2.0.0"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ finalhandler "1.2.0"
+ fresh "0.5.2"
+ http-errors "2.0.0"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "2.4.1"
+ parseurl "~1.3.3"
+ path-to-regexp "0.1.7"
+ proxy-addr "~2.0.7"
+ qs "6.11.0"
+ range-parser "~1.2.1"
+ safe-buffer "5.2.1"
+ send "0.18.0"
+ serve-static "1.15.0"
+ setprototypeof "1.2.0"
+ statuses "2.0.1"
+ type-is "~1.6.18"
+ utils-merge "1.0.1"
+ vary "~1.1.2"
-fast-fifo@^1.2.0, fast-fifo@^1.3.2:
+fast-fifo@^1.1.0, fast-fifo@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c"
integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==
-fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
- integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+fast-xml-parser@^4.3.5:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz#341cc98de71e9ba9e651a67f41f1752d1441a501"
+ integrity sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==
dependencies:
- "@nodelib/fs.stat" "^2.0.2"
- "@nodelib/fs.walk" "^1.2.3"
- glob-parent "^5.1.2"
- merge2 "^1.3.0"
- micromatch "^4.0.4"
-
-fast-json-stable-stringify@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
- integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-
-fast-levenshtein@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
- integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
-
-fast-xml-parser@^4.4.1:
- version "4.5.3"
- resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz#c54d6b35aa0f23dc1ea60b6c884340c006dc6efb"
- integrity sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==
- dependencies:
- strnum "^1.1.1"
-
-fastq@^1.6.0:
- version "1.17.1"
- resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
- integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
- dependencies:
- reusify "^1.0.4"
+ strnum "^1.0.5"
fecha@^4.2.0:
version "4.2.3"
resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd"
integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==
-fflate@^0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea"
- integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==
-
-file-entry-cache@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
- integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
- dependencies:
- flat-cache "^3.0.4"
-
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
@@ -2474,22 +1569,18 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
-find-up@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
- integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+finalhandler@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
+ integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
dependencies:
- locate-path "^6.0.0"
- path-exists "^4.0.0"
-
-flat-cache@^3.0.4:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
- integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
- dependencies:
- flatted "^3.2.9"
- keyv "^4.5.3"
- rimraf "^3.0.2"
+ debug "2.6.9"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ on-finished "2.4.1"
+ parseurl "~1.3.3"
+ statuses "2.0.1"
+ unpipe "~1.0.0"
flat@^5.0.2:
version "5.0.2"
@@ -2501,35 +1592,20 @@ flatbuffers@^1.12.0:
resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.12.0.tgz#72e87d1726cb1b216e839ef02658aa87dcef68aa"
integrity sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==
-flatted@^3.2.9:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
- integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
-
fn.name@1.x.x:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc"
integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==
follow-redirects@^1.15.6:
- version "1.15.9"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1"
- integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==
+ version "1.15.6"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b"
+ integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
-for-each@^0.3.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
- integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
- dependencies:
- is-callable "^1.1.3"
-
-foreground-child@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
- integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
- dependencies:
- cross-spawn "^7.0.0"
- signal-exit "^4.0.1"
+form-data-encoder@1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040"
+ integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==
form-data@^4.0.0:
version "4.0.0"
@@ -2540,21 +1616,29 @@ form-data@^4.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
-fraction.js@^4.3.7:
- version "4.3.7"
- resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7"
- integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==
+formdata-node@^4.3.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2"
+ integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==
+ dependencies:
+ node-domexception "1.0.0"
+ web-streams-polyfill "4.0.0-beta.3"
+
+forwarded@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
+ integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+
+fresh@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
fs-constants@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
-
fsevents@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
@@ -2565,39 +1649,7 @@ function-bind@^1.1.2:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-function.prototype.name@^1.1.5, function.prototype.name@^1.1.6:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd"
- integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- functions-have-names "^1.2.3"
-
-functions-have-names@^1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
- integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
-
-gel@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/gel/-/gel-2.0.1.tgz#587d89db54351c2d436de981d136481e37d06a7a"
- integrity sha512-gfem3IGvqKqXwEq7XseBogyaRwGsQGuE7Cw/yQsjLGdgiyqX92G1xENPCE0ltunPGcsJIa6XBOTx/PK169mOqw==
- dependencies:
- "@petamoriken/float16" "^3.8.7"
- debug "^4.3.4"
- env-paths "^3.0.0"
- semver "^7.6.2"
- shell-quote "^1.8.1"
- which "^4.0.0"
-
-get-caller-file@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
- integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
-get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
+get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
@@ -2608,26 +1660,10 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@
has-symbols "^1.0.3"
hasown "^2.0.0"
-get-symbol-description@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5"
- integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==
- dependencies:
- call-bind "^1.0.5"
- es-errors "^1.3.0"
- get-intrinsic "^1.2.4"
-
-get-tsconfig@^4.5.0:
- version "4.7.3"
- resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83"
- integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==
- dependencies:
- resolve-pkg-maps "^1.0.0"
-
get-tsconfig@^4.7.0:
- version "4.10.0"
- resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.0.tgz#403a682b373a823612475a4c2928c7326fc0f6bb"
- integrity sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==
+ version "4.7.5"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf"
+ integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==
dependencies:
resolve-pkg-maps "^1.0.0"
@@ -2636,80 +1672,13 @@ github-from-package@0.0.0:
resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
-glob-parent@^5.1.2, glob-parent@~5.1.2:
+glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
-glob-parent@^6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
- integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
- dependencies:
- is-glob "^4.0.3"
-
-glob@10.3.10:
- version "10.3.10"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
- integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^2.3.5"
- minimatch "^9.0.1"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
- path-scurry "^1.10.1"
-
-glob@^10.3.10:
- version "10.3.12"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b"
- integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^2.3.6"
- minimatch "^9.0.1"
- minipass "^7.0.4"
- path-scurry "^1.10.2"
-
-glob@^7.1.3:
- version "7.2.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
- integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.1.1"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-globals@^13.19.0:
- version "13.24.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
- integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
- dependencies:
- type-fest "^0.20.2"
-
-globalthis@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
- integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
- dependencies:
- define-properties "^1.1.3"
-
-globby@^11.1.0:
- version "11.1.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
- integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
- dependencies:
- array-union "^2.1.0"
- dir-glob "^3.0.1"
- fast-glob "^3.2.9"
- ignore "^5.2.0"
- merge2 "^1.4.1"
- slash "^3.0.0"
-
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
@@ -2717,82 +1686,34 @@ gopd@^1.0.1:
dependencies:
get-intrinsic "^1.1.3"
-graceful-fs@^4.2.4:
- version "4.2.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
- integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
-
-graphemer@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
- integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
-
-graphql-request@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-6.1.0.tgz#f4eb2107967af3c7a5907eb3131c671eac89be4f"
- integrity sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==
- dependencies:
- "@graphql-typed-document-node/core" "^3.2.0"
- cross-fetch "^3.1.5"
-
-graphql@^16.11.0:
- version "16.11.0"
- resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.11.0.tgz#96d17f66370678027fdf59b2d4c20b4efaa8a633"
- integrity sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==
-
-groq-sdk@^0.19.0:
- version "0.19.0"
- resolved "https://registry.yarnpkg.com/groq-sdk/-/groq-sdk-0.19.0.tgz#564ce018172dc3e2e2793398e0227a035a357d09"
- integrity sha512-vdh5h7ORvwvOvutA80dKF81b0gPWHxu6K/GOJBOM0n6p6CSqAVLhFfeS79Ef0j/yCycDR09jqY7jkYz9dLiS6w==
- dependencies:
- "@types/node" "^18.11.18"
- "@types/node-fetch" "^2.6.4"
- abort-controller "^3.0.0"
- agentkeepalive "^4.2.1"
- form-data-encoder "1.7.2"
- formdata-node "^4.3.2"
- node-fetch "^2.6.7"
-
guid-typescript@^1.0.9:
version "1.0.9"
resolved "https://registry.yarnpkg.com/guid-typescript/-/guid-typescript-1.0.9.tgz#e35f77003535b0297ea08548f5ace6adb1480ddc"
integrity sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==
-has-bigints@^1.0.1, has-bigints@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
- integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
-has-flag@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
- integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-
-has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
+has-property-descriptors@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
dependencies:
es-define-property "^1.0.0"
-has-proto@^1.0.1, has-proto@^1.0.3:
+has-proto@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
-has-symbols@^1.0.2, has-symbols@^1.0.3:
+has-symbols@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
-has-tostringtag@^1.0.0, has-tostringtag@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
- integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
- dependencies:
- has-symbols "^1.0.3"
-
-hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2:
+hasown@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
@@ -2810,14 +1731,6 @@ html-to-text@^9.0.5:
htmlparser2 "^8.0.2"
selderee "^0.11.0"
-html2canvas@^1.0.0-rc.5:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543"
- integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==
- dependencies:
- css-line-break "^2.1.0"
- text-segmentation "^1.0.3"
-
htmlparser2@^8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
@@ -2828,43 +1741,47 @@ htmlparser2@^8.0.2:
domutils "^3.0.1"
entities "^4.4.0"
+http-errors@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+ integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+ dependencies:
+ depd "2.0.0"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
+ statuses "2.0.1"
+ toidentifier "1.0.1"
+
+humanize-ms@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+ integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+ dependencies:
+ ms "^2.0.0"
+
+iconv-lite@0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
ieee754@^1.1.13:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-ignore@^5.2.0:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
- integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
+ignore-by-default@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
+ integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==
immediate@~3.0.5:
version "3.0.6"
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
-import-fresh@^3.2.1:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
- integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
- dependencies:
- parent-module "^1.0.0"
- resolve-from "^4.0.0"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
- integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
+inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -2874,42 +1791,21 @@ ini@~1.3.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-internal-slot@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802"
- integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==
- dependencies:
- es-errors "^1.3.0"
- hasown "^2.0.0"
- side-channel "^1.0.4"
+ipaddr.js@1.9.1:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
+ integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
-is-array-buffer@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98"
- integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==
- dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.2.1"
+is-any-array@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e"
+ integrity sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==
is-arrayish@^0.3.1:
version "0.3.2"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
-is-async-function@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646"
- integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==
- dependencies:
- has-tostringtag "^1.0.0"
-
-is-bigint@^1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
- integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
- dependencies:
- has-bigints "^1.0.1"
-
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
@@ -2917,220 +1813,51 @@ is-binary-path@~2.1.0:
dependencies:
binary-extensions "^2.0.0"
-is-boolean-object@^1.1.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
- integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
- dependencies:
- call-bind "^1.0.2"
- has-tostringtag "^1.0.0"
-
-is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
- integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
-
-is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1:
- version "2.13.1"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
- integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
- dependencies:
- hasown "^2.0.0"
-
-is-data-view@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f"
- integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==
- dependencies:
- is-typed-array "^1.1.13"
-
-is-date-object@^1.0.1, is-date-object@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
- integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
- dependencies:
- has-tostringtag "^1.0.0"
+is-buffer@~1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
-is-finalizationregistry@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6"
- integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==
- dependencies:
- call-bind "^1.0.2"
-
-is-fullwidth-code-point@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
- integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-is-generator-function@^1.0.10:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
- integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
- dependencies:
- has-tostringtag "^1.0.0"
-
-is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+is-glob@^4.0.1, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
is-extglob "^2.1.1"
-is-map@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e"
- integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==
-
-is-negative-zero@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747"
- integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==
-
-is-number-object@^1.0.4:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
- integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
- dependencies:
- has-tostringtag "^1.0.0"
-
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-is-path-inside@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
- integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
-
-is-regex@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
- integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
- dependencies:
- call-bind "^1.0.2"
- has-tostringtag "^1.0.0"
-
-is-set@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d"
- integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==
-
-is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688"
- integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==
- dependencies:
- call-bind "^1.0.7"
-
is-stream@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
-is-string@^1.0.5, is-string@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
- integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
- dependencies:
- has-tostringtag "^1.0.0"
-
-is-symbol@^1.0.2, is-symbol@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
- integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
- dependencies:
- has-symbols "^1.0.2"
-
-is-typed-array@^1.1.13:
- version "1.1.13"
- resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229"
- integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==
- dependencies:
- which-typed-array "^1.1.14"
-
-is-weakmap@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd"
- integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==
-
-is-weakref@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
- integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
- dependencies:
- call-bind "^1.0.2"
-
-is-weakset@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007"
- integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==
- dependencies:
- call-bind "^1.0.7"
- get-intrinsic "^1.2.4"
-
-isarray@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
- integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
-
isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
-
-isexe@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d"
- integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==
-
-iterator.prototype@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0"
- integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==
- dependencies:
- define-properties "^1.2.1"
- get-intrinsic "^1.2.1"
- has-symbols "^1.0.3"
- reflect.getprototypeof "^1.0.4"
- set-function-name "^2.0.1"
-
-jackspeak@^2.3.5, jackspeak@^2.3.6:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
- integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
- dependencies:
- "@isaacs/cliui" "^8.0.2"
- optionalDependencies:
- "@pkgjs/parseargs" "^0.11.0"
-
-jiti@^1.21.0:
- version "1.21.0"
- resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
- integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==
-
js-tiktoken@^1.0.12:
- version "1.0.20"
- resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.20.tgz#fa2733bf147acaf1bdcf9ab8a878e79c581c95f2"
- integrity sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A==
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.12.tgz#af0f5cf58e5e7318240d050c8413234019424211"
+ integrity sha512-L7wURW1fH9Qaext0VzaUDpFGVQgjkdE3Dgsy9/+yXyGEpBKnylTd0mU0bfbNkKDlXRb6TEsZkwuflu1B8uQbJQ==
dependencies:
base64-js "^1.5.1"
-"js-tokens@^3.0.0 || ^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
- integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+js-tiktoken@^1.0.7, js-tiktoken@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.10.tgz#2b343ec169399dcee8f9ef9807dbd4fafd3b30dc"
+ integrity sha512-ZoSxbGjvGyMT13x6ACo9ebhDha/0FHdKA+OsQcMOWcm1Zs7r90Rhk5lhERLzji+3rA7EKpXCgwXcM5fF3DMpdA==
+ dependencies:
+ base64-js "^1.5.1"
js-yaml@^4.1.0:
version "4.1.0"
@@ -3139,58 +1866,11 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
-json-buffer@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
- integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
-
-json-schema-traverse@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
- integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json-stable-stringify-without-jsonify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
- integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
-
-json5@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
- integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
- dependencies:
- minimist "^1.2.0"
-
jsonpointer@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559"
integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==
-jspdf@*, jspdf@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-3.0.1.tgz#d81e1964f354f60412516eb2449ea2cccd4d2a3b"
- integrity sha512-qaGIxqxetdoNnFQQXxTKUD9/Z7AloLaw94fFsOiJMxbfYdBbrBuhWmbzI8TVjrw7s3jBY1PFHofBKMV/wZPapg==
- dependencies:
- "@babel/runtime" "^7.26.7"
- atob "^2.1.2"
- btoa "^1.2.1"
- fflate "^0.8.1"
- optionalDependencies:
- canvg "^3.0.11"
- core-js "^3.6.0"
- dompurify "^3.2.4"
- html2canvas "^1.0.0-rc.5"
-
-"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5:
- version "3.3.5"
- resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a"
- integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==
- dependencies:
- array-includes "^3.1.6"
- array.prototype.flat "^1.3.1"
- object.assign "^4.1.4"
- object.values "^1.1.6"
-
jszip@^3.7.1:
version "3.10.1"
resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2"
@@ -3201,73 +1881,101 @@ jszip@^3.7.1:
readable-stream "~2.3.6"
setimmediate "^1.0.5"
-keyv@^4.5.3:
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
- integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
- dependencies:
- json-buffer "3.0.1"
-
kuler@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==
-"langchain@>=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", langchain@^0.3.30:
- version "0.3.30"
- resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.3.30.tgz#9fc0467007009dc5e799d1f8fb9dd1137654e387"
- integrity sha512-UyVsfwHDpHbrnWrjWuhJHqi8Non+Zcsf2kdpDTqyJF8NXrHBOpjdHT5LvPuW9fnE7miDTWf5mLcrWAGZgcrznQ==
+langchain@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.2.3.tgz#c14bb05cf871b21bd63b84b3ab89580b1d62539f"
+ integrity sha512-T9xR7zd+Nj0oXy6WoYKmZLy0DlQiDLFPGYWdOXDxy+AvqlujoPdVQgDSpdqiOHvAjezrByAoKxoHCz5XMwTP/Q==
dependencies:
- "@langchain/openai" ">=0.1.0 <0.7.0"
- "@langchain/textsplitters" ">=0.0.0 <0.2.0"
+ "@langchain/core" "~0.2.0"
+ "@langchain/openai" "~0.0.28"
+ "@langchain/textsplitters" "~0.0.0"
+ binary-extensions "^2.2.0"
js-tiktoken "^1.0.12"
js-yaml "^4.1.0"
jsonpointer "^5.0.1"
- langsmith "^0.3.33"
+ langchainhub "~0.0.8"
+ langsmith "~0.1.7"
+ ml-distance "^4.0.0"
openapi-types "^12.1.3"
p-retry "4"
- uuid "^10.0.0"
+ uuid "^9.0.0"
yaml "^2.2.1"
- zod "^3.25.32"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
-langsmith@^0.3.33, langsmith@^0.3.46:
- version "0.3.46"
- resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.3.46.tgz#6d369f2c91aa771f49a5f7c4e4e67c12763cf737"
- integrity sha512-Hhi4/cMjhWIGpu0DW5eQrXBbeeKQWPYYQyJCYzhFjod+xinMry4i8QR0gxrrgjGOgfMuU6nyK79YqjGTEPVbDA==
+langchain@^0.1.30:
+ version "0.1.30"
+ resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.1.30.tgz#e1adb3f1849fcd5c596c668300afd5dc8cb37a97"
+ integrity sha512-5h/vNMmutQ98tbB0sPDlAileZVca6A2McFgGa3+D56Dm8mSSCzTQL2DngPA6h09DlKDpSr7+6PdFw5Hoj0ZDSw==
+ dependencies:
+ "@anthropic-ai/sdk" "^0.9.1"
+ "@langchain/community" "~0.0.41"
+ "@langchain/core" "~0.1.44"
+ "@langchain/openai" "~0.0.19"
+ binary-extensions "^2.2.0"
+ js-tiktoken "^1.0.7"
+ js-yaml "^4.1.0"
+ jsonpointer "^5.0.1"
+ langchainhub "~0.0.8"
+ langsmith "~0.1.7"
+ ml-distance "^4.0.0"
+ openapi-types "^12.1.3"
+ p-retry "4"
+ uuid "^9.0.0"
+ yaml "^2.2.1"
+ zod "^3.22.4"
+ zod-to-json-schema "^3.22.3"
+
+langchainhub@~0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/langchainhub/-/langchainhub-0.0.8.tgz#fd4b96dc795e22e36c1a20bad31b61b0c33d3110"
+ integrity sha512-Woyb8YDHgqqTOZvWIbm2CaFDGfZ4NTSyXV687AG4vXEfoNo7cGQp7nhl7wL3ehenKWmNEmcxCLgOZzW8jE6lOQ==
+
+langsmith@^0.1.56-rc.1:
+ version "0.1.68"
+ resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.68.tgz#848332e822fe5e6734a07f1c36b6530cc1798afb"
+ integrity sha512-otmiysWtVAqzMx3CJ4PrtUBhWRG5Co8Z4o7hSZENPjlit9/j3/vm3TSvbaxpDYakZxtMjhkcJTqrdYFipISEiQ==
dependencies:
"@types/uuid" "^10.0.0"
- chalk "^4.1.2"
- console-table-printer "^2.12.1"
+ commander "^10.0.1"
p-queue "^6.6.2"
p-retry "4"
semver "^7.6.3"
uuid "^10.0.0"
-language-subtag-registry@^0.3.20:
- version "0.3.22"
- resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d"
- integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==
-
-language-tags@^1.0.9:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777"
- integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==
+langsmith@~0.1.1, langsmith@~0.1.7:
+ version "0.1.14"
+ resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.14.tgz#2b889dbcfb49547614df276a4a5a063092a1585d"
+ integrity sha512-iEzQLLB7/0nRpAwNBAR7B7N64fyByg5UsNjSvLaCCkQ9AS68PSafjB8xQkyI8QXXrGjU1dEqDRoa8m4SUuRdUw==
dependencies:
- language-subtag-registry "^0.3.20"
+ "@types/uuid" "^9.0.1"
+ commander "^10.0.1"
+ p-queue "^6.6.2"
+ p-retry "4"
+ uuid "^9.0.0"
+
+langsmith@~0.1.30:
+ version "0.1.34"
+ resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.34.tgz#801310495fef258ed9c22bb5575120e2c06d51cf"
+ integrity sha512-aMv2k8kEaovhTuZnK6/6DMCoM7Jurvm1AzdESn+yN+HramRxp3sK32jFRz3ogkXP6GjAjOIofcnNkzhHXSUXGA==
+ dependencies:
+ "@types/uuid" "^9.0.1"
+ commander "^10.0.1"
+ lodash.set "^4.3.2"
+ p-queue "^6.6.2"
+ p-retry "4"
+ uuid "^9.0.0"
leac@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/leac/-/leac-0.6.0.tgz#dcf136e382e666bd2475f44a1096061b70dc0912"
integrity sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==
-levn@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
- integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
- dependencies:
- prelude-ls "^1.2.1"
- type-check "~0.4.0"
-
lie@~3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
@@ -3275,52 +1983,15 @@ lie@~3.3.0:
dependencies:
immediate "~3.0.5"
-lilconfig@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52"
- integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
+lodash.set@^4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
+ integrity sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==
-lilconfig@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3"
- integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==
-
-lines-and-columns@^1.1.6:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
- integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-
-locate-path@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
- integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
- dependencies:
- p-locate "^5.0.0"
-
-lodash.camelcase@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
- integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
-
-lodash.castarray@^4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115"
- integrity sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==
-
-lodash.isplainobject@^4.0.6:
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
- integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
-
-lodash.merge@^4.6.2:
- version "4.6.2"
- resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
- integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
-
-logform@^2.7.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/logform/-/logform-2.7.0.tgz#cfca97528ef290f2e125a08396805002b2d060d1"
- integrity sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==
+logform@^2.3.2, logform@^2.4.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5"
+ integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==
dependencies:
"@colors/colors" "1.6.0"
"@types/triple-beam" "^1.3.2"
@@ -3334,19 +2005,7 @@ long@^4.0.0:
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
-long@^5.0.0, long@^5.3.2:
- version "5.3.2"
- resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83"
- integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==
-
-loose-envify@^1.1.0, loose-envify@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
- integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
- dependencies:
- js-tokens "^3.0.0 || ^4.0.0"
-
-lop@^0.4.2:
+lop@^0.4.1:
version "0.4.2"
resolved "https://registry.yarnpkg.com/lop/-/lop-0.4.2.tgz#c9c2f958a39b9da1c2f36ca9ad66891a9fe84640"
integrity sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==
@@ -3355,11 +2014,6 @@ lop@^0.4.2:
option "~0.2.1"
underscore "^1.13.1"
-lru-cache@^10.2.0:
- version "10.2.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3"
- integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==
-
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
@@ -3367,15 +2021,15 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
-lucide-react@^0.363.0:
- version "0.363.0"
- resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.363.0.tgz#2bb1f9d09b830dda86f5118fcd097f87247fe0e3"
- integrity sha512-AlsfPCsXQyQx7wwsIgzcKOL9LwC498LIMAo+c0Es5PkHJa33xwmYAkkSoKoJWWWSYQEStqu58/jT4tL2gi32uQ==
+make-error@^1.1.1:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
-mammoth@^1.9.1:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/mammoth/-/mammoth-1.9.1.tgz#b544c26747a412b5b00a11aa80477c6796860eaf"
- integrity sha512-4S2v1eP4Yo4so0zGNicJKcP93su3wDPcUk+xvkjSG75nlNjSkDJu8BhWQ+e54BROM0HfA6nPzJn12S6bq2Ko6w==
+mammoth@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/mammoth/-/mammoth-1.8.0.tgz#d8f1b0d3a0355fda129270346e9dc853f223028f"
+ integrity sha512-pJNfxSk9IEGVpau+tsZFz22ofjUsl2mnA5eT8PjPs2n0BP+rhVte4Nez6FdgEuxv3IGI3afiV46ImKqTGDVlbA==
dependencies:
"@xmldom/xmldom" "^0.8.6"
argparse "~1.0.3"
@@ -3383,182 +2037,164 @@ mammoth@^1.9.1:
bluebird "~3.4.0"
dingbat-to-unicode "^1.0.1"
jszip "^3.7.1"
- lop "^0.4.2"
+ lop "^0.4.1"
path-is-absolute "^1.0.0"
underscore "^1.13.1"
xmlbuilder "^10.0.0"
-markdown-to-jsx@^7.7.2:
- version "7.7.2"
- resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.7.2.tgz#59c1dd64f48b53719311ab140be3cd51cdabccd3"
- integrity sha512-N3AKfYRvxNscvcIH6HDnDKILp4S8UWbebp+s92Y8SwIq0CuSbLW4Jgmrbjku3CWKjTQO0OyIMS6AhzqrwjEa3g==
-
-merge2@^1.3.0, merge2@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
- integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
-
-micromatch@^4.0.4, micromatch@^4.0.5:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
- integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+md5@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f"
+ integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==
dependencies:
- braces "^3.0.2"
- picomatch "^2.3.1"
+ charenc "0.0.2"
+ crypt "0.0.2"
+ is-buffer "~1.1.6"
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
mime-db@1.52.0:
version "1.52.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-mime-types@^2.1.12:
+mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
dependencies:
mime-db "1.52.0"
+mime@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
mimic-response@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
-minimatch@9.0.3:
- version "9.0.3"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
- integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
- dependencies:
- brace-expansion "^2.0.1"
-
-minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
dependencies:
brace-expansion "^1.1.7"
-minimatch@^9.0.1:
- version "9.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51"
- integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==
- dependencies:
- brace-expansion "^2.0.1"
-
minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
- integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
-
mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
version "0.5.3"
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+mkdirp@^0.5.4:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
+ integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
+ dependencies:
+ minimist "^1.2.6"
+
+ml-array-mean@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/ml-array-mean/-/ml-array-mean-1.1.6.tgz#d951a700dc8e3a17b3e0a583c2c64abd0c619c56"
+ integrity sha512-MIdf7Zc8HznwIisyiJGRH9tRigg3Yf4FldW8DxKxpCCv/g5CafTw0RRu51nojVEOXuCQC7DRVVu5c7XXO/5joQ==
+ dependencies:
+ ml-array-sum "^1.1.6"
+
+ml-array-sum@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/ml-array-sum/-/ml-array-sum-1.1.6.tgz#d1d89c20793cd29c37b09d40e85681aa4515a955"
+ integrity sha512-29mAh2GwH7ZmiRnup4UyibQZB9+ZLyMShvt4cH4eTK+cL2oEMIZFnSyB3SS8MlsTh6q/w/yh48KmqLxmovN4Dw==
+ dependencies:
+ is-any-array "^2.0.0"
+
+ml-distance-euclidean@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ml-distance-euclidean/-/ml-distance-euclidean-2.0.0.tgz#3a668d236649d1b8fec96380b9435c6f42c9a817"
+ integrity sha512-yC9/2o8QF0A3m/0IXqCTXCzz2pNEzvmcE/9HFKOZGnTjatvBbsn4lWYJkxENkA4Ug2fnYl7PXQxnPi21sgMy/Q==
+
+ml-distance@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/ml-distance/-/ml-distance-4.0.1.tgz#4741d17a1735888c5388823762271dfe604bd019"
+ integrity sha512-feZ5ziXs01zhyFUUUeZV5hwc0f5JW0Sh0ckU1koZe/wdVkJdGxcP06KNQuF0WBTj8FttQUzcvQcpcrOp/XrlEw==
+ dependencies:
+ ml-array-mean "^1.1.6"
+ ml-distance-euclidean "^2.0.0"
+ ml-tree-similarity "^1.0.0"
+
+ml-tree-similarity@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ml-tree-similarity/-/ml-tree-similarity-1.0.0.tgz#24705a107e32829e24d945e87219e892159c53f0"
+ integrity sha512-XJUyYqjSuUQkNQHMscr6tcjldsOoAekxADTplt40QKfwW6nd++1wHWV9AArl0Zvw/TIHgNaZZNvr8QGvE8wLRg==
+ dependencies:
+ binary-search "^1.3.5"
+ num-sort "^2.0.0"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
+
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-ms@^2.1.1:
+ms@2.1.3, ms@^2.0.0, ms@^2.1.1:
version "2.1.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+multer@^1.4.5-lts.1:
+ version "1.4.5-lts.1"
+ resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.5-lts.1.tgz#803e24ad1984f58edffbc79f56e305aec5cfd1ac"
+ integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==
+ dependencies:
+ append-field "^1.0.0"
+ busboy "^1.0.0"
+ concat-stream "^1.5.2"
+ mkdirp "^0.5.4"
+ object-assign "^4.1.1"
+ type-is "^1.6.4"
+ xtend "^4.0.0"
+
mustache@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64"
integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
-mz@^2.7.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
- integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
- dependencies:
- any-promise "^1.0.0"
- object-assign "^4.0.1"
- thenify-all "^1.0.0"
+napi-build-utils@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
+ integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
-nanoid@^3.3.6:
- version "3.3.10"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.10.tgz#7bc882237698ef787d5cbba109e3b0168ba6e7b1"
- integrity sha512-vSJJTG+t/dIKAUhUDw/dLdZ9s//5OxcHqLaDWWrW4Cdq7o6tdLIczUkMXt2MBNmk6sJRZBZRXVixs7URY1CmIg==
-
-nanoid@^3.3.7:
- version "3.3.7"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
- integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
-
-napi-build-utils@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e"
- integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==
-
-natural-compare@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
- integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
-
-next-themes@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.3.0.tgz#b4d2a866137a67d42564b07f3a3e720e2ff3871a"
- integrity sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==
-
-next@^15.2.2:
- version "15.2.2"
- resolved "https://registry.yarnpkg.com/next/-/next-15.2.2.tgz#e3941a0e0e76cfe1880b57452807489e0546e3a2"
- integrity sha512-dgp8Kcx5XZRjMw2KNwBtUzhngRaURPioxoNIVl5BOyJbhi9CUgEtKDO7fx5wh8Z8vOVX1nYZ9meawJoRrlASYA==
- dependencies:
- "@next/env" "15.2.2"
- "@swc/counter" "0.1.3"
- "@swc/helpers" "0.5.15"
- busboy "1.6.0"
- caniuse-lite "^1.0.30001579"
- postcss "8.4.31"
- styled-jsx "5.1.6"
- optionalDependencies:
- "@next/swc-darwin-arm64" "15.2.2"
- "@next/swc-darwin-x64" "15.2.2"
- "@next/swc-linux-arm64-gnu" "15.2.2"
- "@next/swc-linux-arm64-musl" "15.2.2"
- "@next/swc-linux-x64-gnu" "15.2.2"
- "@next/swc-linux-x64-musl" "15.2.2"
- "@next/swc-win32-arm64-msvc" "15.2.2"
- "@next/swc-win32-x64-msvc" "15.2.2"
- sharp "^0.33.5"
-
-nice-grpc-client-middleware-retry@^3.1.11:
- version "3.1.11"
- resolved "https://registry.yarnpkg.com/nice-grpc-client-middleware-retry/-/nice-grpc-client-middleware-retry-3.1.11.tgz#4fc0128b891d184b6c98af3bfd6aca1b608a3fd1"
- integrity sha512-xW/imz/kNG2g0DwTfH2eYEGrg1chSLrXtvGp9fg2qkhTgGFfAS/Pq3+t+9G8KThcC4hK/xlEyKvZWKk++33S6A==
- dependencies:
- abort-controller-x "^0.4.0"
- nice-grpc-common "^2.0.2"
-
-nice-grpc-common@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/nice-grpc-common/-/nice-grpc-common-2.0.2.tgz#e6aeebb2bd19d87114b351e291e30d79dd38acf7"
- integrity sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==
- dependencies:
- ts-error "^1.0.6"
-
-nice-grpc@^2.1.12:
- version "2.1.12"
- resolved "https://registry.yarnpkg.com/nice-grpc/-/nice-grpc-2.1.12.tgz#56ffdcc4d5bc3d0271c176210680c4bd10c5149b"
- integrity sha512-J1n4Wg+D3IhRhGQb+iqh2OpiM0GzTve/kf2lnlW4S+xczmIEd0aHUDV1OsJ5a3q8GSTqJf+s4Rgg1M8uJltarw==
- dependencies:
- "@grpc/grpc-js" "^1.13.1"
- abort-controller-x "^0.4.0"
- nice-grpc-common "^2.0.2"
+negotiator@0.6.3:
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+ integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
node-abi@^3.3.0:
- version "3.74.0"
- resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.74.0.tgz#5bfb4424264eaeb91432d2adb9da23c63a301ed0"
- integrity sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==
+ version "3.62.0"
+ resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.62.0.tgz#017958ed120f89a3a14a7253da810f5d724e3f36"
+ integrity sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==
dependencies:
semver "^7.3.5"
@@ -3567,117 +2203,74 @@ node-addon-api@^6.1.0:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76"
integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==
+node-domexception@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
+ integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
+
node-ensure@^0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7"
integrity sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw==
-node-fetch@^2.7.0:
+node-fetch@^2.6.7:
version "2.7.0"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
dependencies:
whatwg-url "^5.0.0"
-node-releases@^2.0.14:
- version "2.0.14"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
- integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
+nodemon@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.0.tgz#ff7394f2450eb6a5e96fe4180acd5176b29799c9"
+ integrity sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==
+ dependencies:
+ chokidar "^3.5.2"
+ debug "^4"
+ ignore-by-default "^1.0.1"
+ minimatch "^3.1.2"
+ pstree.remy "^1.1.8"
+ semver "^7.5.3"
+ simple-update-notifier "^2.0.0"
+ supports-color "^5.5.0"
+ touch "^3.1.0"
+ undefsafe "^2.0.5"
+
+nopt@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
+ integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==
+ dependencies:
+ abbrev "1"
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-normalize-range@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
- integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
+num-sort@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/num-sort/-/num-sort-2.1.0.tgz#1cbb37aed071329fdf41151258bc011898577a9b"
+ integrity sha512-1MQz1Ed8z2yckoBeSfkQHHO9K1yDRxxtotKSJ9yvcTUUxSvfvzEq5GwBrjjHEpMlq/k5gvXdmJ1SbYxWtpNoVg==
-object-assign@^4.0.1, object-assign@^4.1.1:
+object-assign@^4, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-object-hash@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
- integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==
-
object-inspect@^1.13.1:
version "1.13.1"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
-object-keys@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
- integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-
-object.assign@^4.1.4, object.assign@^4.1.5:
- version "4.1.5"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0"
- integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==
+on-finished@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
+ integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
dependencies:
- call-bind "^1.0.5"
- define-properties "^1.2.1"
- has-symbols "^1.0.3"
- object-keys "^1.1.1"
+ ee-first "1.1.1"
-object.entries@^1.1.7:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41"
- integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-object-atoms "^1.0.0"
-
-object.fromentries@^2.0.7:
- version "2.0.8"
- resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65"
- integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-abstract "^1.23.2"
- es-object-atoms "^1.0.0"
-
-object.groupby@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e"
- integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-abstract "^1.23.2"
-
-object.hasown@^1.1.3:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc"
- integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==
- dependencies:
- define-properties "^1.2.1"
- es-abstract "^1.23.2"
- es-object-atoms "^1.0.0"
-
-object.values@^1.1.6, object.values@^1.1.7:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b"
- integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-object-atoms "^1.0.0"
-
-ollama@^0.5.12:
- version "0.5.16"
- resolved "https://registry.yarnpkg.com/ollama/-/ollama-0.5.16.tgz#cb695b4aab6f6c07236a04b3aee40160f4f9e892"
- integrity sha512-OEbxxOIUZtdZgOaTPAULo051F5y+Z1vosxEYOoABPnQKeW7i4O8tJNlxCB+xioyoorVqgjkdj+TA1f1Hy2ug/w==
- dependencies:
- whatwg-fetch "^3.6.20"
-
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
+once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
@@ -3722,10 +2315,34 @@ onnxruntime-web@1.14.0:
onnxruntime-common "~1.14.0"
platform "^1.3.6"
-openai@^5.3.0:
- version "5.10.1"
- resolved "https://registry.yarnpkg.com/openai/-/openai-5.10.1.tgz#4535a9603f4d03b2392bb2ca41a618a80fdcfacd"
- integrity sha512-fq6xVfv1/gpLbsj8fArEt3b6B9jBxdhAK+VJ+bDvbUvNd+KTLlA3bnDeYZaBsGH9LUhJ1M1yXfp9sEyBLMx6eA==
+openai@^4.26.0:
+ version "4.31.0"
+ resolved "https://registry.yarnpkg.com/openai/-/openai-4.31.0.tgz#5d96045c4eb244fa21f0fff0981043a2c9f09e8c"
+ integrity sha512-JebkRnRGEGLnJt3+bJ5B7au8nBeZvJjs9baVxDmUZ5+BgafAdy6KDxJGSuyaw/IA+ErqY3jmOH5cDC2mCDJF2w==
+ dependencies:
+ "@types/node" "^18.11.18"
+ "@types/node-fetch" "^2.6.4"
+ abort-controller "^3.0.0"
+ agentkeepalive "^4.2.1"
+ digest-fetch "^1.3.0"
+ form-data-encoder "1.7.2"
+ formdata-node "^4.3.2"
+ node-fetch "^2.6.7"
+ web-streams-polyfill "^3.2.1"
+
+openai@^4.41.1, openai@^4.49.1:
+ version "4.52.2"
+ resolved "https://registry.yarnpkg.com/openai/-/openai-4.52.2.tgz#5d67271f3df84c0b54676b08990eaa9402151759"
+ integrity sha512-mMc0XgFuVSkcm0lRIi8zaw++otC82ZlfkCur1qguXYWPETr/+ZwL9A/vvp3YahX+shpaT6j03dwsmUyLAfmEfg==
+ dependencies:
+ "@types/node" "^18.11.18"
+ "@types/node-fetch" "^2.6.4"
+ abort-controller "^3.0.0"
+ agentkeepalive "^4.2.1"
+ form-data-encoder "1.7.2"
+ formdata-node "^4.3.2"
+ node-fetch "^2.6.7"
+ web-streams-polyfill "^3.2.1"
openapi-types@^12.1.3:
version "12.1.3"
@@ -3737,37 +2354,11 @@ option@~0.2.1:
resolved "https://registry.yarnpkg.com/option/-/option-0.2.4.tgz#fd475cdf98dcabb3cb397a3ba5284feb45edbfe4"
integrity sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==
-optionator@^0.9.3:
- version "0.9.3"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
- integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
- dependencies:
- "@aashutoshrathi/word-wrap" "^1.2.3"
- deep-is "^0.1.3"
- fast-levenshtein "^2.0.6"
- levn "^0.4.1"
- prelude-ls "^1.2.1"
- type-check "^0.4.0"
-
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
-p-limit@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
- integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
- dependencies:
- yocto-queue "^0.1.0"
-
-p-locate@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
- integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
- dependencies:
- p-limit "^3.0.2"
-
p-queue@^6.6.2:
version "6.6.2"
resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426"
@@ -3796,13 +2387,6 @@ pako@~1.0.2:
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
-parent-module@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
- integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
- dependencies:
- callsites "^3.0.0"
-
parseley@^0.12.0:
version "0.12.1"
resolved "https://registry.yarnpkg.com/parseley/-/parseley-0.12.1.tgz#4afd561d50215ebe259e3e7a853e62f600683aef"
@@ -3811,38 +2395,20 @@ parseley@^0.12.0:
leac "^0.6.0"
peberminta "^0.9.0"
-path-exists@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
- integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+parseurl@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
+ integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-path-key@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
- integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-
-path-parse@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
- integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-
-path-scurry@^1.10.1, path-scurry@^1.10.2:
- version "1.10.2"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7"
- integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==
- dependencies:
- lru-cache "^10.2.0"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-
-path-type@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
- integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
pdf-parse@^1.1.1:
version "1.1.1"
@@ -3857,122 +2423,27 @@ peberminta@^0.9.0:
resolved "https://registry.yarnpkg.com/peberminta/-/peberminta-0.9.0.tgz#8ec9bc0eb84b7d368126e71ce9033501dca2a352"
integrity sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
- integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
-
-picocolors@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
- integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
-
-picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
+picomatch@^2.0.4, picomatch@^2.2.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-pify@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
- integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
-
-pirates@^4.0.1:
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9"
- integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
-
platform@^1.3.6:
version "1.3.6"
resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7"
integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==
-possible-typed-array-names@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f"
- integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==
-
-postcss-import@^15.1.0:
- version "15.1.0"
- resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70"
- integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==
- dependencies:
- postcss-value-parser "^4.0.0"
- read-cache "^1.0.0"
- resolve "^1.1.7"
-
-postcss-js@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2"
- integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==
- dependencies:
- camelcase-css "^2.0.1"
-
-postcss-load-config@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3"
- integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==
- dependencies:
- lilconfig "^3.0.0"
- yaml "^2.3.4"
-
-postcss-nested@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c"
- integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==
- dependencies:
- postcss-selector-parser "^6.0.11"
-
-postcss-selector-parser@6.0.10:
- version "6.0.10"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
- integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
- dependencies:
- cssesc "^3.0.0"
- util-deprecate "^1.0.2"
-
-postcss-selector-parser@^6.0.11:
- version "6.0.16"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04"
- integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==
- dependencies:
- cssesc "^3.0.0"
- util-deprecate "^1.0.2"
-
-postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
- integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
-
-postcss@8.4.31:
- version "8.4.31"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
- integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
- dependencies:
- nanoid "^3.3.6"
- picocolors "^1.0.0"
- source-map-js "^1.0.2"
-
-postcss@^8, postcss@^8.4.23:
- version "8.4.38"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e"
- integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
- dependencies:
- nanoid "^3.3.7"
- picocolors "^1.0.0"
- source-map-js "^1.2.0"
-
prebuild-install@^7.1.1:
- version "7.1.3"
- resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec"
- integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056"
+ integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==
dependencies:
detect-libc "^2.0.0"
expand-template "^2.0.3"
github-from-package "0.0.0"
minimist "^1.2.3"
mkdirp-classic "^0.5.3"
- napi-build-utils "^2.0.0"
+ napi-build-utils "^1.0.1"
node-abi "^3.3.0"
pump "^3.0.0"
rc "^1.2.7"
@@ -3980,11 +2451,6 @@ prebuild-install@^7.1.1:
tar-fs "^2.0.0"
tunnel-agent "^0.6.0"
-prelude-ls@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
- integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
-
prettier@^3.2.5:
version "3.2.5"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368"
@@ -3995,15 +2461,6 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-prop-types@^15.8.1:
- version "15.8.1"
- resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
- integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
- dependencies:
- loose-envify "^1.4.0"
- object-assign "^4.1.1"
- react-is "^16.13.1"
-
protobufjs@^6.8.8:
version "6.11.4"
resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa"
@@ -4023,53 +2480,58 @@ protobufjs@^6.8.8:
"@types/node" ">=13.7.0"
long "^4.0.0"
-protobufjs@^7.2.5:
- version "7.5.3"
- resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.5.3.tgz#13f95a9e3c84669995ec3652db2ac2fb00b89363"
- integrity sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==
+proxy-addr@~2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
+ integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
dependencies:
- "@protobufjs/aspromise" "^1.1.2"
- "@protobufjs/base64" "^1.1.2"
- "@protobufjs/codegen" "^2.0.4"
- "@protobufjs/eventemitter" "^1.1.0"
- "@protobufjs/fetch" "^1.1.0"
- "@protobufjs/float" "^1.0.2"
- "@protobufjs/inquire" "^1.1.0"
- "@protobufjs/path" "^1.1.2"
- "@protobufjs/pool" "^1.1.0"
- "@protobufjs/utf8" "^1.1.0"
- "@types/node" ">=13.7.0"
- long "^5.0.0"
+ forwarded "0.2.0"
+ ipaddr.js "1.9.1"
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+pstree.remy@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
+ integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
+
pump@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8"
- integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
dependencies:
end-of-stream "^1.1.0"
once "^1.3.1"
-punycode@^2.1.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
- integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
-
-queue-microtask@^1.2.2:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
- integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
-
-raf@^3.4.1:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
- integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
+qs@6.11.0:
+ version "6.11.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
+ integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
dependencies:
- performance-now "^2.1.0"
+ side-channel "^1.0.4"
+
+queue-tick@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142"
+ integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==
+
+range-parser@~1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
+ integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
+
+raw-body@2.5.2:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
+ integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
rc@^1.2.7:
version "1.2.8"
@@ -4081,57 +2543,7 @@ rc@^1.2.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
-react-dom@^18:
- version "18.2.0"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
- integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
- dependencies:
- loose-envify "^1.1.0"
- scheduler "^0.23.0"
-
-react-is@^16.13.1:
- version "16.13.1"
- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
- integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-
-react-text-to-speech@^0.14.5:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/react-text-to-speech/-/react-text-to-speech-0.14.5.tgz#f918786ab283311535682011045bd49777193300"
- integrity sha512-3brr/IrK/5YTtOZSTo+Y8b+dnWelzfZiDZvkXnOct1e7O7fgA/h9bYAVrtwSRo/VxKfdw+wh6glkj6M0mlQuQQ==
-
-react-textarea-autosize@^8.5.3:
- version "8.5.3"
- resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz#d1e9fe760178413891484847d3378706052dd409"
- integrity sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==
- dependencies:
- "@babel/runtime" "^7.20.13"
- use-composed-ref "^1.3.0"
- use-latest "^1.2.1"
-
-react@^18:
- version "18.2.0"
- resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
- integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
- dependencies:
- loose-envify "^1.1.0"
-
-read-cache@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774"
- integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==
- dependencies:
- pify "^2.3.0"
-
-readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.2:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
- integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-readable-stream@~2.3.6:
+readable-stream@^2.2.2, readable-stream@~2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
@@ -4144,6 +2556,15 @@ readable-stream@~2.3.6:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
+readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
@@ -4151,112 +2572,17 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
-reflect.getprototypeof@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859"
- integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-abstract "^1.23.1"
- es-errors "^1.3.0"
- get-intrinsic "^1.2.4"
- globalthis "^1.0.3"
- which-builtin-type "^1.1.3"
-
-regenerator-runtime@^0.13.7:
- version "0.13.11"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
- integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
-
-regenerator-runtime@^0.14.0:
- version "0.14.1"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
- integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
-
-regexp.prototype.flags@^1.5.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334"
- integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==
- dependencies:
- call-bind "^1.0.6"
- define-properties "^1.2.1"
- es-errors "^1.3.0"
- set-function-name "^2.0.1"
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
- integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
-
-resolve-from@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
- integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
-
resolve-pkg-maps@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
-resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4:
- version "1.22.8"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
- integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
- dependencies:
- is-core-module "^2.13.0"
- path-parse "^1.0.7"
- supports-preserve-symlinks-flag "^1.0.0"
-
-resolve@^2.0.0-next.5:
- version "2.0.0-next.5"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c"
- integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==
- dependencies:
- is-core-module "^2.13.0"
- path-parse "^1.0.7"
- supports-preserve-symlinks-flag "^1.0.0"
-
retry@^0.13.1:
version "0.13.1"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==
-reusify@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
- integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
-
-rgbcolor@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d"
- integrity sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==
-
-rimraf@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
- integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
- dependencies:
- glob "^7.1.3"
-
-run-parallel@^1.1.9:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
- integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
- dependencies:
- queue-microtask "^1.2.2"
-
-safe-array-concat@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb"
- integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==
- dependencies:
- call-bind "^1.0.7"
- get-intrinsic "^1.2.4"
- has-symbols "^1.0.3"
- isarray "^2.0.5"
-
-safe-buffer@^5.0.1, safe-buffer@~5.2.0:
+safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -4266,26 +2592,15 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-safe-regex-test@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377"
- integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==
- dependencies:
- call-bind "^1.0.6"
- es-errors "^1.3.0"
- is-regex "^1.1.4"
-
safe-stable-stringify@^2.3.1:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd"
- integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886"
+ integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==
-scheduler@^0.23.0:
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
- integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
- dependencies:
- loose-envify "^1.1.0"
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
selderee@^0.11.0:
version "0.11.0"
@@ -4294,23 +2609,47 @@ selderee@^0.11.0:
dependencies:
parseley "^0.12.0"
-semver@^6.3.1:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
- integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-
-semver@^7.3.5, semver@^7.6.2, semver@^7.6.3:
- version "7.7.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
- integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
-
-semver@^7.5.4:
+semver@^7.3.5, semver@^7.5.3, semver@^7.5.4:
version "7.6.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
dependencies:
lru-cache "^6.0.0"
+semver@^7.6.3:
+ version "7.6.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
+ integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
+
+send@0.18.0:
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
+ integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
+ dependencies:
+ debug "2.6.9"
+ depd "2.0.0"
+ destroy "1.2.0"
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ etag "~1.8.1"
+ fresh "0.5.2"
+ http-errors "2.0.0"
+ mime "1.6.0"
+ ms "2.1.3"
+ on-finished "2.4.1"
+ range-parser "~1.2.1"
+ statuses "2.0.1"
+
+serve-static@1.15.0:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
+ integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
+ dependencies:
+ encodeurl "~1.0.2"
+ escape-html "~1.0.3"
+ parseurl "~1.3.3"
+ send "0.18.0"
+
set-function-length@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
@@ -4323,21 +2662,16 @@ set-function-length@^1.2.1:
gopd "^1.0.1"
has-property-descriptors "^1.0.2"
-set-function-name@^2.0.1, set-function-name@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985"
- integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==
- dependencies:
- define-data-property "^1.1.4"
- es-errors "^1.3.0"
- functions-have-names "^1.2.3"
- has-property-descriptors "^1.0.2"
-
setimmediate@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
+setprototypeof@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+ integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
sharp@^0.32.0:
version "0.32.6"
resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a"
@@ -4352,53 +2686,7 @@ sharp@^0.32.0:
tar-fs "^3.0.4"
tunnel-agent "^0.6.0"
-sharp@^0.33.5:
- version "0.33.5"
- resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.5.tgz#13e0e4130cc309d6a9497596715240b2ec0c594e"
- integrity sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==
- dependencies:
- color "^4.2.3"
- detect-libc "^2.0.3"
- semver "^7.6.3"
- optionalDependencies:
- "@img/sharp-darwin-arm64" "0.33.5"
- "@img/sharp-darwin-x64" "0.33.5"
- "@img/sharp-libvips-darwin-arm64" "1.0.4"
- "@img/sharp-libvips-darwin-x64" "1.0.4"
- "@img/sharp-libvips-linux-arm" "1.0.5"
- "@img/sharp-libvips-linux-arm64" "1.0.4"
- "@img/sharp-libvips-linux-s390x" "1.0.4"
- "@img/sharp-libvips-linux-x64" "1.0.4"
- "@img/sharp-libvips-linuxmusl-arm64" "1.0.4"
- "@img/sharp-libvips-linuxmusl-x64" "1.0.4"
- "@img/sharp-linux-arm" "0.33.5"
- "@img/sharp-linux-arm64" "0.33.5"
- "@img/sharp-linux-s390x" "0.33.5"
- "@img/sharp-linux-x64" "0.33.5"
- "@img/sharp-linuxmusl-arm64" "0.33.5"
- "@img/sharp-linuxmusl-x64" "0.33.5"
- "@img/sharp-wasm32" "0.33.5"
- "@img/sharp-win32-ia32" "0.33.5"
- "@img/sharp-win32-x64" "0.33.5"
-
-shebang-command@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
- integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
- dependencies:
- shebang-regex "^3.0.0"
-
-shebang-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
- integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-
-shell-quote@^1.8.1:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a"
- integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==
-
-side-channel@^1.0.4, side-channel@^1.0.6:
+side-channel@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
@@ -4408,11 +2696,6 @@ side-channel@^1.0.4, side-channel@^1.0.6:
get-intrinsic "^1.2.4"
object-inspect "^1.13.1"
-signal-exit@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
- integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-
simple-concat@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
@@ -4434,30 +2717,12 @@ simple-swizzle@^0.2.2:
dependencies:
is-arrayish "^0.3.1"
-simple-wcswidth@^1.0.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/simple-wcswidth/-/simple-wcswidth-1.1.2.tgz#66722f37629d5203f9b47c5477b1225b85d6525b"
- integrity sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==
-
-slash@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
- integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-
-sonner@^1.4.41:
- version "1.4.41"
- resolved "https://registry.yarnpkg.com/sonner/-/sonner-1.4.41.tgz#ff085ae4f4244713daf294959beaa3e90f842d2c"
- integrity sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ==
-
-source-map-js@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
- integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
-
-source-map-js@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
- integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
+simple-update-notifier@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb"
+ integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==
+ dependencies:
+ semver "^7.5.3"
source-map-support@^0.5.21:
version "0.5.21"
@@ -4482,99 +2747,26 @@ stack-trace@0.0.x:
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==
-stackblur-canvas@^2.0.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz#af931277d0b5096df55e1f91c530043e066989b6"
- integrity sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==
+statuses@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+ integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
streamsearch@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
-streamx@^2.15.0, streamx@^2.21.0:
- version "2.22.0"
- resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.22.0.tgz#cd7b5e57c95aaef0ff9b2aef7905afa62ec6e4a7"
- integrity sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==
+streamx@^2.15.0, streamx@^2.16.1:
+ version "2.16.1"
+ resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614"
+ integrity sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==
dependencies:
- fast-fifo "^1.3.2"
- text-decoder "^1.1.0"
+ fast-fifo "^1.1.0"
+ queue-tick "^1.0.1"
optionalDependencies:
bare-events "^2.2.0"
-"string-width-cjs@npm:string-width@^4.2.0":
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string-width@^5.0.1, string-width@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
- integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
- dependencies:
- eastasianwidth "^0.2.0"
- emoji-regex "^9.2.2"
- strip-ansi "^7.0.1"
-
-string.prototype.matchall@^4.0.10:
- version "4.0.11"
- resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a"
- integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-abstract "^1.23.2"
- es-errors "^1.3.0"
- es-object-atoms "^1.0.0"
- get-intrinsic "^1.2.4"
- gopd "^1.0.1"
- has-symbols "^1.0.3"
- internal-slot "^1.0.7"
- regexp.prototype.flags "^1.5.2"
- set-function-name "^2.0.2"
- side-channel "^1.0.6"
-
-string.prototype.trim@^1.2.9:
- version "1.2.9"
- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4"
- integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-abstract "^1.23.0"
- es-object-atoms "^1.0.0"
-
-string.prototype.trimend@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229"
- integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-object-atoms "^1.0.0"
-
-string.prototype.trimstart@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde"
- integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==
- dependencies:
- call-bind "^1.0.7"
- define-properties "^1.2.1"
- es-object-atoms "^1.0.0"
-
string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
@@ -4589,133 +2781,27 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-ansi@^6.0.0, strip-ansi@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-ansi@^7.0.1:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
- integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
- dependencies:
- ansi-regex "^6.0.1"
-
-strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
- integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
-
-strip-json-comments@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
- integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
-
strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
-strnum@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4"
- integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==
+strnum@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db"
+ integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==
-styled-jsx@5.1.6:
- version "5.1.6"
- resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.6.tgz#83b90c077e6c6a80f7f5e8781d0f311b2fe41499"
- integrity sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==
+supports-color@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
dependencies:
- client-only "0.0.1"
-
-sucrase@^3.32.0:
- version "3.35.0"
- resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263"
- integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==
- dependencies:
- "@jridgewell/gen-mapping" "^0.3.2"
- commander "^4.0.0"
- glob "^10.3.10"
- lines-and-columns "^1.1.6"
- mz "^2.7.0"
- pirates "^4.0.1"
- ts-interface-checker "^0.1.9"
-
-supports-color@^7.1.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
- integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
- dependencies:
- has-flag "^4.0.0"
-
-supports-preserve-symlinks-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
- integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-
-svg-pathdata@^6.0.3:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz#80b0e0283b652ccbafb69ad4f8f73e8d3fbf2cac"
- integrity sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==
-
-tabbable@^6.0.0:
- version "6.2.0"
- resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97"
- integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==
-
-tailwind-merge@^2.2.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.2.2.tgz#87341e7604f0e20499939e152cd2841f41f7a3df"
- integrity sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==
- dependencies:
- "@babel/runtime" "^7.24.0"
-
-tailwindcss@^3.3.0:
- version "3.4.3"
- resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.3.tgz#be48f5283df77dfced705451319a5dffb8621519"
- integrity sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==
- dependencies:
- "@alloc/quick-lru" "^5.2.0"
- arg "^5.0.2"
- chokidar "^3.5.3"
- didyoumean "^1.2.2"
- dlv "^1.1.3"
- fast-glob "^3.3.0"
- glob-parent "^6.0.2"
- is-glob "^4.0.3"
- jiti "^1.21.0"
- lilconfig "^2.1.0"
- micromatch "^4.0.5"
- normalize-path "^3.0.0"
- object-hash "^3.0.0"
- picocolors "^1.0.0"
- postcss "^8.4.23"
- postcss-import "^15.1.0"
- postcss-js "^4.0.1"
- postcss-load-config "^4.0.1"
- postcss-nested "^6.0.1"
- postcss-selector-parser "^6.0.11"
- resolve "^1.22.2"
- sucrase "^3.32.0"
-
-tapable@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
- integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
+ has-flag "^3.0.0"
tar-fs@^2.0.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.2.tgz#425f154f3404cb16cb8ff6e671d45ab2ed9596c5"
- integrity sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
+ integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
dependencies:
chownr "^1.1.1"
mkdirp-classic "^0.5.2"
@@ -4723,15 +2809,15 @@ tar-fs@^2.0.0:
tar-stream "^2.1.4"
tar-fs@^3.0.4:
- version "3.0.8"
- resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.8.tgz#8f62012537d5ff89252d01e48690dc4ebed33ab7"
- integrity sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217"
+ integrity sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==
dependencies:
pump "^3.0.0"
tar-stream "^3.1.5"
optionalDependencies:
- bare-fs "^4.0.1"
- bare-path "^3.0.0"
+ bare-fs "^2.1.1"
+ bare-path "^2.1.0"
tar-stream@^2.1.4:
version "2.2.0"
@@ -4753,44 +2839,11 @@ tar-stream@^3.1.5:
fast-fifo "^1.2.0"
streamx "^2.15.0"
-text-decoder@^1.1.0:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65"
- integrity sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==
- dependencies:
- b4a "^1.6.4"
-
text-hex@1.0.x:
version "1.0.0"
resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5"
integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==
-text-segmentation@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943"
- integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==
- dependencies:
- utrie "^1.0.2"
-
-text-table@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
- integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
-
-thenify-all@^1.0.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
- integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
- dependencies:
- thenify ">= 3.1.0 < 4"
-
-"thenify@>= 3.1.0 < 4":
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
- integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
- dependencies:
- any-promise "^1.0.0"
-
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -4798,6 +2851,18 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
+toidentifier@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+ integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+
+touch@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
+ integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
+ dependencies:
+ nopt "~1.0.10"
+
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
@@ -4808,35 +2873,24 @@ triple-beam@^1.3.0:
resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984"
integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==
-ts-api-utils@^1.0.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
- integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
-
-ts-error@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/ts-error/-/ts-error-1.0.6.tgz#277496f2a28de6c184cfce8dfd5cdd03a4e6b0fc"
- integrity sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==
-
-ts-interface-checker@^0.1.9:
- version "0.1.13"
- resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
- integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
-
-tsconfig-paths@^3.15.0:
- version "3.15.0"
- resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4"
- integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==
+ts-node@^10.9.2:
+ version "10.9.2"
+ resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f"
+ integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==
dependencies:
- "@types/json5" "^0.0.29"
- json5 "^1.0.2"
- minimist "^1.2.6"
- strip-bom "^3.0.0"
-
-tslib@^2.4.0, tslib@^2.8.0:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
- integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
+ "@cspotcode/source-map-support" "^0.8.0"
+ "@tsconfig/node10" "^1.0.7"
+ "@tsconfig/node12" "^1.0.7"
+ "@tsconfig/node14" "^1.0.0"
+ "@tsconfig/node16" "^1.0.2"
+ acorn "^8.4.1"
+ acorn-walk "^8.1.1"
+ arg "^4.1.0"
+ create-require "^1.1.0"
+ diff "^4.0.1"
+ make-error "^1.1.1"
+ v8-compile-cache-lib "^3.0.1"
+ yn "3.1.1"
tunnel-agent@^0.6.0:
version "0.6.0"
@@ -4845,76 +2899,28 @@ tunnel-agent@^0.6.0:
dependencies:
safe-buffer "^5.0.1"
-type-check@^0.4.0, type-check@~0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
- integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+type-is@^1.6.4, type-is@~1.6.18:
+ version "1.6.18"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
+ integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
dependencies:
- prelude-ls "^1.2.1"
+ media-typer "0.3.0"
+ mime-types "~2.1.24"
-type-fest@^0.20.2:
- version "0.20.2"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
- integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
-typed-array-buffer@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3"
- integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==
- dependencies:
- call-bind "^1.0.7"
- es-errors "^1.3.0"
- is-typed-array "^1.1.13"
+typescript@^5.4.3:
+ version "5.4.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff"
+ integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==
-typed-array-byte-length@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67"
- integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==
- dependencies:
- call-bind "^1.0.7"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-proto "^1.0.3"
- is-typed-array "^1.1.13"
-
-typed-array-byte-offset@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063"
- integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==
- dependencies:
- available-typed-arrays "^1.0.7"
- call-bind "^1.0.7"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-proto "^1.0.3"
- is-typed-array "^1.1.13"
-
-typed-array-length@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3"
- integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==
- dependencies:
- call-bind "^1.0.7"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-proto "^1.0.3"
- is-typed-array "^1.1.13"
- possible-typed-array-names "^1.0.0"
-
-typescript@^5:
- version "5.4.4"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952"
- integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==
-
-unbox-primitive@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
- integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
- dependencies:
- call-bind "^1.0.2"
- has-bigints "^1.0.2"
- has-symbols "^1.0.3"
- which-boxed-primitive "^1.0.2"
+undefsafe@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
+ integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
underscore@^1.13.1:
version "1.13.7"
@@ -4926,70 +2932,36 @@ undici-types@~5.26.4:
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-undici-types@~6.20.0:
- version "6.20.0"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433"
- integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
-update-browserslist-db@^1.0.13:
- version "1.0.13"
- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
- integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
- dependencies:
- escalade "^3.1.1"
- picocolors "^1.0.0"
-
-uri-js@^4.2.2:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
- integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
- dependencies:
- punycode "^2.1.0"
-
-use-composed-ref@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda"
- integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==
-
-use-isomorphic-layout-effect@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb"
- integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==
-
-use-latest@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2"
- integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==
- dependencies:
- use-isomorphic-layout-effect "^1.1.1"
-
-util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-utrie@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645"
- integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==
- dependencies:
- base64-arraybuffer "^1.0.2"
+utils-merge@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
uuid@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294"
integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==
-uuid@^11.1.0:
- version "11.1.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912"
- integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==
-
-uuid@^9.0.1:
+uuid@^9.0.0:
version "9.0.1"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30"
integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==
+v8-compile-cache-lib@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
+ integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
+
validate.io-array@^1.0.3, validate.io-array@^1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d"
@@ -5000,30 +2972,26 @@ validate.io-function@^1.0.2:
resolved "https://registry.yarnpkg.com/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7"
integrity sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==
-weaviate-client@^3.5.2:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/weaviate-client/-/weaviate-client-3.7.0.tgz#cf11ccbc90ee1849869d6bebb79ec4a33056b722"
- integrity sha512-q888bkHWJBdPgPHFoIc2GiFig42WbxHOgiSBVYYQUqJGA9VszaOpU/7Ip1fVATyyVjhjzRDvMebmRltirvpfMg==
- dependencies:
- abort-controller-x "^0.4.3"
- graphql "^16.11.0"
- graphql-request "^6.1.0"
- long "^5.3.2"
- nice-grpc "^2.1.12"
- nice-grpc-client-middleware-retry "^3.1.11"
- nice-grpc-common "^2.0.2"
- uuid "^9.0.1"
+vary@^1, vary@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
+
+web-streams-polyfill@4.0.0-beta.3:
+ version "4.0.0-beta.3"
+ resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38"
+ integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==
+
+web-streams-polyfill@^3.2.1:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b"
+ integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==
webidl-conversions@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
-whatwg-fetch@^3.6.20:
- version "3.6.20"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70"
- integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==
-
whatwg-url@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
@@ -5032,137 +3000,51 @@ whatwg-url@^5.0.0:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
-which-boxed-primitive@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
- integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+winston-transport@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0"
+ integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==
dependencies:
- is-bigint "^1.0.1"
- is-boolean-object "^1.1.0"
- is-number-object "^1.0.4"
- is-string "^1.0.5"
- is-symbol "^1.0.3"
-
-which-builtin-type@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b"
- integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==
- dependencies:
- function.prototype.name "^1.1.5"
- has-tostringtag "^1.0.0"
- is-async-function "^2.0.0"
- is-date-object "^1.0.5"
- is-finalizationregistry "^1.0.2"
- is-generator-function "^1.0.10"
- is-regex "^1.1.4"
- is-weakref "^1.0.2"
- isarray "^2.0.5"
- which-boxed-primitive "^1.0.2"
- which-collection "^1.0.1"
- which-typed-array "^1.1.9"
-
-which-collection@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0"
- integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==
- dependencies:
- is-map "^2.0.3"
- is-set "^2.0.3"
- is-weakmap "^2.0.2"
- is-weakset "^2.0.3"
-
-which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9:
- version "1.1.15"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d"
- integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==
- dependencies:
- available-typed-arrays "^1.0.7"
- call-bind "^1.0.7"
- for-each "^0.3.3"
- gopd "^1.0.1"
- has-tostringtag "^1.0.2"
-
-which@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
- integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
- dependencies:
- isexe "^2.0.0"
-
-which@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a"
- integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==
- dependencies:
- isexe "^3.1.1"
-
-winston-transport@^4.9.0:
- version "4.9.0"
- resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.9.0.tgz#3bba345de10297654ea6f33519424560003b3bf9"
- integrity sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==
- dependencies:
- logform "^2.7.0"
- readable-stream "^3.6.2"
+ logform "^2.3.2"
+ readable-stream "^3.6.0"
triple-beam "^1.3.0"
-winston@^3.17.0:
- version "3.17.0"
- resolved "https://registry.yarnpkg.com/winston/-/winston-3.17.0.tgz#74b8665ce9b4ea7b29d0922cfccf852a08a11423"
- integrity sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==
+winston@^3.13.0:
+ version "3.13.0"
+ resolved "https://registry.yarnpkg.com/winston/-/winston-3.13.0.tgz#e76c0d722f78e04838158c61adc1287201de7ce3"
+ integrity sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==
dependencies:
"@colors/colors" "^1.6.0"
"@dabh/diagnostics" "^2.0.2"
async "^3.2.3"
is-stream "^2.0.0"
- logform "^2.7.0"
+ logform "^2.4.0"
one-time "^1.0.0"
readable-stream "^3.4.0"
safe-stable-stringify "^2.3.1"
stack-trace "0.0.x"
triple-beam "^1.3.0"
- winston-transport "^4.9.0"
-
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
- integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
- dependencies:
- ansi-styles "^6.1.0"
- string-width "^5.0.1"
- strip-ansi "^7.0.1"
+ winston-transport "^4.7.0"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+ws@^8.17.1:
+ version "8.17.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"
+ integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==
+
xmlbuilder@^10.0.0:
version "10.1.1"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0"
integrity sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==
-y18n@^5.0.5:
- version "5.0.8"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
- integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+xtend@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
yallist@^4.0.0:
version "4.0.0"
@@ -5170,54 +3052,26 @@ yallist@^4.0.0:
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@^2.2.1:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6"
- integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==
-
-yaml@^2.3.4:
version "2.4.1"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed"
integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==
-yargs-parser@^21.1.1:
- version "21.1.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
- integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
-
-yargs@^17.7.2:
- version "17.7.2"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
- integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
- dependencies:
- cliui "^8.0.1"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.3"
- y18n "^5.0.5"
- yargs-parser "^21.1.1"
-
-yet-another-react-lightbox@^3.17.2:
- version "3.17.2"
- resolved "https://registry.yarnpkg.com/yet-another-react-lightbox/-/yet-another-react-lightbox-3.17.2.tgz#00474b83189ec4d81302792211ca31ffb808554c"
- integrity sha512-fM+Br5nR2kt/oBAOHDqVdUmogiHRLCt4iuIJHPS9Q+ME+h+ciME6vEpLt3IPgGU8whib1agEyZBgWJOAKjgadQ==
-
-yocto-queue@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
- integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+yn@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
+ integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
zod-to-json-schema@^3.22.3:
- version "3.24.6"
- resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz#5920f020c4d2647edfbb954fa036082b92c9e12d"
- integrity sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==
+ version "3.22.5"
+ resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.22.5.tgz#3646e81cfc318dbad2a22519e5ce661615418673"
+ integrity sha512-+akaPo6a0zpVCCseDed504KBJUQpEW5QZw7RMneNmKw+fGaML1Z9tUNLnHHAC8x6dzVRO1eB2oEMyZRnuBZg7Q==
-zod@^3.22.4:
+zod-to-json-schema@^3.22.4, zod-to-json-schema@^3.22.5:
+ version "3.23.1"
+ resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.23.1.tgz#5225925b8ed5fa20096bd99be076c4b29b53d309"
+ integrity sha512-oT9INvydob1XV0v1d2IadrR74rLtDInLvDFfAa1CG0Pmg/vxATk7I2gSelfj271mbzeM4Da0uuDQE/Nkj3DWNw==
+
+zod@^3.22.3, zod@^3.22.4:
version "3.22.4"
resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff"
integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==
-
-zod@^3.25.32:
- version "3.25.76"
- resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34"
- integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==