From b9fe53777f6f2db8aace896a0d8cd9e05975049c Mon Sep 17 00:00:00 2001 From: Nuno Campos Date: Sat, 1 Mar 2025 10:13:58 -0800 Subject: [PATCH] Remove cli --- libs/cli/LICENSE | 21 - libs/cli/Makefile | 33 - libs/cli/README.md | 105 - libs/cli/examples/.env.example | 10 - libs/cli/examples/.gitignore | 1 - libs/cli/examples/Makefile | 13 - libs/cli/examples/graphs/agent.py | 94 - libs/cli/examples/graphs/langgraph.json | 16 - libs/cli/examples/graphs/storm.py | 636 --- libs/cli/examples/graphs_reqs_a/__init__.py | 0 .../graphs_reqs_a/graphs_submod/__init__.py | 0 .../graphs_reqs_a/graphs_submod/agent.py | 94 - .../graphs_reqs_a/graphs_submod/subprompt.txt | 0 libs/cli/examples/graphs_reqs_a/hello.py | 1 - .../cli/examples/graphs_reqs_a/langgraph.json | 9 - libs/cli/examples/graphs_reqs_a/prompt.txt | 0 .../examples/graphs_reqs_a/requirements.txt | 4 - .../graphs_reqs_b/graphs_submod/agent.py | 94 - .../graphs_reqs_b/graphs_submod/subprompt.txt | 0 libs/cli/examples/graphs_reqs_b/hello.py | 4 - .../cli/examples/graphs_reqs_b/langgraph.json | 9 - libs/cli/examples/graphs_reqs_b/prompt.txt | 0 .../examples/graphs_reqs_b/requirements.txt | 4 - .../examples/graphs_reqs_b/utils/__init__.py | 0 .../examples/graphs_reqs_b/utils/greeter.py | 2 - libs/cli/examples/langgraph.json | 16 - libs/cli/examples/my_app.py | 62 - libs/cli/examples/pipconf.txt | 2 - libs/cli/examples/poetry.lock | 267 -- libs/cli/examples/pyproject.toml | 17 - libs/cli/js-examples/.dockerignore | 2 - libs/cli/js-examples/.editorconfig | 10 - libs/cli/js-examples/.env.example | 3 - libs/cli/js-examples/.eslintrc.cjs | 62 - libs/cli/js-examples/.gitignore | 19 - libs/cli/js-examples/LICENSE | 21 - libs/cli/js-examples/README.md | 79 - libs/cli/js-examples/jest.config.js | 18 - libs/cli/js-examples/langgraph.json | 8 - libs/cli/js-examples/package.json | 45 - libs/cli/js-examples/src/agent/graph.ts | 104 - libs/cli/js-examples/src/agent/state.ts | 59 - libs/cli/js-examples/static/studio.png | Bin 596538 -> 0 bytes libs/cli/js-examples/tests/agent.test.ts | 8 - libs/cli/js-examples/tests/graph.int.test.ts | 18 - libs/cli/js-examples/tsconfig.json | 25 - libs/cli/js-examples/yarn.lock | 3801 ----------------- libs/cli/langgraph_cli/__init__.py | 0 libs/cli/langgraph_cli/analytics.py | 98 - libs/cli/langgraph_cli/cli.py | 755 ---- libs/cli/langgraph_cli/config.py | 914 ---- libs/cli/langgraph_cli/constants.py | 6 - libs/cli/langgraph_cli/docker.py | 257 -- libs/cli/langgraph_cli/exec.py | 173 - libs/cli/langgraph_cli/progress.py | 64 - libs/cli/langgraph_cli/py.typed | 0 libs/cli/langgraph_cli/templates.py | 223 - libs/cli/langgraph_cli/util.py | 2 - libs/cli/langgraph_cli/version.py | 10 - libs/cli/poetry.lock | 1668 -------- libs/cli/pyproject.toml | 60 - libs/cli/tests/__init__.py | 0 libs/cli/tests/integration_tests/__init__.py | 0 libs/cli/tests/integration_tests/test_cli.py | 13 - libs/cli/tests/unit_tests/__init__.py | 0 libs/cli/tests/unit_tests/agent.py | 81 - libs/cli/tests/unit_tests/cli/__init__.py | 0 libs/cli/tests/unit_tests/cli/langgraph.json | 0 libs/cli/tests/unit_tests/cli/pyproject.toml | 0 libs/cli/tests/unit_tests/cli/test_cli.py | 259 -- .../tests/unit_tests/cli/test_templates.py | 70 - libs/cli/tests/unit_tests/conftest.py | 16 - libs/cli/tests/unit_tests/graphs/agent.py | 6 - libs/cli/tests/unit_tests/helpers.py | 2 - libs/cli/tests/unit_tests/pipconfig.txt | 0 libs/cli/tests/unit_tests/test_config.json | 19 - libs/cli/tests/unit_tests/test_config.py | 679 --- libs/cli/tests/unit_tests/test_docker.py | 148 - 78 files changed, 11319 deletions(-) delete mode 100644 libs/cli/LICENSE delete mode 100644 libs/cli/Makefile delete mode 100644 libs/cli/README.md delete mode 100644 libs/cli/examples/.env.example delete mode 100644 libs/cli/examples/.gitignore delete mode 100644 libs/cli/examples/Makefile delete mode 100644 libs/cli/examples/graphs/agent.py delete mode 100644 libs/cli/examples/graphs/langgraph.json delete mode 100644 libs/cli/examples/graphs/storm.py delete mode 100644 libs/cli/examples/graphs_reqs_a/__init__.py delete mode 100644 libs/cli/examples/graphs_reqs_a/graphs_submod/__init__.py delete mode 100644 libs/cli/examples/graphs_reqs_a/graphs_submod/agent.py delete mode 100644 libs/cli/examples/graphs_reqs_a/graphs_submod/subprompt.txt delete mode 100644 libs/cli/examples/graphs_reqs_a/hello.py delete mode 100644 libs/cli/examples/graphs_reqs_a/langgraph.json delete mode 100644 libs/cli/examples/graphs_reqs_a/prompt.txt delete mode 100644 libs/cli/examples/graphs_reqs_a/requirements.txt delete mode 100644 libs/cli/examples/graphs_reqs_b/graphs_submod/agent.py delete mode 100644 libs/cli/examples/graphs_reqs_b/graphs_submod/subprompt.txt delete mode 100644 libs/cli/examples/graphs_reqs_b/hello.py delete mode 100644 libs/cli/examples/graphs_reqs_b/langgraph.json delete mode 100644 libs/cli/examples/graphs_reqs_b/prompt.txt delete mode 100644 libs/cli/examples/graphs_reqs_b/requirements.txt delete mode 100644 libs/cli/examples/graphs_reqs_b/utils/__init__.py delete mode 100644 libs/cli/examples/graphs_reqs_b/utils/greeter.py delete mode 100644 libs/cli/examples/langgraph.json delete mode 100644 libs/cli/examples/my_app.py delete mode 100644 libs/cli/examples/pipconf.txt delete mode 100644 libs/cli/examples/poetry.lock delete mode 100644 libs/cli/examples/pyproject.toml delete mode 100644 libs/cli/js-examples/.dockerignore delete mode 100644 libs/cli/js-examples/.editorconfig delete mode 100644 libs/cli/js-examples/.env.example delete mode 100644 libs/cli/js-examples/.eslintrc.cjs delete mode 100644 libs/cli/js-examples/.gitignore delete mode 100644 libs/cli/js-examples/LICENSE delete mode 100644 libs/cli/js-examples/README.md delete mode 100644 libs/cli/js-examples/jest.config.js delete mode 100644 libs/cli/js-examples/langgraph.json delete mode 100644 libs/cli/js-examples/package.json delete mode 100644 libs/cli/js-examples/src/agent/graph.ts delete mode 100644 libs/cli/js-examples/src/agent/state.ts delete mode 100644 libs/cli/js-examples/static/studio.png delete mode 100644 libs/cli/js-examples/tests/agent.test.ts delete mode 100644 libs/cli/js-examples/tests/graph.int.test.ts delete mode 100644 libs/cli/js-examples/tsconfig.json delete mode 100644 libs/cli/js-examples/yarn.lock delete mode 100644 libs/cli/langgraph_cli/__init__.py delete mode 100644 libs/cli/langgraph_cli/analytics.py delete mode 100644 libs/cli/langgraph_cli/cli.py delete mode 100644 libs/cli/langgraph_cli/config.py delete mode 100644 libs/cli/langgraph_cli/constants.py delete mode 100644 libs/cli/langgraph_cli/docker.py delete mode 100644 libs/cli/langgraph_cli/exec.py delete mode 100644 libs/cli/langgraph_cli/progress.py delete mode 100644 libs/cli/langgraph_cli/py.typed delete mode 100644 libs/cli/langgraph_cli/templates.py delete mode 100644 libs/cli/langgraph_cli/util.py delete mode 100644 libs/cli/langgraph_cli/version.py delete mode 100644 libs/cli/poetry.lock delete mode 100644 libs/cli/pyproject.toml delete mode 100644 libs/cli/tests/__init__.py delete mode 100644 libs/cli/tests/integration_tests/__init__.py delete mode 100644 libs/cli/tests/integration_tests/test_cli.py delete mode 100644 libs/cli/tests/unit_tests/__init__.py delete mode 100644 libs/cli/tests/unit_tests/agent.py delete mode 100644 libs/cli/tests/unit_tests/cli/__init__.py delete mode 100644 libs/cli/tests/unit_tests/cli/langgraph.json delete mode 100644 libs/cli/tests/unit_tests/cli/pyproject.toml delete mode 100644 libs/cli/tests/unit_tests/cli/test_cli.py delete mode 100644 libs/cli/tests/unit_tests/cli/test_templates.py delete mode 100644 libs/cli/tests/unit_tests/conftest.py delete mode 100644 libs/cli/tests/unit_tests/graphs/agent.py delete mode 100644 libs/cli/tests/unit_tests/helpers.py delete mode 100644 libs/cli/tests/unit_tests/pipconfig.txt delete mode 100644 libs/cli/tests/unit_tests/test_config.json delete mode 100644 libs/cli/tests/unit_tests/test_config.py delete mode 100644 libs/cli/tests/unit_tests/test_docker.py diff --git a/libs/cli/LICENSE b/libs/cli/LICENSE deleted file mode 100644 index fc0602fee..000000000 --- a/libs/cli/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 LangChain, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/libs/cli/Makefile b/libs/cli/Makefile deleted file mode 100644 index 22506684d..000000000 --- a/libs/cli/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -.PHONY: test lint format test-integration - -###################### -# TESTING AND COVERAGE -###################### - -test: - poetry run pytest tests/unit_tests -test-integration: - poetry run pytest tests/integration_tests - -###################### -# LINTING AND FORMATTING -###################### - -# Define a variable for Python and notebook files. -PYTHON_FILES=. -MYPY_CACHE=.mypy_cache -lint format: PYTHON_FILES=. -lint_diff format_diff: PYTHON_FILES=$(shell git diff --name-only --relative --diff-filter=d main . | grep -E '\.py$$|\.ipynb$$') -lint_package: PYTHON_FILES=langgraph_cli -lint_tests: PYTHON_FILES=tests -lint_tests: MYPY_CACHE=.mypy_cache_test - -lint lint_diff lint_package lint_tests: - poetry run ruff check . - [ "$(PYTHON_FILES)" = "" ] || poetry run ruff format $(PYTHON_FILES) --diff - [ "$(PYTHON_FILES)" = "" ] || poetry run ruff check --select I $(PYTHON_FILES) - [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) || poetry run mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) - -format format_diff: - poetry run ruff format $(PYTHON_FILES) - poetry run ruff check --select I --fix $(PYTHON_FILES) diff --git a/libs/cli/README.md b/libs/cli/README.md deleted file mode 100644 index 595372ef7..000000000 --- a/libs/cli/README.md +++ /dev/null @@ -1,105 +0,0 @@ -# LangGraph CLI - -The official command-line interface for LangGraph, providing tools to create, develop, and deploy LangGraph applications. - -## Installation - -Install via pip: -```bash -pip install langgraph-cli -``` - -For development mode with hot reloading: -```bash -pip install "langgraph-cli[inmem]" -``` - -## Commands - -### `langgraph new` 🌱 -Create a new LangGraph project from a template -```bash -langgraph new [PATH] --template TEMPLATE_NAME -``` - -### `langgraph dev` 🏃‍♀️ -Run LangGraph API server in development mode with hot reloading -```bash -langgraph dev [OPTIONS] - --host TEXT Host to bind to (default: 127.0.0.1) - --port INTEGER Port to bind to (default: 2024) - --no-reload Disable auto-reload - --debug-port INTEGER Enable remote debugging - --no-browser Skip opening browser window - -c, --config FILE Config file path (default: langgraph.json) -``` - -### `langgraph up` 🚀 -Launch LangGraph API server in Docker -```bash -langgraph up [OPTIONS] - -p, --port INTEGER Port to expose (default: 8123) - --wait Wait for services to start - --watch Restart on file changes - --verbose Show detailed logs - -c, --config FILE Config file path - -d, --docker-compose Additional services file -``` - -### `langgraph build` -Build a Docker image for your LangGraph application -```bash -langgraph build -t IMAGE_TAG [OPTIONS] - --platform TEXT Target platforms (e.g., linux/amd64,linux/arm64) - --pull / --no-pull Use latest/local base image - -c, --config FILE Config file path -``` - -### `langgraph dockerfile` -Generate a Dockerfile for custom deployments -```bash -langgraph dockerfile SAVE_PATH [OPTIONS] - -c, --config FILE Config file path -``` - -## Configuration - -The CLI uses a `langgraph.json` configuration file with these key settings: - -```json -{ - "dependencies": ["langchain_openai", "./your_package"], // Required: Package dependencies - "graphs": { - "my_graph": "./your_package/file.py:graph" // Required: Graph definitions - }, - "env": "./.env", // Optional: Environment variables - "python_version": "3.11", // Optional: Python version (3.11/3.12) - "pip_config_file": "./pip.conf", // Optional: pip configuration - "dockerfile_lines": [] // Optional: Additional Dockerfile commands -} -``` - -See the [full documentation](https://langchain-ai.github.io/langgraph/docs/cloud/reference/cli.html) for detailed configuration options. - -## Development - -To develop the CLI itself: - -1. Clone the repository -2. Navigate to the CLI directory: `cd libs/cli` -3. Install development dependencies: `poetry install` -4. Make your changes to the CLI code -5. Test your changes: - ```bash - # Run CLI commands directly - poetry run langgraph --help - - # Or use the examples - cd examples - poetry install - poetry run langgraph dev # or other commands - ``` - -## License - -This project is licensed under the terms specified in the repository's LICENSE file. diff --git a/libs/cli/examples/.env.example b/libs/cli/examples/.env.example deleted file mode 100644 index cc176486c..000000000 --- a/libs/cli/examples/.env.example +++ /dev/null @@ -1,10 +0,0 @@ -OPENAI_API_KEY=placeholder -ANTHROPIC_API_KEY=placeholder -TAVILY_API_KEY=placeholder -LANGCHAIN_TRACING_V2=false -LANGCHAIN_ENDPOINT=placeholder -LANGCHAIN_API_KEY=placeholder -LANGCHAIN_PROJECT=placeholder -LANGGRAPH_AUTH_TYPE=noop -LANGSMITH_AUTH_ENDPOINT=placeholder -LANGSMITH_TENANT_ID=placeholder \ No newline at end of file diff --git a/libs/cli/examples/.gitignore b/libs/cli/examples/.gitignore deleted file mode 100644 index 8bbdbd273..000000000 --- a/libs/cli/examples/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.langgraph-data diff --git a/libs/cli/examples/Makefile b/libs/cli/examples/Makefile deleted file mode 100644 index 9dbd04ac7..000000000 --- a/libs/cli/examples/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -.PHONY: run_w_override - -run: - poetry run langgraph up --watch --no-pull - -run_faux: - cd graphs && poetry run langgraph up --no-pull - -run_graphs_reqs_a: - cd graphs_reqs_a && poetry run langgraph up --no-pull - -run_graphs_reqs_b: - cd graphs_reqs_b && poetry run langgraph up --no-pull diff --git a/libs/cli/examples/graphs/agent.py b/libs/cli/examples/graphs/agent.py deleted file mode 100644 index 60bd9d416..000000000 --- a/libs/cli/examples/graphs/agent.py +++ /dev/null @@ -1,94 +0,0 @@ -from typing import Annotated, Literal, Sequence, TypedDict - -from langchain_anthropic import ChatAnthropic -from langchain_community.tools.tavily_search import TavilySearchResults -from langchain_core.messages import BaseMessage -from langchain_openai import ChatOpenAI -from langgraph.graph import END, StateGraph, add_messages -from langgraph.prebuilt import ToolNode - -tools = [TavilySearchResults(max_results=1)] - -model_anth = ChatAnthropic(temperature=0, model_name="claude-3-sonnet-20240229") -model_oai = ChatOpenAI(temperature=0) - -model_anth = model_anth.bind_tools(tools) -model_oai = model_oai.bind_tools(tools) - - -class AgentState(TypedDict): - messages: Annotated[Sequence[BaseMessage], add_messages] - - -# Define the function that determines whether to continue or not -def should_continue(state): - messages = state["messages"] - last_message = messages[-1] - # If there are no tool calls, then we finish - if not last_message.tool_calls: - return "end" - # Otherwise if there is, we continue - else: - return "continue" - - -# Define the function that calls the model -def call_model(state, config): - if config["configurable"].get("model", "anthropic") == "anthropic": - model = model_anth - else: - model = model_oai - messages = state["messages"] - response = model.invoke(messages) - # We return a list, because this will get added to the existing list - return {"messages": [response]} - - -# Define the function to execute tools -tool_node = ToolNode(tools) - - -class ConfigSchema(TypedDict): - model: Literal["anthropic", "openai"] - - -# Define a new graph -workflow = StateGraph(AgentState, config_schema=ConfigSchema) - -# Define the two nodes we will cycle between -workflow.add_node("agent", call_model) -workflow.add_node("action", tool_node) - -# Set the entrypoint as `agent` -# This means that this node is the first one called -workflow.set_entry_point("agent") - -# We now add a conditional edge -workflow.add_conditional_edges( - # First, we define the start node. We use `agent`. - # This means these are the edges taken after the `agent` node is called. - "agent", - # Next, we pass in the function that will determine which node is called next. - should_continue, - # Finally we pass in a mapping. - # The keys are strings, and the values are other nodes. - # END is a special node marking that the graph should finish. - # What will happen is we will call `should_continue`, and then the output of that - # will be matched against the keys in this mapping. - # Based on which one it matches, that node will then be called. - { - # If `tools`, then we call the tool node. - "continue": "action", - # Otherwise we finish. - "end": END, - }, -) - -# We now add a normal edge from `tools` to `agent`. -# This means that after `tools` is called, `agent` node is called next. -workflow.add_edge("action", "agent") - -# Finally, we compile it! -# This compiles it into a LangChain Runnable, -# meaning you can use it as you would any other runnable -graph = workflow.compile() diff --git a/libs/cli/examples/graphs/langgraph.json b/libs/cli/examples/graphs/langgraph.json deleted file mode 100644 index 7ac0e3d67..000000000 --- a/libs/cli/examples/graphs/langgraph.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "python_version": "3.12", - "dependencies": [ - "langchain_community", - "langchain_anthropic", - "langchain_openai", - "wikipedia", - "scikit-learn", - "." - ], - "graphs": { - "agent": "./agent.py:graph", - "storm": "./storm.py:graph" - }, - "env": "../.env" -} diff --git a/libs/cli/examples/graphs/storm.py b/libs/cli/examples/graphs/storm.py deleted file mode 100644 index dbc38ab95..000000000 --- a/libs/cli/examples/graphs/storm.py +++ /dev/null @@ -1,636 +0,0 @@ -import asyncio -import json -from typing import Annotated, List, Optional - -from langchain_community.retrievers import WikipediaRetriever -from langchain_community.tools.tavily_search import TavilySearchResults -from langchain_community.vectorstores import SKLearnVectorStore -from langchain_core.documents import Document -from langchain_core.messages import ( - AIMessage, - AnyMessage, - HumanMessage, - ToolMessage, -) -from langchain_core.output_parsers import StrOutputParser -from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder -from langchain_core.runnables import RunnableConfig, RunnableLambda -from langchain_core.runnables import chain as as_runnable -from langchain_core.tools import tool -from langchain_openai import ChatOpenAI, OpenAIEmbeddings -from langgraph.graph import END, StateGraph -from pydantic import BaseModel, Field -from typing_extensions import TypedDict - -fast_llm = ChatOpenAI(model="gpt-3.5-turbo") -# Uncomment for a Fireworks model -# fast_llm = ChatFireworks(model="accounts/fireworks/models/firefunction-v1", max_tokens=32_000) -long_context_llm = ChatOpenAI(model="gpt-4-turbo-preview") - - -direct_gen_outline_prompt = ChatPromptTemplate.from_messages( - [ - ( - "system", - "You are a Wikipedia writer. Write an outline for a Wikipedia page about a user-provided topic. Be comprehensive and specific.", - ), - ("user", "{topic}"), - ] -) - - -class Subsection(BaseModel): - subsection_title: str = Field(..., title="Title of the subsection") - description: str = Field(..., title="Content of the subsection") - - @property - def as_str(self) -> str: - return f"### {self.subsection_title}\n\n{self.description}".strip() - - -class Section(BaseModel): - section_title: str = Field(..., title="Title of the section") - description: str = Field(..., title="Content of the section") - subsections: Optional[List[Subsection]] = Field( - default=None, - title="Titles and descriptions for each subsection of the Wikipedia page.", - ) - - @property - def as_str(self) -> str: - subsections = "\n\n".join( - f"### {subsection.subsection_title}\n\n{subsection.description}" - for subsection in self.subsections or [] - ) - return f"## {self.section_title}\n\n{self.description}\n\n{subsections}".strip() - - -class Outline(BaseModel): - page_title: str = Field(..., title="Title of the Wikipedia page") - sections: List[Section] = Field( - default_factory=list, - title="Titles and descriptions for each section of the Wikipedia page.", - ) - - @property - def as_str(self) -> str: - sections = "\n\n".join(section.as_str for section in self.sections) - return f"# {self.page_title}\n\n{sections}".strip() - - -generate_outline_direct = direct_gen_outline_prompt | fast_llm.with_structured_output( - Outline -) - -gen_related_topics_prompt = ChatPromptTemplate.from_template( - """I'm writing a Wikipedia page for a topic mentioned below. Please identify and recommend some Wikipedia pages on closely related subjects. I'm looking for examples that provide insights into interesting aspects commonly associated with this topic, or examples that help me understand the typical content and structure included in Wikipedia pages for similar topics. - -Please list the as many subjects and urls as you can. - -Topic of interest: {topic} -""" -) - - -class RelatedSubjects(BaseModel): - topics: List[str] = Field( - description="Comprehensive list of related subjects as background research.", - ) - - -expand_chain = gen_related_topics_prompt | fast_llm.with_structured_output( - RelatedSubjects -) - - -class Editor(BaseModel): - affiliation: str = Field( - description="Primary affiliation of the editor.", - ) - name: str = Field( - description="Name of the editor.", - ) - role: str = Field( - description="Role of the editor in the context of the topic.", - ) - description: str = Field( - description="Description of the editor's focus, concerns, and motives.", - ) - - @property - def persona(self) -> str: - return f"Name: {self.name}\nRole: {self.role}\nAffiliation: {self.affiliation}\nDescription: {self.description}\n" - - -class Perspectives(BaseModel): - editors: List[Editor] = Field( - description="Comprehensive list of editors with their roles and affiliations.", - # Add a pydantic validation/restriction to be at most M editors - ) - - -gen_perspectives_prompt = ChatPromptTemplate.from_messages( - [ - ( - "system", - """You need to select a diverse (and distinct) group of Wikipedia editors who will work together to create a comprehensive article on the topic. Each of them represents a different perspective, role, or affiliation related to this topic.\ - You can use other Wikipedia pages of related topics for inspiration. For each editor, add a description of what they will focus on. - - Wiki page outlines of related topics for inspiration: - {examples}""", - ), - ("user", "Topic of interest: {topic}"), - ] -) - -gen_perspectives_chain = gen_perspectives_prompt | ChatOpenAI( - model="gpt-3.5-turbo" -).with_structured_output(Perspectives) - - -wikipedia_retriever = WikipediaRetriever(load_all_available_meta=True, top_k_results=1) - - -def format_doc(doc, max_length=1000): - related = "- ".join(doc.metadata["categories"]) - return f"### {doc.metadata['title']}\n\nSummary: {doc.page_content}\n\nRelated\n{related}"[ - :max_length - ] - - -def format_docs(docs): - return "\n\n".join(format_doc(doc) for doc in docs) - - -@as_runnable -async def survey_subjects(topic: str): - related_subjects = await expand_chain.ainvoke({"topic": topic}) - retrieved_docs = await wikipedia_retriever.abatch( - related_subjects.topics, return_exceptions=True - ) - all_docs = [] - for docs in retrieved_docs: - if isinstance(docs, BaseException): - continue - all_docs.extend(docs) - formatted = format_docs(all_docs) - return await gen_perspectives_chain.ainvoke({"examples": formatted, "topic": topic}) - - -def add_messages(left, right): - if not isinstance(left, list): - left = [left] - if not isinstance(right, list): - right = [right] - return left + right - - -def update_references(references, new_references): - if not references: - references = {} - references.update(new_references) - return references - - -def update_editor(editor, new_editor): - # Can only set at the outset - if not editor: - return new_editor - return editor - - -class InterviewState(TypedDict): - messages: Annotated[List[AnyMessage], add_messages] - references: Annotated[Optional[dict], update_references] - editor: Annotated[Optional[Editor], update_editor] - - -gen_qn_prompt = ChatPromptTemplate.from_messages( - [ - ( - "system", - """You are an experienced Wikipedia writer and want to edit a specific page. \ -Besides your identity as a Wikipedia writer, you have a specific focus when researching the topic. \ -Now, you are chatting with an expert to get information. Ask good questions to get more useful information. - -When you have no more questions to ask, say "Thank you so much for your help!" to end the conversation.\ -Please only ask one question at a time and don't ask what you have asked before.\ -Your questions should be related to the topic you want to write. -Be comprehensive and curious, gaining as much unique insight from the expert as possible.\ - -Stay true to your specific perspective: - -{persona}""", - ), - MessagesPlaceholder(variable_name="messages", optional=True), - ] -) - - -def tag_with_name(ai_message: AIMessage, name: str): - ai_message.name = name.replace(" ", "_").replace(".", "_") - return ai_message - - -def swap_roles(state: InterviewState, name: str): - converted = [] - for message in state["messages"]: - if isinstance(message, AIMessage) and message.name != name: - message = HumanMessage(**message.dict(exclude={"type"})) - converted.append(message) - return {"messages": converted} - - -@as_runnable -async def generate_question(state: InterviewState): - editor = state["editor"] - gn_chain = ( - RunnableLambda(swap_roles).bind(name=editor.name) - | gen_qn_prompt.partial(persona=editor.persona) - | fast_llm - | RunnableLambda(tag_with_name).bind(name=editor.name) - ) - result = await gn_chain.ainvoke(state) - return {"messages": [result]} - - -class Queries(BaseModel): - queries: List[str] = Field( - description="Comprehensive list of search engine queries to answer the user's questions.", - ) - - -gen_queries_prompt = ChatPromptTemplate.from_messages( - [ - ( - "system", - "You are a helpful research assistant. Query the search engine to answer the user's questions.", - ), - MessagesPlaceholder(variable_name="messages", optional=True), - ] -) -gen_queries_chain = gen_queries_prompt | ChatOpenAI( - model="gpt-3.5-turbo" -).with_structured_output(Queries, include_raw=True) - - -class AnswerWithCitations(BaseModel): - answer: str = Field( - description="Comprehensive answer to the user's question with citations.", - ) - cited_urls: List[str] = Field( - description="List of urls cited in the answer.", - ) - - @property - def as_str(self) -> str: - return f"{self.answer}\n\nCitations:\n\n" + "\n".join( - f"[{i+1}]: {url}" for i, url in enumerate(self.cited_urls) - ) - - -gen_answer_prompt = ChatPromptTemplate.from_messages( - [ - ( - "system", - """You are an expert who can use information effectively. You are chatting with a Wikipedia writer who wants\ - to write a Wikipedia page on the topic you know. You have gathered the related information and will now use the information to form a response. - -Make your response as informative as possible and make sure every sentence is supported by the gathered information. -Each response must be backed up by a citation from a reliable source, formatted as a footnote, reproducing the URLS after your response.""", - ), - MessagesPlaceholder(variable_name="messages", optional=True), - ] -) - -gen_answer_chain = gen_answer_prompt | fast_llm.with_structured_output( - AnswerWithCitations, include_raw=True -).with_config(run_name="GenerateAnswer") - - -# Tavily is typically a better search engine, but your free queries are limited -tavily_search = TavilySearchResults(max_results=4) - - -@tool -async def search_engine(query: str): - """Search engine to the internet.""" - results = tavily_search.invoke(query) - return [{"content": r["content"], "url": r["url"]} for r in results] - - -async def gen_answer( - state: InterviewState, - config: Optional[RunnableConfig] = None, - name: str = "Subject_Matter_Expert", - max_str_len: int = 15000, -): - swapped_state = swap_roles(state, name) # Convert all other AI messages - queries = await gen_queries_chain.ainvoke(swapped_state) - query_results = await search_engine.abatch( - queries["parsed"].queries, config, return_exceptions=True - ) - successful_results = [ - res for res in query_results if not isinstance(res, Exception) - ] - all_query_results = { - res["url"]: res["content"] for results in successful_results for res in results - } - # We could be more precise about handling max token length if we wanted to here - dumped = json.dumps(all_query_results)[:max_str_len] - ai_message: AIMessage = queries["raw"] - tool_call = queries["raw"].tool_calls[0] - tool_id = tool_call["id"] - tool_message = ToolMessage(tool_call_id=tool_id, content=dumped) - swapped_state["messages"].extend([ai_message, tool_message]) - # Only update the shared state with the final answer to avoid - # polluting the dialogue history with intermediate messages - generated = await gen_answer_chain.ainvoke(swapped_state) - cited_urls = set(generated["parsed"].cited_urls) - # Save the retrieved information to a the shared state for future reference - cited_references = {k: v for k, v in all_query_results.items() if k in cited_urls} - formatted_message = AIMessage(name=name, content=generated["parsed"].as_str) - return {"messages": [formatted_message], "references": cited_references} - - -max_num_turns = 5 - - -def route_messages(state: InterviewState, name: str = "Subject_Matter_Expert"): - messages = state["messages"] - num_responses = len( - [m for m in messages if isinstance(m, AIMessage) and m.name == name] - ) - if num_responses >= max_num_turns: - return END - last_question = messages[-2] - if last_question.content.endswith("Thank you so much for your help!"): - return END - return "ask_question" - - -builder = StateGraph(InterviewState) - -builder.add_node("ask_question", generate_question) -builder.add_node("answer_question", gen_answer) -builder.add_conditional_edges("answer_question", route_messages) -builder.add_edge("ask_question", "answer_question") - -builder.set_entry_point("ask_question") -interview_graph = builder.compile().with_config(run_name="Conduct Interviews") - -refine_outline_prompt = ChatPromptTemplate.from_messages( - [ - ( - "system", - """You are a Wikipedia writer. You have gathered information from experts and search engines. Now, you are refining the outline of the Wikipedia page. \ -You need to make sure that the outline is comprehensive and specific. \ -Topic you are writing about: {topic} - -Old outline: - -{old_outline}""", - ), - ( - "user", - "Refine the outline based on your conversations with subject-matter experts:\n\nConversations:\n\n{conversations}\n\nWrite the refined Wikipedia outline:", - ), - ] -) - -# Using turbo preview since the context can get quite long -refine_outline_chain = refine_outline_prompt | long_context_llm.with_structured_output( - Outline -) - - -embeddings = OpenAIEmbeddings(model="text-embedding-3-small") -# reference_docs = [ -# Document(page_content=v, metadata={"source": k}) -# for k, v in final_state["references"].items() -# ] -# # This really doesn't need to be a vectorstore for this size of data. -# # It could just be a numpy matrix. Or you could store documents -# # across requests if you want. -# vectorstore = SKLearnVectorStore.from_documents( -# reference_docs, -# embedding=embeddings, -# ) -# retriever = vectorstore.as_retriever(k=10) - -vectorstore = SKLearnVectorStore(embedding=embeddings) -retriever = vectorstore.as_retriever(k=10) - - -class SubSection(BaseModel): - subsection_title: str = Field(..., title="Title of the subsection") - content: str = Field( - ..., - title="Full content of the subsection. Include [#] citations to the cited sources where relevant.", - ) - - @property - def as_str(self) -> str: - return f"### {self.subsection_title}\n\n{self.content}".strip() - - -class WikiSection(BaseModel): - section_title: str = Field(..., title="Title of the section") - content: str = Field(..., title="Full content of the section") - subsections: Optional[List[Subsection]] = Field( - default=None, - title="Titles and descriptions for each subsection of the Wikipedia page.", - ) - citations: List[str] = Field(default_factory=list) - - @property - def as_str(self) -> str: - subsections = "\n\n".join( - subsection.as_str for subsection in self.subsections or [] - ) - citations = "\n".join([f" [{i}] {cit}" for i, cit in enumerate(self.citations)]) - return ( - f"## {self.section_title}\n\n{self.content}\n\n{subsections}".strip() - + f"\n\n{citations}".strip() - ) - - -section_writer_prompt = ChatPromptTemplate.from_messages( - [ - ( - "system", - "You are an expert Wikipedia writer. Complete your assigned WikiSection from the following outline:\n\n" - "{outline}\n\nCite your sources, using the following references:\n\n\n{docs}\n", - ), - ("user", "Write the full WikiSection for the {section} section."), - ] -) - - -async def retrieve(inputs: dict): - docs = await retriever.ainvoke(inputs["topic"] + ": " + inputs["section"]) - formatted = "\n".join( - [ - f'\n{doc.page_content}\n' - for doc in docs - ] - ) - return {"docs": formatted, **inputs} - - -section_writer = ( - retrieve - | section_writer_prompt - | long_context_llm.with_structured_output(WikiSection) -) - - -writer_prompt = ChatPromptTemplate.from_messages( - [ - ( - "system", - "You are an expert Wikipedia author. Write the complete wiki article on {topic} using the following section drafts:\n\n" - "{draft}\n\nStrictly follow Wikipedia format guidelines.", - ), - ( - "user", - 'Write the complete Wiki article using markdown format. Organize citations using footnotes like "[1]",' - " avoiding duplicates in the footer. Include URLs in the footer.", - ), - ] -) - -writer = writer_prompt | long_context_llm | StrOutputParser() - - -class ResearchState(TypedDict): - topic: str - outline: Outline - editors: List[Editor] - interview_results: List[InterviewState] - # The final sections output - sections: List[WikiSection] - article: str - - -async def initialize_research(state: ResearchState): - topic = state["topic"] - coros = ( - generate_outline_direct.ainvoke({"topic": topic}), - survey_subjects.ainvoke(topic), - ) - results = await asyncio.gather(*coros) - return { - **state, - "outline": results[0], - "editors": results[1].editors, - } - - -async def conduct_interviews(state: ResearchState): - topic = state["topic"] - initial_states = [ - { - "editor": editor, - "messages": [ - AIMessage( - content=f"So you said you were writing an article on {topic}?", - name="Subject_Matter_Expert", - ) - ], - } - for editor in state["editors"] - ] - # We call in to the sub-graph here to parallelize the interviews - interview_results = await interview_graph.abatch(initial_states) - - return { - **state, - "interview_results": interview_results, - } - - -def format_conversation(interview_state): - messages = interview_state["messages"] - convo = "\n".join(f"{m.name}: {m.content}" for m in messages) - return f'Conversation with {interview_state["editor"].name}\n\n' + convo - - -async def refine_outline(state: ResearchState): - convos = "\n\n".join( - [ - format_conversation(interview_state) - for interview_state in state["interview_results"] - ] - ) - - updated_outline = await refine_outline_chain.ainvoke( - { - "topic": state["topic"], - "old_outline": state["outline"].as_str, - "conversations": convos, - } - ) - return {**state, "outline": updated_outline} - - -async def index_references(state: ResearchState): - all_docs = [] - for interview_state in state["interview_results"]: - reference_docs = [ - Document(page_content=v, metadata={"source": k}) - for k, v in interview_state["references"].items() - ] - all_docs.extend(reference_docs) - await vectorstore.aadd_documents(all_docs) - return state - - -async def write_sections(state: ResearchState): - outline = state["outline"] - sections = await section_writer.abatch( - [ - { - "outline": outline.as_str, - "section": section.section_title, - "topic": state["topic"], - } - for section in outline.sections - ] - ) - return { - **state, - "sections": sections, - } - - -async def write_article(state: ResearchState): - topic = state["topic"] - sections = state["sections"] - draft = "\n\n".join([section.as_str for section in sections]) - article = await writer.ainvoke({"topic": topic, "draft": draft}) - return { - **state, - "article": article, - } - - -builder_of_storm = StateGraph(ResearchState) - -nodes = [ - ("init_research", initialize_research), - ("conduct_interviews", conduct_interviews), - ("refine_outline", refine_outline), - ("index_references", index_references), - ("write_sections", write_sections), - ("write_article", write_article), -] -for i in range(len(nodes)): - name, node = nodes[i] - builder_of_storm.add_node(name, node) - if i > 0: - builder_of_storm.add_edge(nodes[i - 1][0], name) - -builder_of_storm.set_entry_point(nodes[0][0]) -builder_of_storm.set_finish_point(nodes[-1][0]) -graph = builder_of_storm.compile() diff --git a/libs/cli/examples/graphs_reqs_a/__init__.py b/libs/cli/examples/graphs_reqs_a/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/examples/graphs_reqs_a/graphs_submod/__init__.py b/libs/cli/examples/graphs_reqs_a/graphs_submod/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/examples/graphs_reqs_a/graphs_submod/agent.py b/libs/cli/examples/graphs_reqs_a/graphs_submod/agent.py deleted file mode 100644 index 0cd5c2ec1..000000000 --- a/libs/cli/examples/graphs_reqs_a/graphs_submod/agent.py +++ /dev/null @@ -1,94 +0,0 @@ -from pathlib import Path -from typing import Annotated, Sequence, TypedDict - -from langchain_anthropic import ChatAnthropic -from langchain_community.tools.tavily_search import TavilySearchResults -from langchain_core.messages import BaseMessage -from langchain_openai import ChatOpenAI -from langgraph.graph import END, StateGraph, add_messages -from langgraph.prebuilt import ToolNode - -tools = [TavilySearchResults(max_results=1)] - -model_anth = ChatAnthropic(temperature=0, model_name="claude-3-sonnet-20240229") -model_oai = ChatOpenAI(temperature=0) - -model_anth = model_anth.bind_tools(tools) -model_oai = model_oai.bind_tools(tools) - -prompt = open("prompt.txt").read() -subprompt = open(Path(__file__).parent / "subprompt.txt").read() - - -class AgentState(TypedDict): - messages: Annotated[Sequence[BaseMessage], add_messages] - - -# Define the function that determines whether to continue or not -def should_continue(state): - messages = state["messages"] - last_message = messages[-1] - # If there are no tool calls, then we finish - if not last_message.tool_calls: - return "end" - # Otherwise if there is, we continue - else: - return "continue" - - -# Define the function that calls the model -def call_model(state, config): - if config["configurable"].get("model", "anthropic") == "anthropic": - model = model_anth - else: - model = model_oai - messages = state["messages"] - response = model.invoke(messages) - # We return a list, because this will get added to the existing list - return {"messages": [response]} - - -# Define the function to execute tools -tool_node = ToolNode(tools) - - -# Define a new graph -workflow = StateGraph(AgentState) - -# Define the two nodes we will cycle between -workflow.add_node("agent", call_model) -workflow.add_node("action", tool_node) - -# Set the entrypoint as `agent` -# This means that this node is the first one called -workflow.set_entry_point("agent") - -# We now add a conditional edge -workflow.add_conditional_edges( - # First, we define the start node. We use `agent`. - # This means these are the edges taken after the `agent` node is called. - "agent", - # Next, we pass in the function that will determine which node is called next. - should_continue, - # Finally we pass in a mapping. - # The keys are strings, and the values are other nodes. - # END is a special node marking that the graph should finish. - # What will happen is we will call `should_continue`, and then the output of that - # will be matched against the keys in this mapping. - # Based on which one it matches, that node will then be called. - { - # If `tools`, then we call the tool node. - "continue": "action", - # Otherwise we finish. - "end": END, - }, -) - -# We now add a normal edge from `tools` to `agent`. -# This means that after `tools` is called, `agent` node is called next. -workflow.add_edge("action", "agent") - -# Finally, we compile it! -# This compiles it into a LangChain Runnable, -# meaning you can use it as you would any other runnable -graph = workflow.compile() diff --git a/libs/cli/examples/graphs_reqs_a/graphs_submod/subprompt.txt b/libs/cli/examples/graphs_reqs_a/graphs_submod/subprompt.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/examples/graphs_reqs_a/hello.py b/libs/cli/examples/graphs_reqs_a/hello.py deleted file mode 100644 index eedc4d11a..000000000 --- a/libs/cli/examples/graphs_reqs_a/hello.py +++ /dev/null @@ -1 +0,0 @@ -from graphs_reqs_a.graphs_submod.agent import graph # noqa diff --git a/libs/cli/examples/graphs_reqs_a/langgraph.json b/libs/cli/examples/graphs_reqs_a/langgraph.json deleted file mode 100644 index a550d5823..000000000 --- a/libs/cli/examples/graphs_reqs_a/langgraph.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "dependencies": [ - "." - ], - "env": "../.env", - "graphs": { - "graph": "./hello.py:graph" - } -} diff --git a/libs/cli/examples/graphs_reqs_a/prompt.txt b/libs/cli/examples/graphs_reqs_a/prompt.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/examples/graphs_reqs_a/requirements.txt b/libs/cli/examples/graphs_reqs_a/requirements.txt deleted file mode 100644 index b3ca58361..000000000 --- a/libs/cli/examples/graphs_reqs_a/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -requests -langchain_anthropic -langchain_openai -langchain_community diff --git a/libs/cli/examples/graphs_reqs_b/graphs_submod/agent.py b/libs/cli/examples/graphs_reqs_b/graphs_submod/agent.py deleted file mode 100644 index 0cd5c2ec1..000000000 --- a/libs/cli/examples/graphs_reqs_b/graphs_submod/agent.py +++ /dev/null @@ -1,94 +0,0 @@ -from pathlib import Path -from typing import Annotated, Sequence, TypedDict - -from langchain_anthropic import ChatAnthropic -from langchain_community.tools.tavily_search import TavilySearchResults -from langchain_core.messages import BaseMessage -from langchain_openai import ChatOpenAI -from langgraph.graph import END, StateGraph, add_messages -from langgraph.prebuilt import ToolNode - -tools = [TavilySearchResults(max_results=1)] - -model_anth = ChatAnthropic(temperature=0, model_name="claude-3-sonnet-20240229") -model_oai = ChatOpenAI(temperature=0) - -model_anth = model_anth.bind_tools(tools) -model_oai = model_oai.bind_tools(tools) - -prompt = open("prompt.txt").read() -subprompt = open(Path(__file__).parent / "subprompt.txt").read() - - -class AgentState(TypedDict): - messages: Annotated[Sequence[BaseMessage], add_messages] - - -# Define the function that determines whether to continue or not -def should_continue(state): - messages = state["messages"] - last_message = messages[-1] - # If there are no tool calls, then we finish - if not last_message.tool_calls: - return "end" - # Otherwise if there is, we continue - else: - return "continue" - - -# Define the function that calls the model -def call_model(state, config): - if config["configurable"].get("model", "anthropic") == "anthropic": - model = model_anth - else: - model = model_oai - messages = state["messages"] - response = model.invoke(messages) - # We return a list, because this will get added to the existing list - return {"messages": [response]} - - -# Define the function to execute tools -tool_node = ToolNode(tools) - - -# Define a new graph -workflow = StateGraph(AgentState) - -# Define the two nodes we will cycle between -workflow.add_node("agent", call_model) -workflow.add_node("action", tool_node) - -# Set the entrypoint as `agent` -# This means that this node is the first one called -workflow.set_entry_point("agent") - -# We now add a conditional edge -workflow.add_conditional_edges( - # First, we define the start node. We use `agent`. - # This means these are the edges taken after the `agent` node is called. - "agent", - # Next, we pass in the function that will determine which node is called next. - should_continue, - # Finally we pass in a mapping. - # The keys are strings, and the values are other nodes. - # END is a special node marking that the graph should finish. - # What will happen is we will call `should_continue`, and then the output of that - # will be matched against the keys in this mapping. - # Based on which one it matches, that node will then be called. - { - # If `tools`, then we call the tool node. - "continue": "action", - # Otherwise we finish. - "end": END, - }, -) - -# We now add a normal edge from `tools` to `agent`. -# This means that after `tools` is called, `agent` node is called next. -workflow.add_edge("action", "agent") - -# Finally, we compile it! -# This compiles it into a LangChain Runnable, -# meaning you can use it as you would any other runnable -graph = workflow.compile() diff --git a/libs/cli/examples/graphs_reqs_b/graphs_submod/subprompt.txt b/libs/cli/examples/graphs_reqs_b/graphs_submod/subprompt.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/examples/graphs_reqs_b/hello.py b/libs/cli/examples/graphs_reqs_b/hello.py deleted file mode 100644 index 8943551a0..000000000 --- a/libs/cli/examples/graphs_reqs_b/hello.py +++ /dev/null @@ -1,4 +0,0 @@ -from graphs_submod.agent import graph # noqa -from utils.greeter import greet - -greet() diff --git a/libs/cli/examples/graphs_reqs_b/langgraph.json b/libs/cli/examples/graphs_reqs_b/langgraph.json deleted file mode 100644 index a550d5823..000000000 --- a/libs/cli/examples/graphs_reqs_b/langgraph.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "dependencies": [ - "." - ], - "env": "../.env", - "graphs": { - "graph": "./hello.py:graph" - } -} diff --git a/libs/cli/examples/graphs_reqs_b/prompt.txt b/libs/cli/examples/graphs_reqs_b/prompt.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/examples/graphs_reqs_b/requirements.txt b/libs/cli/examples/graphs_reqs_b/requirements.txt deleted file mode 100644 index b3ca58361..000000000 --- a/libs/cli/examples/graphs_reqs_b/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -requests -langchain_anthropic -langchain_openai -langchain_community diff --git a/libs/cli/examples/graphs_reqs_b/utils/__init__.py b/libs/cli/examples/graphs_reqs_b/utils/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/examples/graphs_reqs_b/utils/greeter.py b/libs/cli/examples/graphs_reqs_b/utils/greeter.py deleted file mode 100644 index ab178f3fa..000000000 --- a/libs/cli/examples/graphs_reqs_b/utils/greeter.py +++ /dev/null @@ -1,2 +0,0 @@ -def greet(): - print("Hello, world!") diff --git a/libs/cli/examples/langgraph.json b/libs/cli/examples/langgraph.json deleted file mode 100644 index 51eb14be9..000000000 --- a/libs/cli/examples/langgraph.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "pip_config_file": "./pipconf.txt", - "dependencies": [ - "langchain_community", - "langchain_anthropic", - "langchain_openai", - "wikipedia", - "scikit-learn", - "./graphs" - ], - "graphs": { - "agent": "./graphs/agent.py:graph", - "storm": "./graphs/storm.py:graph" - }, - "env": ".env" -} diff --git a/libs/cli/examples/my_app.py b/libs/cli/examples/my_app.py deleted file mode 100644 index 15bfa54af..000000000 --- a/libs/cli/examples/my_app.py +++ /dev/null @@ -1,62 +0,0 @@ -from contextlib import asynccontextmanager -from contextvars import ContextVar -from typing import Any - -from starlette.applications import Starlette -from starlette.middleware.base import BaseHTTPMiddleware -from starlette.responses import JSONResponse -from starlette.routing import Route - -my_context_var: ContextVar[str] = ContextVar("my_context_var", default="") -LIFESPAN_VAL = "" -other_context_var = ContextVar("other_context_var", default="") - - -@asynccontextmanager -async def my_lifespan(app): - global LIFESPAN_VAL - LIFESPAN_VAL = "foobar-lifespan" - yield - assert LIFESPAN_VAL == "foobar-lifespan" - LIFESPAN_VAL = "" - - -class MyContextMiddleware(BaseHTTPMiddleware): - async def dispatch(self, request: Any, call_next: Any) -> Any: - token = my_context_var.set("Foobar") - try: - response = await call_next(request) - return response - finally: - my_context_var.reset(token) - - -async def custom_my_route(request): - """A great route.""" - assert my_context_var.get() == "Foobar" - assert LIFESPAN_VAL == "foobar-lifespan" - return JSONResponse({"foo": "bar"}) - - -async def runs_afakeroute(request): - """Another great route.""" - assert my_context_var.get() == "Foobar" - assert LIFESPAN_VAL == "foobar-lifespan" - return JSONResponse({"foo": "afakeroute"}) - - -async def other_middleware(request: Any, call_next: Any) -> Any: - other_context_var.set("foobar") - response = await call_next(request) - other_context_var.reset() - return response - - -app = Starlette( - middleware=[(MyContextMiddleware, {}, {})], - routes=[ - Route("/custom/my-route", custom_my_route), - Route("/runs/afakeroute", runs_afakeroute), - ], - lifespan=my_lifespan, -) diff --git a/libs/cli/examples/pipconf.txt b/libs/cli/examples/pipconf.txt deleted file mode 100644 index eaeb330db..000000000 --- a/libs/cli/examples/pipconf.txt +++ /dev/null @@ -1,2 +0,0 @@ -[global] -timeout = 60 diff --git a/libs/cli/examples/poetry.lock b/libs/cli/examples/poetry.lock deleted file mode 100644 index 936020585..000000000 --- a/libs/cli/examples/poetry.lock +++ /dev/null @@ -1,267 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. - -[[package]] -name = "anyio" -version = "4.4.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.8" -files = [ - {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, - {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, -] - -[package.dependencies] -exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} - -[package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.23)"] - -[[package]] -name = "certifi" -version = "2024.7.4" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.2.1" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "httpcore" -version = "1.0.5" -description = "A minimal low-level HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, - {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, -] - -[package.dependencies] -certifi = "*" -h11 = ">=0.13,<0.15" - -[package.extras] -asyncio = ["anyio (>=4.0,<5.0)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.26.0)"] - -[[package]] -name = "httpx" -version = "0.27.0" -description = "The next generation HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, - {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, -] - -[package.dependencies] -anyio = "*" -certifi = "*" -httpcore = "==1.*" -idna = "*" -sniffio = "*" - -[package.extras] -brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] - -[[package]] -name = "httpx-sse" -version = "0.4.0" -description = "Consume Server-Sent Event (SSE) messages with HTTPX." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"}, - {file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"}, -] - -[[package]] -name = "idna" -version = "3.7" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, -] - -[[package]] -name = "langgraph-cli" -version = "0.1.52" -description = "CLI for interacting with LangGraph API" -optional = false -python-versions = "^3.9.0,<4.0" -files = [] -develop = true - -[package.dependencies] -click = "^8.1.7" - -[package.source] -type = "directory" -url = ".." - -[[package]] -name = "langgraph-sdk" -version = "0.1.29" -description = "SDK for interacting with LangGraph API" -optional = false -python-versions = "^3.9.0,<4.0" -files = [] -develop = true - -[package.dependencies] -httpx = ">=0.25.2" -httpx-sse = ">=0.4.0" -orjson = ">=3.10.1" - -[package.source] -type = "directory" -url = "../../sdk-py" - -[[package]] -name = "orjson" -version = "3.10.5" -description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -optional = false -python-versions = ">=3.8" -files = [ - {file = "orjson-3.10.5-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:545d493c1f560d5ccfc134803ceb8955a14c3fcb47bbb4b2fee0232646d0b932"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4324929c2dd917598212bfd554757feca3e5e0fa60da08be11b4aa8b90013c1"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c13ca5e2ddded0ce6a927ea5a9f27cae77eee4c75547b4297252cb20c4d30e6"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b6c8e30adfa52c025f042a87f450a6b9ea29649d828e0fec4858ed5e6caecf63"}, - {file = "orjson-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:338fd4f071b242f26e9ca802f443edc588fa4ab60bfa81f38beaedf42eda226c"}, - {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6970ed7a3126cfed873c5d21ece1cd5d6f83ca6c9afb71bbae21a0b034588d96"}, - {file = "orjson-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:235dadefb793ad12f7fa11e98a480db1f7c6469ff9e3da5e73c7809c700d746b"}, - {file = "orjson-3.10.5-cp310-none-win32.whl", hash = "sha256:be79e2393679eda6a590638abda16d167754393f5d0850dcbca2d0c3735cebe2"}, - {file = "orjson-3.10.5-cp310-none-win_amd64.whl", hash = "sha256:c4a65310ccb5c9910c47b078ba78e2787cb3878cdded1702ac3d0da71ddc5228"}, - {file = "orjson-3.10.5-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cdf7365063e80899ae3a697def1277c17a7df7ccfc979990a403dfe77bb54d40"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b68742c469745d0e6ca5724506858f75e2f1e5b59a4315861f9e2b1df77775a"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d10cc1b594951522e35a3463da19e899abe6ca95f3c84c69e9e901e0bd93d38"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dcbe82b35d1ac43b0d84072408330fd3295c2896973112d495e7234f7e3da2e1"}, - {file = "orjson-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c0eb7e0c75e1e486c7563fe231b40fdd658a035ae125c6ba651ca3b07936f5"}, - {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:53ed1c879b10de56f35daf06dbc4a0d9a5db98f6ee853c2dbd3ee9d13e6f302f"}, - {file = "orjson-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:099e81a5975237fda3100f918839af95f42f981447ba8f47adb7b6a3cdb078fa"}, - {file = "orjson-3.10.5-cp311-none-win32.whl", hash = "sha256:1146bf85ea37ac421594107195db8bc77104f74bc83e8ee21a2e58596bfb2f04"}, - {file = "orjson-3.10.5-cp311-none-win_amd64.whl", hash = "sha256:36a10f43c5f3a55c2f680efe07aa93ef4a342d2960dd2b1b7ea2dd764fe4a37c"}, - {file = "orjson-3.10.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:68f85ecae7af14a585a563ac741b0547a3f291de81cd1e20903e79f25170458f"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28afa96f496474ce60d3340fe8d9a263aa93ea01201cd2bad844c45cd21f5268"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cd684927af3e11b6e754df80b9ffafd9fb6adcaa9d3e8fdd5891be5a5cad51e"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d21b9983da032505f7050795e98b5d9eee0df903258951566ecc358f6696969"}, - {file = "orjson-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ad1de7fef79736dde8c3554e75361ec351158a906d747bd901a52a5c9c8d24b"}, - {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2d97531cdfe9bdd76d492e69800afd97e5930cb0da6a825646667b2c6c6c0211"}, - {file = "orjson-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d69858c32f09c3e1ce44b617b3ebba1aba030e777000ebdf72b0d8e365d0b2b3"}, - {file = "orjson-3.10.5-cp312-none-win32.whl", hash = "sha256:64c9cc089f127e5875901ac05e5c25aa13cfa5dbbbd9602bda51e5c611d6e3e2"}, - {file = "orjson-3.10.5-cp312-none-win_amd64.whl", hash = "sha256:b2efbd67feff8c1f7728937c0d7f6ca8c25ec81373dc8db4ef394c1d93d13dc5"}, - {file = "orjson-3.10.5-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:03b565c3b93f5d6e001db48b747d31ea3819b89abf041ee10ac6988886d18e01"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:584c902ec19ab7928fd5add1783c909094cc53f31ac7acfada817b0847975f26"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a35455cc0b0b3a1eaf67224035f5388591ec72b9b6136d66b49a553ce9eb1e6"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1670fe88b116c2745a3a30b0f099b699a02bb3482c2591514baf5433819e4f4d"}, - {file = "orjson-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185c394ef45b18b9a7d8e8f333606e2e8194a50c6e3c664215aae8cf42c5385e"}, - {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ca0b3a94ac8d3886c9581b9f9de3ce858263865fdaa383fbc31c310b9eac07c9"}, - {file = "orjson-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dfc91d4720d48e2a709e9c368d5125b4b5899dced34b5400c3837dadc7d6271b"}, - {file = "orjson-3.10.5-cp38-none-win32.whl", hash = "sha256:c05f16701ab2a4ca146d0bca950af254cb7c02f3c01fca8efbbad82d23b3d9d4"}, - {file = "orjson-3.10.5-cp38-none-win_amd64.whl", hash = "sha256:8a11d459338f96a9aa7f232ba95679fc0c7cedbd1b990d736467894210205c09"}, - {file = "orjson-3.10.5-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:85c89131d7b3218db1b24c4abecea92fd6c7f9fab87441cfc342d3acc725d807"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66215277a230c456f9038d5e2d84778141643207f85336ef8d2a9da26bd7ca"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51bbcdea96cdefa4a9b4461e690c75ad4e33796530d182bdd5c38980202c134a"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbead71dbe65f959b7bd8cf91e0e11d5338033eba34c114f69078d59827ee139"}, - {file = "orjson-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5df58d206e78c40da118a8c14fc189207fffdcb1f21b3b4c9c0c18e839b5a214"}, - {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c4057c3b511bb8aef605616bd3f1f002a697c7e4da6adf095ca5b84c0fd43595"}, - {file = "orjson-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b39e006b00c57125ab974362e740c14a0c6a66ff695bff44615dcf4a70ce2b86"}, - {file = "orjson-3.10.5-cp39-none-win32.whl", hash = "sha256:eded5138cc565a9d618e111c6d5c2547bbdd951114eb822f7f6309e04db0fb47"}, - {file = "orjson-3.10.5-cp39-none-win_amd64.whl", hash = "sha256:cc28e90a7cae7fcba2493953cff61da5a52950e78dc2dacfe931a317ee3d8de7"}, - {file = "orjson-3.10.5.tar.gz", hash = "sha256:7a5baef8a4284405d96c90c7c62b755e9ef1ada84c2406c24a9ebec86b89f46d"}, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - -[[package]] -name = "typing-extensions" -version = "4.12.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - -[metadata] -lock-version = "2.0" -python-versions = "^3.9.0,<4.0" -content-hash = "ec5109729f30d2033a10a10e8f8d3ed94c7d96d5d31025b4815b0123664bb063" diff --git a/libs/cli/examples/pyproject.toml b/libs/cli/examples/pyproject.toml deleted file mode 100644 index c4d15111c..000000000 --- a/libs/cli/examples/pyproject.toml +++ /dev/null @@ -1,17 +0,0 @@ -[tool.poetry] -name = "langgraph-examples" -version = "0.1.0" -description = "" -authors = [] -readme = "README.md" -packages = [] -package-mode = false - -[tool.poetry.dependencies] -python = "^3.9.0,<4.0" -langgraph-cli = {path = "../../cli", develop = true} -langgraph-sdk = {path = "../../sdk-py", develop = true} - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" diff --git a/libs/cli/js-examples/.dockerignore b/libs/cli/js-examples/.dockerignore deleted file mode 100644 index 76add878f..000000000 --- a/libs/cli/js-examples/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist \ No newline at end of file diff --git a/libs/cli/js-examples/.editorconfig b/libs/cli/js-examples/.editorconfig deleted file mode 100644 index 1ed453a37..000000000 --- a/libs/cli/js-examples/.editorconfig +++ /dev/null @@ -1,10 +0,0 @@ -root = true - -[*] -end_of_line = lf -insert_final_newline = true - -[*.{js,json,yml}] -charset = utf-8 -indent_style = space -indent_size = 2 diff --git a/libs/cli/js-examples/.env.example b/libs/cli/js-examples/.env.example deleted file mode 100644 index 1f381d1b1..000000000 --- a/libs/cli/js-examples/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -# Copy this over: -# cp .env.example .env -# Then modify to suit your needs \ No newline at end of file diff --git a/libs/cli/js-examples/.eslintrc.cjs b/libs/cli/js-examples/.eslintrc.cjs deleted file mode 100644 index da4c3ecb4..000000000 --- a/libs/cli/js-examples/.eslintrc.cjs +++ /dev/null @@ -1,62 +0,0 @@ -module.exports = { - extends: [ - "eslint:recommended", - "prettier", - "plugin:@typescript-eslint/recommended", - ], - parserOptions: { - ecmaVersion: 12, - parser: "@typescript-eslint/parser", - project: "./tsconfig.json", - sourceType: "module", - }, - plugins: ["import", "@typescript-eslint", "no-instanceof"], - ignorePatterns: [ - ".eslintrc.cjs", - "scripts", - "src/utils/lodash/*", - "node_modules", - "dist", - "dist-cjs", - "*.js", - "*.cjs", - "*.d.ts", - ], - rules: { - "no-process-env": 2, - "no-instanceof/no-instanceof": 2, - "@typescript-eslint/explicit-module-boundary-types": 0, - "@typescript-eslint/no-empty-function": 0, - "@typescript-eslint/no-shadow": 0, - "@typescript-eslint/no-empty-interface": 0, - "@typescript-eslint/no-use-before-define": ["error", "nofunc"], - "@typescript-eslint/no-unused-vars": ["warn", { args: "none" }], - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-misused-promises": "error", - camelcase: 0, - "class-methods-use-this": 0, - "import/extensions": [2, "ignorePackages"], - "import/no-extraneous-dependencies": [ - "error", - { devDependencies: ["**/*.test.ts"] }, - ], - "import/no-unresolved": 0, - "import/prefer-default-export": 0, - "keyword-spacing": "error", - "max-classes-per-file": 0, - "max-len": 0, - "no-await-in-loop": 0, - "no-bitwise": 0, - "no-console": 0, - "no-restricted-syntax": 0, - "no-shadow": 0, - "no-continue": 0, - "no-underscore-dangle": 0, - "no-use-before-define": 0, - "no-useless-constructor": 0, - "no-return-await": 0, - "consistent-return": 0, - "no-else-return": 0, - "new-cap": ["error", { properties: false, capIsNew: false }], - }, -}; diff --git a/libs/cli/js-examples/.gitignore b/libs/cli/js-examples/.gitignore deleted file mode 100644 index e5363cc29..000000000 --- a/libs/cli/js-examples/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -index.cjs -index.js -index.d.ts -node_modules -dist -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions - -.turbo -**/.turbo -**/.eslintcache - -.env -.ipynb_checkpoints - diff --git a/libs/cli/js-examples/LICENSE b/libs/cli/js-examples/LICENSE deleted file mode 100644 index 57d0481d4..000000000 --- a/libs/cli/js-examples/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 LangChain - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/libs/cli/js-examples/README.md b/libs/cli/js-examples/README.md deleted file mode 100644 index 799fe90f1..000000000 --- a/libs/cli/js-examples/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# New LangGraph.js Project - -[![CI](https://github.com/langchain-ai/new-langgraphjs-project/actions/workflows/unit-tests.yml/badge.svg)](https://github.com/langchain-ai/new-langgraphjs-project/actions/workflows/unit-tests.yml) -[![Integration Tests](https://github.com/langchain-ai/new-langgraphjs-project/actions/workflows/integration-tests.yml/badge.svg)](https://github.com/langchain-ai/new-langgraphjs-project/actions/workflows/integration-tests.yml) -[![Open in - LangGraph Studio](https://img.shields.io/badge/Open_in-LangGraph_Studio-00324d.svg?logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4NS4zMzMiIGhlaWdodD0iODUuMzMzIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA2NCA2NCI+PHBhdGggZD0iTTEzIDcuOGMtNi4zIDMuMS03LjEgNi4zLTYuOCAyNS43LjQgMjQuNi4zIDI0LjUgMjUuOSAyNC41QzU3LjUgNTggNTggNTcuNSA1OCAzMi4zIDU4IDcuMyA1Ni43IDYgMzIgNmMtMTIuOCAwLTE2LjEuMy0xOSAxLjhtMzcuNiAxNi42YzIuOCAyLjggMy40IDQuMiAzLjQgNy42cy0uNiA0LjgtMy40IDcuNkw0Ny4yIDQzSDE2LjhsLTMuNC0zLjRjLTQuOC00LjgtNC44LTEwLjQgMC0xNS4ybDMuNC0zLjRoMzAuNHoiLz48cGF0aCBkPSJNMTguOSAyNS42Yy0xLjEgMS4zLTEgMS43LjQgMi41LjkuNiAxLjcgMS44IDEuNyAyLjcgMCAxIC43IDIuOCAxLjYgNC4xIDEuNCAxLjkgMS40IDIuNS4zIDMuMi0xIC42LS42LjkgMS40LjkgMS41IDAgMi43LS41IDIuNy0xIDAtLjYgMS4xLS44IDIuNi0uNGwyLjYuNy0xLjgtMi45Yy01LjktOS4zLTkuNC0xMi4zLTExLjUtOS44TTM5IDI2YzAgMS4xLS45IDIuNS0yIDMuMi0yLjQgMS41LTIuNiAzLjQtLjUgNC4yLjguMyAyIDEuNyAyLjUgMy4xLjYgMS41IDEuNCAyLjMgMiAyIDEuNS0uOSAxLjItMy41LS40LTMuNS0yLjEgMC0yLjgtMi44LS44LTMuMyAxLjYtLjQgMS42LS41IDAtLjYtMS4xLS4xLTEuNS0uNi0xLjItMS42LjctMS43IDMuMy0yLjEgMy41LS41LjEuNS4yIDEuNi4zIDIuMiAwIC43LjkgMS40IDEuOSAxLjYgMi4xLjQgMi4zLTIuMy4yLTMuMi0uOC0uMy0yLTEuNy0yLjUtMy4xLTEuMS0zLTMtMy4zLTMtLjUiLz48L3N2Zz4=)](https://langgraph-studio.vercel.app/templates/open?githubUrl=https://github.com/langchain-ai/new-langgraphjs-project) - -This template demonstrates a simple chatbot implemented using [LangGraph.js](https://github.com/langchain-ai/langgraphjs), designed for [LangGraph Studio](https://github.com/langchain-ai/langgraph-studio). The chatbot maintains persistent chat memory, allowing for coherent conversations across multiple interactions. - -![Graph view in LangGraph studio UI](./static/studio.png) - -The core logic, defined in `src/agent/graph.ts`, showcases a straightforward chatbot that responds to user queries while maintaining context from previous messages. - -## What it does - -The simple chatbot: - -1. Takes a user **message** as input -2. Maintains a history of the conversation -3. Returns a placeholder response, updating the conversation history - -This template provides a foundation that can be easily customized and extended to create more complex conversational agents. - -## Getting Started - -Assuming you have already [installed LangGraph Studio](https://github.com/langchain-ai/langgraph-studio?tab=readme-ov-file#download), to set up: - -1. Create a `.env` file. This template does not require any environment variables by default, but you will likely want to add some when customizing. - -```bash -cp .env.example .env -``` - - - - - -2. Open the folder in LangGraph Studio! -3. Customize the code as needed. - -## How to customize - -1. **Add an LLM call**: You can select and install a chat model wrapper from [the LangChain.js ecosystem](https://js.langchain.com/docs/integrations/chat/), or use LangGraph.js without LangChain.js. -2. **Extend the graph**: The core logic of the chatbot is defined in [graph.ts](./src/agent/graph.ts). You can modify this file to add new nodes, edges, or change the flow of the conversation. - -You can also extend this template by: - -- Adding [custom tools or functions](https://js.langchain.com/docs/how_to/tool_calling) to enhance the chatbot's capabilities. -- Implementing additional logic for handling specific types of user queries or tasks. -- Add retrieval-augmented generation (RAG) capabilities by integrating [external APIs or databases](https://langchain-ai.github.io/langgraphjs/tutorials/rag/langgraph_agentic_rag/) to provide more customized responses. - -## Development - -While iterating on your graph, you can edit past state and rerun your app from previous states to debug specific nodes. Local changes will be automatically applied via hot reload. Try experimenting with: - -- Modifying the system prompt to give your chatbot a unique personality. -- Adding new nodes to the graph for more complex conversation flows. -- Implementing conditional logic to handle different types of user inputs. - -Follow-up requests will be appended to the same thread. You can create an entirely new thread, clearing previous history, using the `+` button in the top right. - -For more advanced features and examples, refer to the [LangGraph.js documentation](https://github.com/langchain-ai/langgraphjs). These resources can help you adapt this template for your specific use case and build more sophisticated conversational agents. - -LangGraph Studio also integrates with [LangSmith](https://smith.langchain.com/) for more in-depth tracing and collaboration with teammates, allowing you to analyze and optimize your chatbot's performance. - - diff --git a/libs/cli/js-examples/jest.config.js b/libs/cli/js-examples/jest.config.js deleted file mode 100644 index 9e8937435..000000000 --- a/libs/cli/js-examples/jest.config.js +++ /dev/null @@ -1,18 +0,0 @@ -export default { - preset: "ts-jest/presets/default-esm", - moduleNameMapper: { - "^(\\.{1,2}/.*)\\.js$": "$1", - }, - transform: { - "^.+\\.tsx?$": [ - "ts-jest", - { - useESM: true, - }, - ], - }, - extensionsToTreatAsEsm: [".ts"], - setupFiles: ["dotenv/config"], - passWithNoTests: true, - testTimeout: 20_000, -}; diff --git a/libs/cli/js-examples/langgraph.json b/libs/cli/js-examples/langgraph.json deleted file mode 100644 index ddb17babc..000000000 --- a/libs/cli/js-examples/langgraph.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "node_version": "20", - "graphs": { - "agent": "./src/agent/graph.ts:graph" - }, - "env": ".env", - "dependencies": ["."] -} diff --git a/libs/cli/js-examples/package.json b/libs/cli/js-examples/package.json deleted file mode 100644 index f7b8daa03..000000000 --- a/libs/cli/js-examples/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "example-graph", - "version": "0.0.1", - "description": "A starter template for creating a LangGraph workflow.", - "packageManager": "yarn@1.22.22", - "main": "my_app/graph.ts", - "author": "Your Name", - "license": "MIT", - "private": true, - "type": "module", - "scripts": { - "build": "tsc", - "clean": "rm -rf dist", - "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --testPathPattern=\\.test\\.ts$ --testPathIgnorePatterns=\\.int\\.test\\.ts$", - "test:int": "node --experimental-vm-modules node_modules/jest/bin/jest.js --testPathPattern=\\.int\\.test\\.ts$", - "format": "prettier --write .", - "lint": "eslint src", - "format:check": "prettier --check .", - "lint:langgraph-json": "node scripts/checkLanggraphPaths.js", - "lint:all": "yarn lint & yarn lint:langgraph-json & yarn format:check", - "test:all": "yarn test && yarn test:int && yarn lint:langgraph" - }, - "dependencies": { - "@langchain/core": "^0.3.2", - "@langchain/langgraph": "^0.2.5" - }, - "devDependencies": { - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "^9.9.1", - "@tsconfig/recommended": "^1.0.7", - "@types/jest": "^29.5.0", - "@typescript-eslint/eslint-plugin": "^5.59.8", - "@typescript-eslint/parser": "^5.59.8", - "dotenv": "^16.4.5", - "eslint": "^8.41.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-no-instanceof": "^1.0.1", - "eslint-plugin-prettier": "^4.2.1", - "jest": "^29.7.0", - "prettier": "^3.3.3", - "ts-jest": "^29.1.0", - "typescript": "^5.3.3" - } -} diff --git a/libs/cli/js-examples/src/agent/graph.ts b/libs/cli/js-examples/src/agent/graph.ts deleted file mode 100644 index 244f88ee4..000000000 --- a/libs/cli/js-examples/src/agent/graph.ts +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Starter LangGraph.js Template - * Make this code your own! - */ -import { StateGraph } from "@langchain/langgraph"; -import { RunnableConfig } from "@langchain/core/runnables"; -import { StateAnnotation } from "./state.js"; - -/** - * Define a node, these do the work of the graph and should have most of the logic. - * Must return a subset of the properties set in StateAnnotation. - * @param state The current state of the graph. - * @param config Extra parameters passed into the state graph. - * @returns Some subset of parameters of the graph state, used to update the state - * for the edges and nodes executed next. - */ -const callModel = async ( - state: typeof StateAnnotation.State, - _config: RunnableConfig, -): Promise => { - /** - * Do some work... (e.g. call an LLM) - * For example, with LangChain you could do something like: - * - * ```bash - * $ npm i @langchain/anthropic - * ``` - * - * ```ts - * import { ChatAnthropic } from "@langchain/anthropic"; - * const model = new ChatAnthropic({ - * model: "claude-3-5-sonnet-20240620", - * apiKey: process.env.ANTHROPIC_API_KEY, - * }); - * const res = await model.invoke(state.messages); - * ``` - * - * Or, with an SDK directly: - * - * ```bash - * $ npm i openai - * ``` - * - * ```ts - * import OpenAI from "openai"; - * const openai = new OpenAI({ - * apiKey: process.env.OPENAI_API_KEY, - * }); - * - * const chatCompletion = await openai.chat.completions.create({ - * messages: [{ - * role: state.messages[0]._getType(), - * content: state.messages[0].content, - * }], - * model: "gpt-4o-mini", - * }); - * ``` - */ - console.log("Current state:", state); - return { - messages: [ - { - role: "assistant", - content: `Hi there! How are you?`, - }, - ], - }; -}; - -/** - * Routing function: Determines whether to continue research or end the builder. - * This function decides if the gathered information is satisfactory or if more research is needed. - * - * @param state - The current state of the research builder - * @returns Either "callModel" to continue research or END to finish the builder - */ -export const route = ( - state: typeof StateAnnotation.State, -): "__end__" | "callModel" => { - if (state.messages.length > 0) { - return "__end__"; - } - // Loop back - return "callModel"; -}; - -// Finally, create the graph itself. -const builder = new StateGraph(StateAnnotation) - // Add the nodes to do the work. - // Chaining the nodes together in this way - // updates the types of the StateGraph instance - // so you have static type checking when it comes time - // to add the edges. - .addNode("callModel", callModel) - // Regular edges mean "always transition to node B after node A is done" - // The "__start__" and "__end__" nodes are "virtual" nodes that are always present - // and represent the beginning and end of the builder. - .addEdge("__start__", "callModel") - // Conditional edges optionally route to different nodes (or end) - .addConditionalEdges("callModel", route); - -export const graph = builder.compile(); - -graph.name = "New Agent"; diff --git a/libs/cli/js-examples/src/agent/state.ts b/libs/cli/js-examples/src/agent/state.ts deleted file mode 100644 index 6f7963405..000000000 --- a/libs/cli/js-examples/src/agent/state.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { BaseMessage, BaseMessageLike } from "@langchain/core/messages"; -import { Annotation, messagesStateReducer } from "@langchain/langgraph"; - -/** - * A graph's StateAnnotation defines three main things: - * 1. The structure of the data to be passed between nodes (which "channels" to read from/write to and their types) - * 2. Default values for each field - * 3. Reducers for the state's. Reducers are functions that determine how to apply updates to the state. - * See [Reducers](https://langchain-ai.github.io/langgraphjs/concepts/low_level/#reducers) for more information. - */ - -// This is the primary state of your agent, where you can store any information -export const StateAnnotation = Annotation.Root({ - /** - * Messages track the primary execution state of the agent. - * - * Typically accumulates a pattern of: - * - * 1. HumanMessage - user input - * 2. AIMessage with .tool_calls - agent picking tool(s) to use to collect - * information - * 3. ToolMessage(s) - the responses (or errors) from the executed tools - * - * (... repeat steps 2 and 3 as needed ...) - * 4. AIMessage without .tool_calls - agent responding in unstructured - * format to the user. - * - * 5. HumanMessage - user responds with the next conversational turn. - * - * (... repeat steps 2-5 as needed ... ) - * - * Merges two lists of messages or message-like objects with role and content, - * updating existing messages by ID. - * - * Message-like objects are automatically coerced by `messagesStateReducer` into - * LangChain message classes. If a message does not have a given id, - * LangGraph will automatically assign one. - * - * By default, this ensures the state is "append-only", unless the - * new message has the same ID as an existing message. - * - * Returns: - * A new list of messages with the messages from \`right\` merged into \`left\`. - * If a message in \`right\` has the same ID as a message in \`left\`, the - * message from \`right\` will replace the message from \`left\`.` - */ - messages: Annotation({ - reducer: messagesStateReducer, - default: () => [], - }), - /** - * Feel free to add additional attributes to your state as needed. - * Common examples include retrieved documents, extracted entities, API connections, etc. - * - * For simple fields whose value should be overwritten by the return value of a node, - * you don't need to define a reducer or default. - */ - // additionalField: Annotation, -}); diff --git a/libs/cli/js-examples/static/studio.png b/libs/cli/js-examples/static/studio.png deleted file mode 100644 index 5338518f90d7ad672d8a40cf321fbd993f135e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596538 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.Z72>j~L7R=N`BNwZeQ9BjUe#@tQd9_`^=SxBt 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%0AEuLT8%Ar}7T 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
ZgFCi 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
5=Rxz=7n-L{ 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 z%0A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 z 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 diff --git a/libs/cli/js-examples/tests/agent.test.ts b/libs/cli/js-examples/tests/agent.test.ts deleted file mode 100644 index d2948bbae..000000000 --- a/libs/cli/js-examples/tests/agent.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { describe, it, expect } from "@jest/globals"; -import { route } from "../src/agent/graph.js"; -describe("Routers", () => { - it("Test route", async () => { - const res = route({ messages: [] }); - expect(res).toEqual("callModel"); - }, 100_000); -}); diff --git a/libs/cli/js-examples/tests/graph.int.test.ts b/libs/cli/js-examples/tests/graph.int.test.ts deleted file mode 100644 index a05978f4c..000000000 --- a/libs/cli/js-examples/tests/graph.int.test.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { describe, it, expect } from "@jest/globals"; -import { graph } from "../src/agent/graph.js"; - -describe("Graph", () => { - it("should process input through the graph", async () => { - const input = "What is the capital of France?"; - const result = await graph.invoke({ input }); - - expect(result).toBeDefined(); - expect(typeof result).toBe("object"); - expect(result.messages).toBeDefined(); - expect(Array.isArray(result.messages)).toBe(true); - expect(result.messages.length).toBeGreaterThan(0); - - const lastMessage = result.messages[result.messages.length - 1]; - expect(lastMessage.content.toString().toLowerCase()).toContain("hi"); - }, 30000); // Increased timeout to 30 seconds -}); diff --git a/libs/cli/js-examples/tsconfig.json b/libs/cli/js-examples/tsconfig.json deleted file mode 100644 index 6e51abd3d..000000000 --- a/libs/cli/js-examples/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": "@tsconfig/recommended", - "compilerOptions": { - "target": "ES2021", - "lib": ["ES2021", "ES2022.Object", "DOM"], - "module": "NodeNext", - "moduleResolution": "nodenext", - "esModuleInterop": true, - "noImplicitReturns": true, - "declaration": true, - "noFallthroughCasesInSwitch": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useDefineForClassFields": true, - "strictPropertyInitialization": false, - "allowJs": true, - "strict": true, - "strictFunctionTypes": false, - "outDir": "dist", - "types": ["jest", "node"], - "resolveJsonModule": true - }, - "include": ["**/*.ts", "**/*.js"], - "exclude": ["node_modules", "dist"] -} diff --git a/libs/cli/js-examples/yarn.lock b/libs/cli/js-examples/yarn.lock deleted file mode 100644 index 49021efe5..000000000 --- a/libs/cli/js-examples/yarn.lock +++ /dev/null @@ -1,3801 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== - dependencies: - "@babel/highlight" "^7.24.7" - picocolors "^1.0.0" - -"@babel/compat-data@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" - integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" - integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-module-transforms" "^7.25.2" - "@babel/helpers" "^7.25.0" - "@babel/parser" "^7.25.0" - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.2" - "@babel/types" "^7.25.2" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.25.0", "@babel/generator@^7.7.2": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" - integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== - dependencies: - "@babel/types" "^7.25.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" - integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== - dependencies: - "@babel/compat-data" "^7.25.2" - "@babel/helper-validator-option" "^7.24.8" - browserslist "^4.23.1" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-module-imports@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-transforms@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" - integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.2" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.8.0": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" - integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== - -"@babel/helper-simple-access@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" - integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-string-parser@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" - integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== - -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/helper-validator-option@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" - integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== - -"@babel/helpers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" - integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== - dependencies: - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" - integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== - dependencies: - "@babel/types" "^7.25.2" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" - integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" - integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" - integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/template@^7.25.0", "@babel/template@^7.3.3": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" - integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.25.0" - "@babel/types" "^7.25.0" - -"@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" - integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.25.0" - "@babel/parser" "^7.25.3" - "@babel/template" "^7.25.0" - "@babel/types" "^7.25.2" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.3": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" - integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== - dependencies: - "@babel/helper-string-parser" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@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.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" - integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== - -"@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/eslintrc@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6" - integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^10.0.1" - globals "^14.0.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== - -"@eslint/js@^9.9.1": - version "9.9.1" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06" - integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ== - -"@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== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.5": - 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.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - 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/core@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.3.2.tgz#aff6d83149a40e0e735910f583aca0f1dd7d1bab" - integrity sha512-FeoDOStP8l1YdxgykpXnVoEnl4lxGNSOdYzUJN/EdFtkc6cIjDDS5+xewajme0+egaUsO4tGLezKaFpoWxAyQA== - dependencies: - ansi-styles "^5.0.0" - camelcase "6" - decamelize "1.2.0" - js-tiktoken "^1.0.12" - langsmith "^0.1.56" - 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/langgraph-checkpoint@~0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-0.0.6.tgz#69f0c5c9aeefd48dcf0fa1ffa0744d8139a9f27d" - integrity sha512-hQsznlUMFKyOCaN9VtqNSSemfKATujNy5ePM6NX7lruk/Mmi2t7R9SsBnf9G2Yts+IaIwv3vJJaAFYEHfqbc5g== - dependencies: - uuid "^10.0.0" - -"@langchain/langgraph@^0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@langchain/langgraph/-/langgraph-0.2.5.tgz#c42743a59adef03f2e1fea0c198a01694ae34d51" - integrity sha512-H4OgZyGRWZHBaiXXIb9avyB8zI6+3OewKn+UOZ+wUzYLKyF3cnq0cNF4/Ps+gxCa5RtOnsHIqQyRkojfXIOqgA== - dependencies: - "@langchain/langgraph-checkpoint" "~0.0.6" - double-ended-queue "^2.1.0-0" - uuid "^10.0.0" - zod "^3.23.8" - -"@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" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@tsconfig/recommended@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@tsconfig/recommended/-/recommended-1.0.7.tgz#fdd95fc2c8d643c8b4a8ca45fd68eea248512407" - integrity sha512-xiNMgCuoy4mCL4JTywk9XFs5xpRUcKxtWEcMR6FNMtsgewYTIgIR+nvlP4A4iRCAzRsHMnPhvTRrzp4AGcRTEA== - -"@types/babel__core@^7.1.14": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== - dependencies: - "@babel/types" "^7.20.7" - -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^29.5.0": - version "29.5.12" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" - integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@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@*": - version "22.4.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.4.1.tgz#9b595d292c65b94c20923159e2ce947731b6fdce" - integrity sha512-1tbpb9325+gPnKK0dMm+/LMriX0vKxf6RnB0SZUqfyVkQ4fMgUSySqhxE/y8Jvs4NyF1yHzTfG9KlnkIODxPKg== - dependencies: - undici-types "~6.19.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/semver@^7.3.12": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@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== - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^5.59.8": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.59.8": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@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== - -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.12.0, acorn@^8.9.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== - -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-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -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-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -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== - -anymatch@^3.0.3: - 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" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -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== - -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.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.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.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" - -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" - -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== - -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" - -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" - integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - -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== - -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== - -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.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browserslist@^4.23.1: - version "4.23.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" - integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== - dependencies: - caniuse-lite "^1.0.30001646" - electron-to-chromium "^1.5.4" - node-releases "^2.0.18" - update-browserslist-db "^1.1.0" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -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@6, camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001646: - version "1.0.30001651" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz#52de59529e8b02b1aedcaaf5c05d9e23c0c28138" - integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.0.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" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -cjs-module-lexer@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" - integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== - -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" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -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.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -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== - -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== - -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== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -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.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== - 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== - -dedent@^1.0.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== - -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.2.2: - 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: - 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.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" - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -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" - -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" - -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== - -double-ended-queue@^2.1.0-0: - version "2.1.0-0" - resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" - integrity sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ== - -ejs@^3.1.10: - version "3.1.10" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" - integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.5.4: - version "1.5.12" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.12.tgz#ee31756eaa2e06f2aa606f170b7ad06dd402b4e4" - integrity sha512-tIhPkdlEoCL1Y+PToq3zRNehUaKp3wBX/sr7aclAWdIWjvqAe/Im/H0SiCM4c1Q8BLPHCdoJTol+ZblflydehA== - -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -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== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, 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.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-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, escalade@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -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-prettier@^8.8.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" - integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== - -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-module-utils@^2.8.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.2.tgz#2ecad69d71e1fa81f17f7f24d5d3e46b168de663" - integrity sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.27.5: - 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-no-instanceof@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-instanceof/-/eslint-plugin-no-instanceof-1.0.1.tgz#5d9fc86d160df6991b654b294a62390207f1bb97" - integrity sha512-zlqQ7EsfzbRO68uI+p8FIE7zYB4njs+nNbkNjSb5QmLi2et67zQLqSeaao5U9SpnlZTTJC87nS2oyHo2ACtajw== - -eslint-plugin-prettier@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -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-visitor-keys@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" - integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== - -eslint@^8.41.0: - 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@^10.0.1: - version "10.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.1.0.tgz#8788dae611574c0f070691f522e4116c5a11fc56" - integrity sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA== - dependencies: - acorn "^8.12.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.0.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" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - 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@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.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== - -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expect@^29.0.0, expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - -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-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.2.9: - 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.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.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" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -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" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -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" - -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" - -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.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== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -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: - 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-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -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" - -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@^7.1.3, glob@^7.1.4: - 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@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -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" - -globals@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" - integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== - -globalthis@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -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.9: - 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@^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: - 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" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -ignore@^5.2.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -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" - -import-local@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" - integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.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-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-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -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-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.13.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" - integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== - dependencies: - hasown "^2.0.2" - -is-core-module@^2.13.1: - version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== - dependencies: - hasown "^2.0.2" - -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: - 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-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-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - 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-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-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-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" - -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== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" - integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== - dependencies: - "@babel/core" "^7.23.9" - "@babel/parser" "^7.23.9" - "@istanbuljs/schema" "^0.1.3" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jake@^10.8.5: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" - integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - -jest-util@^29.0.0, jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -js-tiktoken@^1.0.12: - version "1.0.14" - resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.14.tgz#756f353262d559da16b58b5bcecfd93330076da2" - integrity sha512-Pk3l3WOgM9joguZY2k52+jH82RtABRgB5RdGFZNUGbOKGMVlNmafcPA3b0ITcCZPu1L9UclP1tne6aw7ZI4Myg== - dependencies: - base64-js "^1.5.1" - -js-tokens@^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@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -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" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -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-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -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" - -json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -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" - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -langsmith@^0.1.56: - version "0.1.58" - resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.58.tgz#502aa6c22fecd15fa65c14ffbe7fcc4643201f47" - integrity sha512-crbJbfw6hLBbVDQlMRWRVYwppApiDMncsqqBtTP1udUvilAsw4btIpBq0Tf+Jr8iQs6cEpZr/h7lGr5DdzAGew== - dependencies: - "@types/uuid" "^10.0.0" - commander "^10.0.1" - p-queue "^6.6.2" - p-retry "4" - semver "^7.6.3" - uuid "^10.0.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -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" - -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@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -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.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -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== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-error@1.x: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -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: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^3.0.4, 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@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - 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== - -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: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -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== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -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== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== - -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== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -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.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.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.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" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - -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@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2, p-limit@^3.1.0: - 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@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.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" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -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" - -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -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.0.0, 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-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, picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== - -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -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== - -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-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" - integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== - -pretty-format@^29.0.0, pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -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== - -pure-rand@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" - integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== - -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-is@^18.0.0: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" - integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== - -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-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -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-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@^1.20.0, 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" - -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" - -semver@^6.3.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.7, semver@^7.5.3, semver@^7.5.4, 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== - -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: - 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: - 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@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -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.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@^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-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-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -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== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -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-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - 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== - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -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== - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -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" - -ts-jest@^29.1.0: - version "29.2.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.4.tgz#38ccf487407d7a63054a72689f6f99b075e296e5" - integrity sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw== - dependencies: - bs-logger "0.x" - ejs "^3.1.10" - fast-json-stable-stringify "2.x" - jest-util "^29.0.0" - json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" - -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@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.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== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -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== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -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.3.3: - version "5.5.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" - integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== - -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@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - -update-browserslist-db@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" - integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== - dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" - -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" - -uuid@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" - integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== - -v8-to-istanbul@^9.0.1: - version "9.3.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" - integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -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-typed-array@^1.1.14, which-typed-array@^1.1.15: - 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" - -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -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" - -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== - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -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== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yargs-parser@^21.0.1, 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.3.1: - 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" - -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: - version "3.23.2" - resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.23.2.tgz#bc7e379c8050462538383e382964c03d8fe008f9" - integrity sha512-uSt90Gzc/tUfyNqxnjlfBs8W6WSGpNBv0rVsNxP/BVSMHMKGdthPYff4xtCHYloJGM0CFxFsb3NbC0eqPhfImw== - -zod@^3.22.4, zod@^3.23.8: - version "3.23.8" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" - integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== diff --git a/libs/cli/langgraph_cli/__init__.py b/libs/cli/langgraph_cli/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/langgraph_cli/analytics.py b/libs/cli/langgraph_cli/analytics.py deleted file mode 100644 index 0495d268a..000000000 --- a/libs/cli/langgraph_cli/analytics.py +++ /dev/null @@ -1,98 +0,0 @@ -import functools -import json -import os -import pathlib -import platform -import threading -import urllib.error -import urllib.request -from typing import Any, TypedDict - -from langgraph_cli.constants import ( - DEFAULT_CONFIG, - DEFAULT_PORT, - SUPABASE_PUBLIC_API_KEY, - SUPABASE_URL, -) -from langgraph_cli.version import __version__ - - -class LogData(TypedDict): - os: str - os_version: str - python_version: str - cli_version: str - cli_command: str - params: dict[str, Any] - - -def get_anonymized_params(kwargs: dict[str, Any]) -> dict[str, bool]: - params = {} - - # anonymize params with values - if config := kwargs.get("config"): - if config != pathlib.Path(DEFAULT_CONFIG).resolve(): - params["config"] = True - - if port := kwargs.get("port"): - if port != DEFAULT_PORT: - params["port"] = True - - if kwargs.get("docker_compose"): - params["docker_compose"] = True - - if kwargs.get("debugger_port"): - params["debugger_port"] = True - - if kwargs.get("postgres_uri"): - params["postgres_uri"] = True - - # pick up exact values for boolean flags - for boolean_param in ["recreate", "pull", "watch", "wait", "verbose"]: - if kwargs.get(boolean_param): - params[boolean_param] = kwargs[boolean_param] - - return params - - -def log_data(data: LogData) -> None: - headers = { - "Content-Type": "application/json", - "apikey": SUPABASE_PUBLIC_API_KEY, - "User-Agent": "Mozilla/5.0", - } - supabase_url = SUPABASE_URL - - req = urllib.request.Request( - f"{supabase_url}/rest/v1/logs", - data=json.dumps(data).encode("utf-8"), - headers=headers, - method="POST", - ) - - try: - urllib.request.urlopen(req) - except urllib.error.URLError: - pass - - -def log_command(func): - @functools.wraps(func) - def decorator(*args, **kwargs): - if os.getenv("LANGGRAPH_CLI_NO_ANALYTICS") == "1": - return func(*args, **kwargs) - - data = { - "os": platform.system(), - "os_version": platform.version(), - "python_version": platform.python_version(), - "cli_version": __version__, - "cli_command": func.__name__, - "params": get_anonymized_params(kwargs), - } - - background_thread = threading.Thread(target=log_data, args=(data,)) - background_thread.start() - return func(*args, **kwargs) - - return decorator diff --git a/libs/cli/langgraph_cli/cli.py b/libs/cli/langgraph_cli/cli.py deleted file mode 100644 index f93a82077..000000000 --- a/libs/cli/langgraph_cli/cli.py +++ /dev/null @@ -1,755 +0,0 @@ -"""CLI entrypoint for LangGraph API server.""" - -import os -import pathlib -import shutil -import sys -from typing import Callable, List, Optional, Sequence, Tuple - -import click -import click.exceptions -from click import secho - -import langgraph_cli.config -import langgraph_cli.docker -from langgraph_cli.analytics import log_command -from langgraph_cli.config import Config -from langgraph_cli.constants import DEFAULT_CONFIG, DEFAULT_PORT -from langgraph_cli.docker import DockerCapabilities -from langgraph_cli.exec import Runner, subp_exec -from langgraph_cli.progress import Progress -from langgraph_cli.templates import TEMPLATE_HELP_STRING, create_new -from langgraph_cli.version import __version__ - -OPT_DOCKER_COMPOSE = click.option( - "--docker-compose", - "-d", - help="Advanced: Path to docker-compose.yml file with additional services to launch.", - type=click.Path( - exists=True, - file_okay=True, - dir_okay=False, - resolve_path=True, - path_type=pathlib.Path, - ), -) -OPT_CONFIG = click.option( - "--config", - "-c", - help="""Path to configuration file declaring dependencies, graphs and environment variables. - - \b - Config file must be a JSON file that has the following keys: - - "dependencies": array of dependencies for langgraph API server. Dependencies can be one of the following: - - ".", which would look for local python packages, as well as pyproject.toml, setup.py or requirements.txt in the app directory - - "./local_package" - - " - - "graphs": mapping from graph ID to path where the compiled graph is defined, i.e. ./your_package/your_file.py:variable, where - "variable" is an instance of langgraph.graph.graph.CompiledGraph - - "env": (optional) path to .env file or a mapping from environment variable to its value - - "python_version": (optional) 3.11, 3.12, or 3.13. Defaults to 3.11 - - "pip_config_file": (optional) path to pip config file - - "dockerfile_lines": (optional) array of additional lines to add to Dockerfile following the import from parent image - - \b - Example: - langgraph up -c langgraph.json - - \b - Example: - { - "dependencies": [ - "langchain_openai", - "./your_package" - ], - "graphs": { - "my_graph_id": "./your_package/your_file.py:variable" - }, - "env": "./.env" - } - - \b - Example: - { - "python_version": "3.11", - "dependencies": [ - "langchain_openai", - "." - ], - "graphs": { - "my_graph_id": "./your_package/your_file.py:variable" - }, - "env": { - "OPENAI_API_KEY": "secret-key" - } - } - - Defaults to looking for langgraph.json in the current directory.""", - default=DEFAULT_CONFIG, - type=click.Path( - exists=True, - file_okay=True, - dir_okay=False, - resolve_path=True, - path_type=pathlib.Path, - ), -) -OPT_PORT = click.option( - "--port", - "-p", - type=int, - default=DEFAULT_PORT, - show_default=True, - help=""" - Port to expose. - - \b - Example: - langgraph up --port 8000 - \b - """, -) -OPT_RECREATE = click.option( - "--recreate/--no-recreate", - default=False, - show_default=True, - help="Recreate containers even if their configuration and image haven't changed", -) -OPT_PULL = click.option( - "--pull/--no-pull", - default=True, - show_default=True, - help=""" - Pull latest images. Use --no-pull for running the server with locally-built images. - - \b - Example: - langgraph up --no-pull - \b - """, -) -OPT_VERBOSE = click.option( - "--verbose", - is_flag=True, - default=False, - help="Show more output from the server logs", -) -OPT_WATCH = click.option("--watch", is_flag=True, help="Restart on file changes") -OPT_DEBUGGER_PORT = click.option( - "--debugger-port", - type=int, - help="Pull the debugger image locally and serve the UI on specified port", -) -OPT_DEBUGGER_BASE_URL = click.option( - "--debugger-base-url", - type=str, - help="URL used by the debugger to access LangGraph API. Defaults to http://127.0.0.1:[PORT]", -) - -OPT_POSTGRES_URI = click.option( - "--postgres-uri", - help="Postgres URI to use for the database. Defaults to launching a local database", -) - - -@click.group() -@click.version_option(version=__version__, prog_name="LangGraph CLI") -def cli(): - pass - - -@OPT_RECREATE -@OPT_PULL -@OPT_PORT -@OPT_DOCKER_COMPOSE -@OPT_CONFIG -@OPT_VERBOSE -@OPT_DEBUGGER_PORT -@OPT_DEBUGGER_BASE_URL -@OPT_WATCH -@OPT_POSTGRES_URI -@click.option( - "--wait", - is_flag=True, - help="Wait for services to start before returning. Implies --detach", -) -@cli.command(help="🚀 Launch LangGraph API server.") -@log_command -def up( - config: pathlib.Path, - docker_compose: Optional[pathlib.Path], - port: int, - recreate: bool, - pull: bool, - watch: bool, - wait: bool, - verbose: bool, - debugger_port: Optional[int], - debugger_base_url: Optional[str], - postgres_uri: Optional[str], -): - click.secho("Starting LangGraph API server...", fg="green") - click.secho( - """For local dev, requires env var LANGSMITH_API_KEY with access to LangGraph Cloud closed beta. -For production use, requires a license key in env var LANGGRAPH_CLOUD_LICENSE_KEY.""", - ) - with Runner() as runner, Progress(message="Pulling...") as set: - capabilities = langgraph_cli.docker.check_capabilities(runner) - args, stdin = prepare( - runner, - capabilities=capabilities, - config_path=config, - docker_compose=docker_compose, - port=port, - pull=pull, - watch=watch, - verbose=verbose, - debugger_port=debugger_port, - debugger_base_url=debugger_base_url, - postgres_uri=postgres_uri, - ) - # add up + options - args.extend(["up", "--remove-orphans"]) - if recreate: - args.extend(["--force-recreate", "--renew-anon-volumes"]) - try: - runner.run(subp_exec("docker", "volume", "rm", "langgraph-data")) - except click.exceptions.Exit: - pass - if watch: - args.append("--watch") - if wait: - args.append("--wait") - else: - args.append("--abort-on-container-exit") - # run docker compose - set("Building...") - - def on_stdout(line: str): - if "unpacking to docker.io" in line: - set("Starting...") - elif "Application startup complete" in line: - debugger_origin = ( - f"http://localhost:{debugger_port}" - if debugger_port - else "https://smith.langchain.com" - ) - debugger_base_url_query = ( - debugger_base_url or f"http://127.0.0.1:{port}" - ) - set("") - sys.stdout.write( - f"""Ready! -- API: http://localhost:{port} -- Docs: http://localhost:{port}/docs -- LangGraph Studio: {debugger_origin}/studio/?baseUrl={debugger_base_url_query} -""" - ) - sys.stdout.flush() - return True - - if capabilities.compose_type == "plugin": - compose_cmd = ["docker", "compose"] - elif capabilities.compose_type == "standalone": - compose_cmd = ["docker-compose"] - - runner.run( - subp_exec( - *compose_cmd, - *args, - input=stdin, - verbose=verbose, - on_stdout=on_stdout, - ) - ) - - -def _build( - runner, - set: Callable[[str], None], - config: pathlib.Path, - config_json: dict, - base_image: Optional[str], - pull: bool, - tag: str, - passthrough: Sequence[str] = (), -): - base_image = base_image or ( - "langchain/langgraphjs-api" - if config_json.get("node_version") - else "langchain/langgraph-api" - ) - - # pull latest images - if pull: - runner.run( - subp_exec( - "docker", - "pull", - ( - f"{base_image}:{config_json['node_version']}" - if config_json.get("node_version") - else f"{base_image}:{config_json['python_version']}" - ), - verbose=True, - ) - ) - set("Building...") - # apply options - args = [ - "-f", - "-", # stdin - "-t", - tag, - ] - # apply config - stdin, additional_contexts = langgraph_cli.config.config_to_docker( - config, config_json, base_image - ) - # add additional_contexts - if additional_contexts: - additional_contexts_str = ",".join( - f"{k}={v}" for k, v in additional_contexts.items() - ) - args.extend(["--build-context", additional_contexts_str]) - # run docker build - runner.run( - subp_exec( - "docker", - "build", - *args, - *passthrough, - str(config.parent), - input=stdin, - verbose=True, - ) - ) - - -@OPT_CONFIG -@OPT_PULL -@click.option( - "--tag", - "-t", - help="""Tag for the docker image. - - \b - Example: - langgraph build -t my-image - - \b - """, - required=True, -) -@click.option( - "--base-image", - hidden=True, -) -@click.argument("docker_build_args", nargs=-1, type=click.UNPROCESSED) -@cli.command( - help="📦 Build LangGraph API server Docker image.", - context_settings=dict( - ignore_unknown_options=True, - ), -) -@log_command -def build( - config: pathlib.Path, - docker_build_args: Sequence[str], - base_image: Optional[str], - pull: bool, - tag: str, -): - with Runner() as runner, Progress(message="Pulling...") as set: - if shutil.which("docker") is None: - raise click.UsageError("Docker not installed") from None - config_json = langgraph_cli.config.validate_config_file(config) - _build( - runner, set, config, config_json, base_image, pull, tag, docker_build_args - ) - - -def _get_docker_ignore_content() -> str: - """Return the content of a .dockerignore file. - - This file is used to exclude files and directories from the Docker build context. - - It may be overly broad, but it's better to be safe than sorry. - - The main goal is to exclude .env files by default. - """ - return """\ -# Ignore node_modules and other dependency directories -node_modules -bower_components -vendor - -# Ignore logs and temporary files -*.log -*.tmp -*.swp - -# Ignore .env files and other environment files -.env -.env.* -*.local - -# Ignore git-related files -.git -.gitignore - -# Ignore Docker-related files and configs -.dockerignore -docker-compose.yml - -# Ignore build and cache directories -dist -build -.cache -__pycache__ - -# Ignore IDE and editor configurations -.vscode -.idea -*.sublime-project -*.sublime-workspace -.DS_Store # macOS-specific - -# Ignore test and coverage files -coverage -*.coverage -*.test.js -*.spec.js -tests -""" - - -@OPT_CONFIG -@click.argument("save_path", type=click.Path(resolve_path=True)) -@cli.command( - help="🐳 Generate a Dockerfile for the LangGraph API server, with Docker Compose options." -) -@click.option( - # Add a flag for adding a docker-compose.yml file as part of the output - "--add-docker-compose", - help=( - "Add additional files for running the LangGraph API server with " - "docker-compose. These files include a docker-compose.yml, .env file, " - "and a .dockerignore file." - ), - is_flag=True, -) -@log_command -def dockerfile(save_path: str, config: pathlib.Path, add_docker_compose: bool) -> None: - save_path = pathlib.Path(save_path).absolute() - secho(f"🔍 Validating configuration at path: {config}", fg="yellow") - config_json = langgraph_cli.config.validate_config_file(config) - secho("✅ Configuration validated!", fg="green") - - secho(f"📝 Generating Dockerfile at {save_path}", fg="yellow") - dockerfile, additional_contexts = langgraph_cli.config.config_to_docker( - config, - config_json, - ( - "langchain/langgraphjs-api" - if config_json.get("node_version") - else "langchain/langgraph-api" - ), - ) - with open(str(save_path), "w", encoding="utf-8") as f: - f.write(dockerfile) - secho("✅ Created: Dockerfile", fg="green") - - if additional_contexts: - additional_contexts_str = ",".join( - f"{k}={v}" for k, v in additional_contexts.items() - ) - secho( - f"""📝 Run docker build with these additional build contexts `--build-context {additional_contexts_str}`""", - fg="yellow", - ) - - if add_docker_compose: - # Add docker compose and related files - # Add .dockerignore file in the same directory as the Dockerfile - with open(str(save_path.parent / ".dockerignore"), "w", encoding="utf-8") as f: - f.write(_get_docker_ignore_content()) - secho("✅ Created: .dockerignore", fg="green") - - # Generate a docker-compose.yml file - path = str(save_path.parent / "docker-compose.yml") - with open(path, "w", encoding="utf-8") as f: - with Runner() as runner: - capabilities = langgraph_cli.docker.check_capabilities(runner) - - compose_dict = langgraph_cli.docker.compose_as_dict( - capabilities, - port=8123, - ) - # Add .env file to the docker-compose.yml for the langgraph-api service - compose_dict["services"]["langgraph-api"]["env_file"] = [".env"] - # Add the Dockerfile to the build context - compose_dict["services"]["langgraph-api"]["build"] = { - "context": ".", - "dockerfile": save_path.name, - } - f.write(langgraph_cli.docker.dict_to_yaml(compose_dict)) - secho("✅ Created: docker-compose.yml", fg="green") - - # Check if the .env file exists in the same directory as the Dockerfile - if not (save_path.parent / ".env").exists(): - # Also add an empty .env file - with open(str(save_path.parent / ".env"), "w", encoding="utf-8") as f: - f.writelines( - [ - "# Uncomment the following line to add your LangSmith API key", - "\n", - "# LANGSMITH_API_KEY=your-api-key", - "\n", - "# Or if you have a LangGraph Cloud license key, " - "then uncomment the following line: ", - "\n", - "# LANGGRAPH_CLOUD_LICENSE_KEY=your-license-key", - "\n", - "# Add any other environment variables go below...", - ] - ) - - secho("✅ Created: .env", fg="green") - else: - # Do nothing since the .env file already exists. Not a great - # idea to overwrite in case the user has added custom env vars set - # in the .env file already. - secho("➖ Skipped: .env. It already exists!", fg="yellow") - - secho( - f"🎉 Files generated successfully at path {save_path.parent}!", - fg="cyan", - bold=True, - ) - - -@click.option( - "--host", - default="127.0.0.1", - help="Network interface to bind the development server to. Default 127.0.0.1 is recommended for security. Only use 0.0.0.0 in trusted networks", -) -@click.option( - "--port", - default=2024, - type=int, - help="Port number to bind the development server to. Example: langgraph dev --port 8000", -) -@click.option( - "--no-reload", - is_flag=True, - help="Disable automatic reloading when code changes are detected", -) -@click.option( - "--config", - type=click.Path(exists=True), - default="langgraph.json", - help="Path to configuration file declaring dependencies, graphs and environment variables", -) -@click.option( - "--n-jobs-per-worker", - default=None, - type=int, - help="Maximum number of concurrent jobs each worker process can handle. Default: 10", -) -@click.option( - "--no-browser", - is_flag=True, - help="Skip automatically opening the browser when the server starts", -) -@click.option( - "--debug-port", - default=None, - type=int, - help="Enable remote debugging by listening on specified port. Requires debugpy to be installed", -) -@click.option( - "--wait-for-client", - is_flag=True, - help="Wait for a debugger client to connect to the debug port before starting the server", - default=False, -) -@cli.command( - "dev", - help="🏃‍♀️‍➡️ Run LangGraph API server in development mode with hot reloading and debugging support", -) -@log_command -def dev( - host: str, - port: int, - no_reload: bool, - config: str, - n_jobs_per_worker: Optional[int], - no_browser: bool, - debug_port: Optional[int], - wait_for_client: bool, -): - """CLI entrypoint for running the LangGraph API server.""" - try: - from langgraph_api.cli import run_server # type: ignore - except ImportError: - py_version_msg = "" - if sys.version_info < (3, 11): - py_version_msg = ( - "\n\nNote: The in-mem server requires Python 3.11 or higher to be installed." - f" You are currently using Python {sys.version_info.major}.{sys.version_info.minor}." - ' Please upgrade your Python version before installing "langgraph-cli[inmem]".' - ) - try: - from importlib import util - - if not util.find_spec("langgraph_api"): - raise click.UsageError( - "Required package 'langgraph-api' is not installed.\n" - "Please install it with:\n\n" - ' pip install -U "langgraph-cli[inmem]"' - f"{py_version_msg}" - ) from None - except ImportError: - raise click.UsageError( - "Could not verify package installation. Please ensure Python is up to date and\n" - "langgraph-cli is installed with the 'inmem' extra: pip install -U \"langgraph-cli[inmem]\"" - f"{py_version_msg}" - ) from None - raise click.UsageError( - "Could not import run_server. This likely means your installation is incomplete.\n" - "Please ensure langgraph-cli is installed with the 'inmem' extra: pip install -U \"langgraph-cli[inmem]\"" - f"{py_version_msg}" - ) from None - - config_json = langgraph_cli.config.validate_config_file(pathlib.Path(config)) - if config_json.get("node_version"): - raise click.UsageError( - "In-mem server for JS graphs is not supported in this version of the LangGraph CLI. Please use `npx @langchain/langgraph-cli` instead." - ) from None - - cwd = os.getcwd() - sys.path.append(cwd) - dependencies = config_json.get("dependencies", []) - for dep in dependencies: - dep_path = pathlib.Path(cwd) / dep - if dep_path.is_dir() and dep_path.exists(): - sys.path.append(str(dep_path)) - - graphs = config_json.get("graphs", {}) - - run_server( - host, - port, - not no_reload, - graphs, - n_jobs_per_worker=n_jobs_per_worker, - open_browser=not no_browser, - debug_port=debug_port, - env=config_json.get("env"), - store=config_json.get("store"), - wait_for_client=wait_for_client, - auth=config_json.get("auth"), - http=config_json.get("http"), - ) - - -@click.argument("path", required=False) -@click.option( - "--template", - type=str, - help=TEMPLATE_HELP_STRING, -) -@cli.command("new", help="🌱 Create a new LangGraph project from a template.") -@log_command -def new(path: Optional[str], template: Optional[str]) -> None: - """Create a new LangGraph project from a template.""" - return create_new(path, template) - - -def prepare_args_and_stdin( - *, - capabilities: DockerCapabilities, - config_path: pathlib.Path, - config: Config, - docker_compose: Optional[pathlib.Path], - port: int, - watch: bool, - debugger_port: Optional[int] = None, - debugger_base_url: Optional[str] = None, - postgres_uri: Optional[str] = None, -) -> Tuple[List[str], str]: - assert config_path.exists(), f"Config file not found: {config_path}" - # prepare args - stdin = langgraph_cli.docker.compose( - capabilities, - port=port, - debugger_port=debugger_port, - debugger_base_url=debugger_base_url, - postgres_uri=postgres_uri, - ) - args = [ - "--project-directory", - str(config_path.parent), - ] - # apply options - if docker_compose: - args.extend(["-f", str(docker_compose)]) - args.extend(["-f", "-"]) # stdin - # apply config - stdin += langgraph_cli.config.config_to_compose( - config_path, - config, - watch=watch, - base_image=( - "langchain/langgraphjs-api" - if config.get("node_version") - else "langchain/langgraph-api" - ), - ) - return args, stdin - - -def prepare( - runner, - *, - capabilities: DockerCapabilities, - config_path: pathlib.Path, - docker_compose: Optional[pathlib.Path], - port: int, - pull: bool, - watch: bool, - verbose: bool, - debugger_port: Optional[int] = None, - debugger_base_url: Optional[str] = None, - postgres_uri: Optional[str] = None, -) -> Tuple[List[str], str]: - """Prepare the arguments and stdin for running the LangGraph API server.""" - config_json = langgraph_cli.config.validate_config_file(config_path) - # pull latest images - if pull: - runner.run( - subp_exec( - "docker", - "pull", - ( - f"langchain/langgraphjs-api:{config_json['node_version']}" - if config_json.get("node_version") - else f"langchain/langgraph-api:{config_json['python_version']}" - ), - verbose=verbose, - ) - ) - - args, stdin = prepare_args_and_stdin( - capabilities=capabilities, - config_path=config_path, - config=config_json, - docker_compose=docker_compose, - port=port, - watch=watch, - debugger_port=debugger_port, - debugger_base_url=debugger_base_url or f"http://127.0.0.1:{port}", - postgres_uri=postgres_uri, - ) - return args, stdin diff --git a/libs/cli/langgraph_cli/config.py b/libs/cli/langgraph_cli/config.py deleted file mode 100644 index 7fbe57056..000000000 --- a/libs/cli/langgraph_cli/config.py +++ /dev/null @@ -1,914 +0,0 @@ -import json -import os -import pathlib -import textwrap -from collections import Counter -from typing import NamedTuple, Optional, TypedDict, Union - -import click - -MIN_NODE_VERSION = "20" -MIN_PYTHON_VERSION = "3.11" - - -class IndexConfig(TypedDict, total=False): - """Configuration for indexing documents for semantic search in the store.""" - - dims: int - """Number of dimensions in the embedding vectors. - - Common embedding models have the following dimensions: - - openai:text-embedding-3-large: 3072 - - openai:text-embedding-3-small: 1536 - - openai:text-embedding-ada-002: 1536 - - cohere:embed-english-v3.0: 1024 - - cohere:embed-english-light-v3.0: 384 - - cohere:embed-multilingual-v3.0: 1024 - - cohere:embed-multilingual-light-v3.0: 384 - """ - - embed: str - """Optional model (string) to generate embeddings from text or path to model or function. - - Examples: - - "openai:text-embedding-3-large" - - "cohere:embed-multilingual-v3.0" - - "src/app.py:embeddings - """ - - fields: Optional[list[str]] - """Fields to extract text from for embedding generation. - - Defaults to the root ["$"], which embeds the json object as a whole. - """ - - -class StoreConfig(TypedDict, total=False): - embed: Optional[IndexConfig] - """Configuration for vector embeddings in store.""" - - -class SecurityConfig(TypedDict, total=False): - securitySchemes: dict - security: list - # path => {method => security} - paths: dict[str, dict[str, list]] - - -class AuthConfig(TypedDict, total=False): - path: str - """Path to the authentication function in a Python file.""" - disable_studio_auth: bool - """Whether to disable auth when connecting from the LangSmith Studio.""" - openapi: SecurityConfig - """The schema to use for updating the openapi spec. - - Example: - { - "securitySchemes": { - "OAuth2": { - "type": "oauth2", - "flows": { - "password": { - "tokenUrl": "/token", - "scopes": { - "me": "Read information about the current user", - "items": "Access to create and manage items" - } - } - } - } - }, - "security": [ - {"OAuth2": ["me"]} # Default security requirement for all endpoints - ] - } - """ - - -class CorsConfig(TypedDict, total=False): - allow_origins: list[str] - allow_methods: list[str] - allow_headers: list[str] - allow_credentials: bool - allow_origin_regex: str - expose_headers: list[str] - max_age: int - - -class HttpConfig(TypedDict, total=False): - app: str - """Import path for a custom Starlette/FastAPI app to mount""" - disable_assistants: bool - """Disable /assistants routes""" - disable_threads: bool - """Disable /threads routes""" - disable_runs: bool - """Disable /runs routes""" - disable_store: bool - """Disable /store routes""" - disable_meta: bool - """Disable /ok, /info, /metrics, and /docs routes""" - cors: Optional[CorsConfig] - """Cross-Origin Resource Sharing (CORS) configuration""" - - -class Config(TypedDict, total=False): - """Configuration for langgraph-cli.""" - - python_version: str - """Python version to use.""" - - node_version: Optional[str] - """Node.js version to use.""" - - pip_config_file: Optional[str] - """Path to a pip configuration file.""" - - dockerfile_lines: list[str] - """Additional lines to add to the Dockerfile.""" - - dependencies: list[str] - """Additional Python dependencies to install.""" - - graphs: dict[str, str] - """Mapping of graph names to their definitions.""" - - env: Union[dict[str, str], str] - """Environment variables to set. - - If a dictionary is provided, the keys are environment variable names - and the values are the corresponding environment variable values. - - If a string is provided, it is interpreted as a path to a file containing - environment variables in the format KEY=VALUE, with one environment variable - per line. - """ - - store: Optional[StoreConfig] - """Configuration for vector embeddings in store.""" - - auth: Optional[AuthConfig] - """Configuration for authentication.""" - - http: Optional[HttpConfig] - """Configuration for HTTP server.""" - - -def _parse_version(version_str: str) -> tuple[int, int]: - """Parse a version string into a tuple of (major, minor).""" - try: - major, minor = map(int, version_str.split("-")[0].split(".")) - return (major, minor) - except ValueError: - raise click.UsageError(f"Invalid version format: {version_str}") from None - - -def _parse_node_version(version_str: str) -> int: - """Parse a Node.js version string into a major version number.""" - try: - if "." in version_str: - raise ValueError("Node.js version must be major version only") - return int(version_str) - except ValueError: - raise click.UsageError( - f"Invalid Node.js version format: {version_str}. " - "Use major version only (e.g., '20')." - ) from None - - -def validate_config(config: Config) -> Config: - """Validate a configuration dictionary.""" - config = ( - { - "node_version": config.get("node_version"), - "dockerfile_lines": config.get("dockerfile_lines", []), - "dependencies": config.get("dependencies", []), - "graphs": config.get("graphs", {}), - "env": config.get("env", {}), - "store": config.get("store"), - "auth": config.get("auth"), - "http": config.get("http"), - } - if config.get("node_version") - else { - "python_version": config.get("python_version", "3.11"), - "pip_config_file": config.get("pip_config_file"), - "dockerfile_lines": config.get("dockerfile_lines", []), - "dependencies": config.get("dependencies", []), - "graphs": config.get("graphs", {}), - "env": config.get("env", {}), - "store": config.get("store"), - "auth": config.get("auth"), - "http": config.get("http"), - } - ) - - if config.get("node_version"): - node_version = config["node_version"] - try: - major = _parse_node_version(node_version) - min_major = _parse_node_version(MIN_NODE_VERSION) - if major < min_major: - raise click.UsageError( - f"Node.js version {node_version} is not supported. " - f"Minimum required version is {MIN_NODE_VERSION}." - ) - except ValueError as e: - raise click.UsageError(str(e)) from None - - if config.get("python_version"): - pyversion = config["python_version"] - if not pyversion.count(".") == 1 or not all( - part.isdigit() for part in pyversion.split("-")[0].split(".") - ): - raise click.UsageError( - f"Invalid Python version format: {pyversion}. " - "Use 'major.minor' format (e.g., '3.11'). " - "Patch version cannot be specified." - ) - if _parse_version(pyversion) < _parse_version(MIN_PYTHON_VERSION): - raise click.UsageError( - f"Python version {pyversion} is not supported. " - f"Minimum required version is {MIN_PYTHON_VERSION}." - ) - - if not config["dependencies"]: - raise click.UsageError( - "No dependencies found in config. " - "Add at least one dependency to 'dependencies' list." - ) - - if not config["graphs"]: - raise click.UsageError( - "No graphs found in config. " - "Add at least one graph to 'graphs' dictionary." - ) - - # Validate auth config - if auth_conf := config.get("auth"): - if "path" in auth_conf: - if ":" not in auth_conf["path"]: - raise ValueError( - f"Invalid auth.path format: '{auth_conf['path']}'. " - "Must be in format './path/to/file.py:attribute_name'" - ) - if http_conf := config.get("http"): - if "app" in http_conf: - if ":" not in http_conf["app"]: - raise ValueError( - f"Invalid http.app format: '{http_conf['app']}'. " - "Must be in format './path/to/file.py:attribute_name'" - ) - return config - - -def validate_config_file(config_path: pathlib.Path) -> Config: - """Load and validate a configuration file.""" - with open(config_path) as f: - config = json.load(f) - validated = validate_config(config) - # Enforce the package.json doesn't enforce an - # incompatible Node.js version - if validated.get("node_version"): - package_json_path = config_path.parent / "package.json" - if package_json_path.is_file(): - try: - with open(package_json_path) as f: - package_json = json.load(f) - if "engines" in package_json: - engines = package_json["engines"] - if any(engine != "node" for engine in engines.keys()): - raise click.UsageError( - "Only 'node' engine is supported in package.json engines." - f" Got engines: {list(engines.keys())}" - ) - if engines: - node_version = engines["node"] - try: - major = _parse_node_version(node_version) - min_major = _parse_node_version(MIN_NODE_VERSION) - if major < min_major: - raise click.UsageError( - f"Node.js version in package.json engines must be >= {MIN_NODE_VERSION} " - f"(major version only), got '{node_version}'. Minor/patch versions " - "(like '20.x.y') are not supported to prevent deployment issues " - "when new Node.js versions are released." - ) - except ValueError as e: - raise click.UsageError(str(e)) from None - - except json.JSONDecodeError: - raise click.UsageError( - "Invalid package.json found in langgraph " - f"config directory {package_json_path}: file is not valid JSON" - ) from None - return validated - - -class LocalDeps(NamedTuple): - """A container for referencing and managing local Python dependencies. - - A "local dependency" is any entry in the config's `dependencies` list - that starts with "." (dot), denoting a relative path - to a local directory containing Python code. - - For each local dependency, the system inspects its directory to - determine how it should be installed inside the Docker container. - - Specifically, we detect: - - - **Real packages**: Directories containing a `pyproject.toml` or a `setup.py`. - These can be installed with pip as a regular Python package. - - **Faux packages**: Directories that do not include a `pyproject.toml` or - `setup.py` but do contain Python files and possibly an `__init__.py`. For - these, the code dynamically generates a minimal `pyproject.toml` in the - Docker image so that they can still be installed with pip. - - **Requirements files**: If a local dependency directory - has a `requirements.txt`, it is tracked so that those dependencies - can be installed within the Docker container before installing the local package. - - Attributes: - pip_reqs: A list of (host_requirements_path, container_requirements_path) - tuples. Each entry points to a local `requirements.txt` file and where - it should be placed inside the Docker container before running `pip install`. - - real_pkgs: A dictionary mapping a local directory path (host side) to a - tuple of (dependency_string, container_package_path). These directories - contain the necessary files (e.g., `pyproject.toml` or `setup.py`) to be - installed as a standard Python package with pip. - - faux_pkgs: A dictionary mapping a local directory path (host side) to a - tuple of (dependency_string, container_package_path). For these - directories—called "faux packages"—the code will generate a minimal - `pyproject.toml` inside the Docker image. This ensures that pip - recognizes them as installable packages, even though they do not - natively include packaging metadata. - - working_dir: The path inside the Docker container to use as the working - directory. If the local dependency `"."` is present in the config, this - field captures the path where that dependency will appear in the - container (e.g., `/deps/` or similar). Otherwise, it may be `None`. - - additional_contexts: A list of paths to directories that contain local - dependencies in parent directories. These directories are added to the - Docker build context to ensure that the Dockerfile can access them. - """ - - pip_reqs: list[tuple[pathlib.Path, str]] - real_pkgs: dict[pathlib.Path, tuple[str, str]] - faux_pkgs: dict[pathlib.Path, tuple[str, str]] - # if . is in dependencies, use it as working_dir - working_dir: Optional[str] = None - # if there are local dependencies in parent directories, use additional_contexts - additional_contexts: list[pathlib.Path] = None - - -def _assemble_local_deps(config_path: pathlib.Path, config: Config) -> LocalDeps: - config_path = config_path.resolve() - # ensure reserved package names are not used - reserved = { - "src", - "langgraph-api", - "langgraph_api", - "langgraph", - "langchain-core", - "langchain_core", - "pydantic", - "orjson", - "fastapi", - "uvicorn", - "psycopg", - "httpx", - "langsmith", - } - counter = Counter() - - def check_reserved(name: str, ref: str): - if name in reserved: - raise ValueError( - f"Package name '{name}' used in local dep '{ref}' is reserved. " - "Rename the directory." - ) - reserved.add(name) - - pip_reqs = [] - real_pkgs = {} - faux_pkgs = {} - working_dir: Optional[str] = None - additional_contexts: list[pathlib.Path] = [] - - for local_dep in config["dependencies"]: - if not local_dep.startswith("."): - # If the dependency is not a local path, skip it - continue - - # Verify that the local dependency can be resolved - # (e.g., this would raise an informative error if a user mistyped a path). - resolved = (config_path.parent / local_dep).resolve() - - # validate local dependency - if not resolved.exists(): - raise FileNotFoundError(f"Could not find local dependency: {resolved}") - elif not resolved.is_dir(): - raise NotADirectoryError( - f"Local dependency must be a directory: {resolved}" - ) - elif resolved == config_path.parent: - pass - elif config_path.parent not in resolved.parents: - additional_contexts.append(resolved) - - # Check for pyproject.toml or setup.py - # If found, treat as a real package, if not treat as a faux package. - # For faux packages, we'll also check for presence of requirements.txt. - files = os.listdir(resolved) - if "pyproject.toml" in files or "setup.py" in files: - # real package - - # assign a unique folder name - container_name = resolved.name - if counter[container_name] > 0: - container_name += f"_{counter[container_name]}" - counter[container_name] += 1 - # add to deps - real_pkgs[resolved] = (local_dep, container_name) - # set working_dir - if local_dep == ".": - working_dir = f"/deps/{container_name}" - else: - # We could not find a pyproject.toml or setup.py, so treat as a faux package - if any(file == "__init__.py" for file in files): - # flat layout - if "-" in resolved.name: - raise ValueError( - f"Package name '{resolved.name}' contains a hyphen. " - "Rename the directory to use it as flat-layout package." - ) - check_reserved(resolved.name, local_dep) - container_path = f"/deps/__outer_{resolved.name}/{resolved.name}" - else: - # src layout - container_path = f"/deps/__outer_{resolved.name}/src" - for file in files: - rfile = resolved / file - if ( - rfile.is_dir() - and file != "__pycache__" - and not file.startswith(".") - ): - try: - for subfile in os.listdir(rfile): - if subfile.endswith(".py"): - check_reserved(file, local_dep) - break - except PermissionError: - pass - faux_pkgs[resolved] = (local_dep, container_path) - if local_dep == ".": - working_dir = container_path - - # If the faux package has a requirements.txt, we'll add - # the path to the list of requirements to install. - if "requirements.txt" in files: - rfile = resolved / "requirements.txt" - pip_reqs.append( - ( - rfile, - f"{container_path}/requirements.txt", - ) - ) - - return LocalDeps(pip_reqs, real_pkgs, faux_pkgs, working_dir, additional_contexts) - - -def _update_graph_paths( - config_path: pathlib.Path, config: Config, local_deps: LocalDeps -) -> None: - """Remap each graph's import path to the correct in-container path. - - The config may contain entries in `graphs` that look like this: - { - "my_graph": "./mygraphs/main.py:graph_function" - } - or - { - "my_graph": "./src/some_subdir/my_file.py:my_graph" - } - which indicate a local file (on the host) followed by a colon and a - callable/object attribute within that file. - - During the Docker build, local directories are copied into special - `/deps/` subdirectories, so they can be installed or referenced in - the container. This function updates each graph's import path to - reflect its new location **inside** the Docker container. - - Paths inside the container must be POSIX-style paths (even if - the host system is Windows). - - Args: - config_path: The path to the config file (e.g. `langgraph.json`). - config: The validated configuration dictionary. - local_deps: An object containing references to local dependencies: - - real Python packages (with a `pyproject.toml` or `setup.py`) - - “faux” packages that need minimal metadata to be installable - - potential `requirements.txt` for local dependencies - - container work directory (if "." is in `dependencies`) - - Raises: - ValueError: If the import string is not in the format `:` - or if the referenced local file is not found in `dependencies`. - FileNotFoundError: If the local file (module) does not actually exist on disk. - IsADirectoryError: If `module_str` points to a directory instead of a file. - """ - for graph_id, import_str in config["graphs"].items(): - module_str, _, attr_str = import_str.partition(":") - if not module_str or not attr_str: - message = ( - 'Import string "{import_str}" must be in format ":".' - ) - raise ValueError(message.format(import_str=import_str)) - - # Check for either forward slash or backslash in the module string - # to determine if it's a file path. - if "/" in module_str or "\\" in module_str: - # Resolve the local path properly on the current OS - resolved = (config_path.parent / module_str).resolve() - if not resolved.exists(): - raise FileNotFoundError(f"Could not find local module: {resolved}") - elif not resolved.is_file(): - raise IsADirectoryError(f"Local module must be a file: {resolved}") - else: - for path in local_deps.real_pkgs: - if resolved.is_relative_to(path): - container_path = ( - pathlib.Path("/deps") - / path.name - / resolved.relative_to(path) - ) - module_str = container_path.as_posix() - break - else: - for faux_pkg, (_, destpath) in local_deps.faux_pkgs.items(): - if resolved.is_relative_to(faux_pkg): - container_subpath = resolved.relative_to(faux_pkg) - # Construct the final path, ensuring POSIX style - module_str = f"{destpath}/{container_subpath.as_posix()}" - break - else: - raise ValueError( - f"Module '{import_str}' not found in 'dependencies' list. " - "Add its containing package to 'dependencies' list." - ) - # update the config - config["graphs"][graph_id] = f"{module_str}:{attr_str}" - - -def _update_auth_path( - config_path: pathlib.Path, config: Config, local_deps: LocalDeps -) -> None: - """Update auth.path to use Docker container paths.""" - auth_conf = config.get("auth") - if not auth_conf or not (path_str := auth_conf.get("path")): - return - - module_str, sep, attr_str = path_str.partition(":") - if not sep or not module_str.startswith("."): - return # Already validated or absolute path - - resolved = config_path.parent / module_str - if not resolved.exists(): - raise FileNotFoundError(f"Auth file not found: {resolved} (from {path_str})") - if not resolved.is_file(): - raise IsADirectoryError(f"Auth path must be a file: {resolved}") - - # Check faux packages first (higher priority) - for faux_path, (_, destpath) in local_deps.faux_pkgs.items(): - if resolved.is_relative_to(faux_path): - new_path = f"{destpath}/{resolved.relative_to(faux_path)}:{attr_str}" - auth_conf["path"] = new_path - return - - # Check real packages - for real_path in local_deps.real_pkgs: - if resolved.is_relative_to(real_path): - new_path = ( - f"/deps/{real_path.name}/{resolved.relative_to(real_path)}:{attr_str}" - ) - auth_conf["path"] = new_path - return - - raise ValueError( - f"Auth file '{resolved}' not covered by dependencies.\n" - "Add its parent directory to the 'dependencies' array in your config.\n" - f"Current dependencies: {config['dependencies']}" - ) - - -def _update_http_app_path( - config_path: pathlib.Path, config: Config, local_deps: LocalDeps -) -> None: - """Update the HTTP app path to point to the correct location in the Docker container. - - Similar to _update_graph_paths, this ensures that if a custom app is specified via - a local file path, that file is included in the Docker build context and its path - is updated to point to the correct location in the container. - """ - if not (http_config := config.get("http")) or not ( - app_str := http_config.get("app") - ): - return - - module_str, _, attr_str = app_str.partition(":") - if not module_str or not attr_str: - message = ( - 'Import string "{import_str}" must be in format ":".' - ) - raise ValueError(message.format(import_str=app_str)) - - # Check if it's a file path - if "/" in module_str or "\\" in module_str: - # Resolve the local path properly on the current OS - resolved = (config_path.parent / module_str).resolve() - if not resolved.exists(): - raise FileNotFoundError(f"Could not find HTTP app module: {resolved}") - elif not resolved.is_file(): - raise IsADirectoryError(f"HTTP app module must be a file: {resolved}") - else: - for path in local_deps.real_pkgs: - if resolved.is_relative_to(path): - container_path = ( - pathlib.Path("/deps") / path.name / resolved.relative_to(path) - ) - module_str = container_path.as_posix() - break - else: - for faux_pkg, (_, destpath) in local_deps.faux_pkgs.items(): - if resolved.is_relative_to(faux_pkg): - container_subpath = resolved.relative_to(faux_pkg) - # Construct the final path, ensuring POSIX style - module_str = f"{destpath}/{container_subpath.as_posix()}" - break - else: - raise ValueError( - f"HTTP app module '{app_str}' not found in 'dependencies' list. " - "Add its containing package to 'dependencies' list." - ) - # update the config - http_config["app"] = f"{module_str}:{attr_str}" - - -def python_config_to_docker( - config_path: pathlib.Path, config: Config, base_image: str -) -> tuple[str, dict[str, str]]: - """Generate a Dockerfile from the configuration.""" - # configure pip - pip_install = ( - "PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt" - ) - if config.get("pip_config_file"): - pip_install = f"PIP_CONFIG_FILE=/pipconfig.txt {pip_install}" - pip_config_file_str = ( - f"ADD {config['pip_config_file']} /pipconfig.txt" - if config.get("pip_config_file") - else "" - ) - - # collect dependencies - pypi_deps = [dep for dep in config["dependencies"] if not dep.startswith(".")] - local_deps = _assemble_local_deps(config_path, config) - # Rewrite graph paths, so they point to the correct location in the Docker container - _update_graph_paths(config_path, config, local_deps) - # Rewrite auth path, so it points to the correct location in the Docker container - _update_auth_path(config_path, config, local_deps) - # Rewrite HTTP app path, so it points to the correct location in the Docker container - _update_http_app_path(config_path, config, local_deps) - - pip_pkgs_str = f"RUN {pip_install} {' '.join(pypi_deps)}" if pypi_deps else "" - if local_deps.pip_reqs: - pip_reqs_str = os.linesep.join( - f"COPY --from=__outer_{reqpath.name} requirements.txt {destpath}" - if reqpath.parent in local_deps.additional_contexts - else f"ADD {reqpath.relative_to(config_path.parent)} {destpath}" - for reqpath, destpath in local_deps.pip_reqs - ) - pip_reqs_str += f'{os.linesep}RUN {pip_install} {" ".join("-r " + r for _,r in local_deps.pip_reqs)}' - pip_reqs_str = f"""# -- Installing local requirements -- -{pip_reqs_str} -# -- End of local requirements install --""" - - else: - pip_reqs_str = "" - - # https://setuptools.pypa.io/en/latest/userguide/datafiles.html#package-data - # https://til.simonwillison.net/python/pyproject - faux_pkgs_str = f"{os.linesep}{os.linesep}".join( - ( - f"""# -- Adding non-package dependency {fullpath.name} -- -COPY --from=__outer_{fullpath.name} . {destpath}""" - if fullpath in local_deps.additional_contexts - else f"""# -- Adding non-package dependency {fullpath.name} -- -ADD {relpath} {destpath}""" - ) - + f""" -RUN set -ex && \\ - for line in '[project]' \\ - 'name = "{fullpath.name}"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_{fullpath.name}/pyproject.toml; \\ - done -# -- End of non-package dependency {fullpath.name} --""" - for fullpath, (relpath, destpath) in local_deps.faux_pkgs.items() - ) - - local_pkgs_str = os.linesep.join( - f"""# -- Adding local package {relpath} -- -COPY --from={name} . /deps/{name} -# -- End of local package {relpath} --""" - if fullpath in local_deps.additional_contexts - else f"""# -- Adding local package {relpath} -- -ADD {relpath} /deps/{name} -# -- End of local package {relpath} --""" - for fullpath, (relpath, name) in local_deps.real_pkgs.items() - ) - - installs = f"{os.linesep}{os.linesep}".join( - filter( - None, - [ - pip_config_file_str, - pip_pkgs_str, - pip_reqs_str, - local_pkgs_str, - faux_pkgs_str, - ], - ) - ) - - env_vars = [] - - if (store_config := config.get("store")) is not None: - env_vars.append(f"ENV LANGGRAPH_STORE='{json.dumps(store_config)}'") - - if (auth_config := config.get("auth")) is not None: - env_vars.append(f"ENV LANGGRAPH_AUTH='{json.dumps(auth_config)}'") - - if (http_config := config.get("http")) is not None: - env_vars.append(f"ENV LANGGRAPH_HTTP='{json.dumps(http_config)}'") - - graphs = config["graphs"] - env_vars.append(f"ENV LANGSERVE_GRAPHS='{json.dumps(graphs)}'") - - docker_file_contents = [ - f"FROM {base_image}:{config['python_version']}", - "", - os.linesep.join(config["dockerfile_lines"]), - "", - installs, - "", - "# -- Installing all local dependencies --", - f"RUN {pip_install} -e /deps/*", - "# -- End of local dependencies install --", - os.linesep.join(env_vars), - "", - f"WORKDIR {local_deps.working_dir}" if local_deps.working_dir else "", - ] - - additional_contexts: dict[str, str] = {} - for p in local_deps.additional_contexts: - if p in local_deps.real_pkgs: - name = local_deps.real_pkgs[p][1] - elif p in local_deps.faux_pkgs: - name = f"__outer_{p.name}" - else: - raise RuntimeError(f"Unknown additional context: {p}") - additional_contexts[name] = str(p) - - return os.linesep.join(docker_file_contents), additional_contexts - - -def node_config_to_docker( - config_path: pathlib.Path, config: Config, base_image: str -) -> tuple[str, dict[str, str]]: - faux_path = f"/deps/{config_path.parent.name}" - - def test_file(file_name): - full_path = config_path.parent / file_name - try: - return full_path.is_file() - except OSError: - return False - - npm, yarn, pnpm, bun = [ - test_file("package-lock.json"), - test_file("yarn.lock"), - test_file("pnpm-lock.yaml"), - test_file("bun.lockb"), - ] - - if yarn: - install_cmd = "yarn install --frozen-lockfile" - elif pnpm: - install_cmd = "pnpm i --frozen-lockfile" - elif npm: - install_cmd = "npm ci" - elif bun: - install_cmd = "bun i" - else: - install_cmd = "npm i" - store_config = config.get("store") - env_additional_config = ( - "" - if not store_config - else f""" -ENV LANGGRAPH_STORE='{json.dumps(store_config)}' -""" - ) - if (auth_config := config.get("auth")) is not None: - env_additional_config += f""" -ENV LANGGRAPH_AUTH='{json.dumps(auth_config)}' -""" - if (http_config := config.get("http")) is not None: - env_additional_config += f""" -ENV LANGGRAPH_HTTP='{json.dumps(http_config)}' -""" - - return ( - f"""FROM {base_image}:{config['node_version']} - -{os.linesep.join(config["dockerfile_lines"])} - -ADD . {faux_path} - -RUN cd {faux_path} && {install_cmd} -{env_additional_config} -ENV LANGSERVE_GRAPHS='{json.dumps(config["graphs"])}' - -WORKDIR {faux_path} - -RUN (test ! -f /api/langgraph_api/js/build.mts && echo "Prebuild script not found, skipping") || tsx /api/langgraph_api/js/build.mts""", - {}, - ) - - -def config_to_docker( - config_path: pathlib.Path, config: Config, base_image: str -) -> tuple[str, dict[str, str]]: - if config.get("node_version"): - return node_config_to_docker(config_path, config, base_image) - - return python_config_to_docker(config_path, config, base_image) - - -def config_to_compose( - config_path: pathlib.Path, - config: Config, - base_image: str, - watch: bool = False, -) -> str: - env_vars = config["env"].items() if isinstance(config["env"], dict) else {} - env_vars_str = "\n".join(f' {k}: "{v}"' for k, v in env_vars) - env_file_str = ( - f"env_file: {config['env']}" if isinstance(config["env"], str) else "" - ) - if watch: - dependencies = config.get("dependencies") or ["."] - watch_paths = [config_path.name] + [ - dep for dep in dependencies if dep.startswith(".") - ] - watch_actions = "\n".join( - f"""- path: {path} - action: rebuild""" - for path in watch_paths - ) - watch_str = f""" - develop: - watch: -{textwrap.indent(watch_actions, " ")} -""" - else: - watch_str = "" - - dockerfile, additional_contexts = config_to_docker(config_path, config, base_image) - - additional_contexts_str = "\n".join( - f" - {name}: {path}" - for name, path in additional_contexts.items() - ) - if additional_contexts_str: - additional_contexts_str = f""" - additional_contexts: -{additional_contexts_str}""" - - return f""" -{textwrap.indent(env_vars_str, " ")} - {env_file_str} - pull_policy: build - build: - context: .{additional_contexts_str} - dockerfile_inline: | -{textwrap.indent(dockerfile, " ")} - {watch_str} -""" diff --git a/libs/cli/langgraph_cli/constants.py b/libs/cli/langgraph_cli/constants.py deleted file mode 100644 index 117062a97..000000000 --- a/libs/cli/langgraph_cli/constants.py +++ /dev/null @@ -1,6 +0,0 @@ -DEFAULT_CONFIG = "langgraph.json" -DEFAULT_PORT = 8123 - -# analytics -SUPABASE_PUBLIC_API_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imt6cmxwcG9qaW5wY3l5YWlweG5iIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTkyNTc1NzksImV4cCI6MjAzNDgzMzU3OX0.kkVOlLz3BxemA5nP-vat3K4qRtrDuO4SwZSR_htcX9c" -SUPABASE_URL = "https://kzrlppojinpcyyaipxnb.supabase.co" diff --git a/libs/cli/langgraph_cli/docker.py b/libs/cli/langgraph_cli/docker.py deleted file mode 100644 index dc6ac245e..000000000 --- a/libs/cli/langgraph_cli/docker.py +++ /dev/null @@ -1,257 +0,0 @@ -import json -import pathlib -import shutil -from typing import Literal, NamedTuple, Optional - -import click.exceptions - -from langgraph_cli.exec import subp_exec - -ROOT = pathlib.Path(__file__).parent.resolve() -DEFAULT_POSTGRES_URI = ( - "postgres://postgres:postgres@langgraph-postgres:5432/postgres?sslmode=disable" -) - - -class Version(NamedTuple): - major: int - minor: int - patch: int - - -DockerComposeType = Literal["plugin", "standalone"] - - -class DockerCapabilities(NamedTuple): - version_docker: Version - version_compose: Version - healthcheck_start_interval: bool - compose_type: DockerComposeType = "plugin" - - -def _parse_version(version: str) -> Version: - parts = version.split(".", 2) - if len(parts) == 1: - major = parts[0] - minor = "0" - patch = "0" - elif len(parts) == 2: - major, minor = parts - patch = "0" - else: - major, minor, patch = parts - return Version(int(major.lstrip("v")), int(minor), int(patch.split("-")[0])) - - -def check_capabilities(runner) -> DockerCapabilities: - # check docker available - if shutil.which("docker") is None: - raise click.UsageError("Docker not installed") from None - - try: - stdout, _ = runner.run( - subp_exec("docker", "info", "-f", "{{json .}}", collect=True) - ) - info = json.loads(stdout) - except (click.exceptions.Exit, json.JSONDecodeError): - raise click.UsageError("Docker not installed or not running") from None - - if not info["ServerVersion"]: - raise click.UsageError("Docker not running") from None - - compose_type: DockerComposeType - try: - compose = next( - p for p in info["ClientInfo"]["Plugins"] if p["Name"] == "compose" - ) - compose_version_str = compose["Version"] - compose_type = "plugin" - except (KeyError, StopIteration): - if shutil.which("docker-compose") is None: - raise click.UsageError("Docker Compose not installed") from None - - compose_version_str, _ = runner.run( - subp_exec("docker-compose", "--version", "--short", collect=True) - ) - compose_type = "standalone" - - # parse versions - docker_version = _parse_version(info["ServerVersion"]) - compose_version = _parse_version(compose_version_str) - - # check capabilities - return DockerCapabilities( - version_docker=docker_version, - version_compose=compose_version, - healthcheck_start_interval=docker_version >= Version(25, 0, 0), - compose_type=compose_type, - ) - - -def debugger_compose( - *, port: Optional[int] = None, base_url: Optional[str] = None -) -> dict: - if port is None: - return "" - - config = { - "langgraph-debugger": { - "image": "langchain/langgraph-debugger", - "restart": "on-failure", - "depends_on": { - "langgraph-postgres": {"condition": "service_healthy"}, - }, - "ports": [f'"{port}:3968"'], - } - } - - if base_url: - config["langgraph-debugger"]["environment"] = { - "VITE_STUDIO_LOCAL_GRAPH_URL": base_url - } - - return config - - -# Function to convert dictionary to YAML -def dict_to_yaml(d: dict, *, indent: int = 0) -> str: - """Convert a dictionary to a YAML string.""" - yaml_str = "" - - for idx, (key, value) in enumerate(d.items()): - # Format things in a visually appealing way - # Use an extra newline for top-level keys only - if idx >= 1 and indent < 2: - yaml_str += "\n" - space = " " * indent - if isinstance(value, dict): - yaml_str += f"{space}{key}:\n" + dict_to_yaml(value, indent=indent + 1) - elif isinstance(value, list): - yaml_str += f"{space}{key}:\n" - for item in value: - yaml_str += f"{space} - {item}\n" - else: - yaml_str += f"{space}{key}: {value}\n" - return yaml_str - - -def compose_as_dict( - capabilities: DockerCapabilities, - *, - port: int, - debugger_port: Optional[int] = None, - debugger_base_url: Optional[str] = None, - # postgres://user:password@host:port/database?option=value - postgres_uri: Optional[str] = None, -) -> dict: - """Create a docker compose file as a dictionary in YML style.""" - if postgres_uri is None: - include_db = True - postgres_uri = DEFAULT_POSTGRES_URI - else: - include_db = False - - # The services below are defined in a non-intuitive order to match - # the existing unit tests for this function. - # It's fine to re-order just requires updating the unit tests, so it should - # be done with caution. - - # Define the Redis service first as per the test order - services = { - "langgraph-redis": { - "image": "redis:6", - "healthcheck": { - "test": "redis-cli ping", - "interval": "5s", - "timeout": "1s", - "retries": 5, - }, - } - } - - # Add Postgres service before langgraph-api if it is needed - if include_db: - services["langgraph-postgres"] = { - "image": "pgvector/pgvector:pg16", - "ports": ['"5433:5432"'], - "environment": { - "POSTGRES_DB": "postgres", - "POSTGRES_USER": "postgres", - "POSTGRES_PASSWORD": "postgres", - }, - "command": ["postgres", "-c", "shared_preload_libraries=vector"], - "volumes": ["langgraph-data:/var/lib/postgresql/data"], - "healthcheck": { - "test": "pg_isready -U postgres", - "start_period": "10s", - "timeout": "1s", - "retries": 5, - }, - } - if capabilities.healthcheck_start_interval: - services["langgraph-postgres"]["healthcheck"]["interval"] = "60s" - services["langgraph-postgres"]["healthcheck"]["start_interval"] = "1s" - else: - services["langgraph-postgres"]["healthcheck"]["interval"] = "5s" - - # Add optional debugger service if debugger_port is specified - if debugger_port: - services["langgraph-debugger"] = debugger_compose( - port=debugger_port, base_url=debugger_base_url - )["langgraph-debugger"] - - # Add langgraph-api service - services["langgraph-api"] = { - "ports": [f'"{port}:8000"'], - "depends_on": { - "langgraph-redis": {"condition": "service_healthy"}, - }, - "environment": { - "REDIS_URI": "redis://langgraph-redis:6379", - "POSTGRES_URI": postgres_uri, - }, - } - - # If Postgres is included, add it to the dependencies of langgraph-api - if include_db: - services["langgraph-api"]["depends_on"]["langgraph-postgres"] = { - "condition": "service_healthy" - } - - # Additional healthcheck for langgraph-api if required - if capabilities.healthcheck_start_interval: - services["langgraph-api"]["healthcheck"] = { - "test": "python /api/healthcheck.py", - "interval": "60s", - "start_interval": "1s", - "start_period": "10s", - } - - # Final compose dictionary with volumes included if needed - compose_dict = {} - if include_db: - compose_dict["volumes"] = {"langgraph-data": {"driver": "local"}} - compose_dict["services"] = services - - return compose_dict - - -def compose( - capabilities: DockerCapabilities, - *, - port: int, - debugger_port: Optional[int] = None, - debugger_base_url: Optional[str] = None, - # postgres://user:password@host:port/database?option=value - postgres_uri: Optional[str] = None, -) -> str: - """Create a docker compose file as a string.""" - compose_content = compose_as_dict( - capabilities, - port=port, - debugger_port=debugger_port, - debugger_base_url=debugger_base_url, - postgres_uri=postgres_uri, - ) - compose_str = dict_to_yaml(compose_content) - return compose_str diff --git a/libs/cli/langgraph_cli/exec.py b/libs/cli/langgraph_cli/exec.py deleted file mode 100644 index d6282ccfe..000000000 --- a/libs/cli/langgraph_cli/exec.py +++ /dev/null @@ -1,173 +0,0 @@ -import asyncio -import signal -import sys -from contextlib import contextmanager -from typing import Callable, Optional, cast - -import click.exceptions - - -@contextmanager -def Runner(): - if hasattr(asyncio, "Runner"): - with asyncio.Runner() as runner: - yield runner - else: - - class _Runner: - def __enter__(self): - return self - - def __exit__(self, *args): - pass - - def run(self, coro): - return asyncio.run(coro) - - yield _Runner() - - -async def subp_exec( - cmd: str, - *args: str, - input: Optional[str] = None, - wait: Optional[float] = None, - verbose: bool = False, - collect: bool = False, - on_stdout: Optional[Callable[[str], Optional[bool]]] = None, -) -> tuple[Optional[str], Optional[str]]: - if verbose: - cmd_str = f"+ {cmd} {' '.join(map(str, args))}" - if input: - print(cmd_str, " <\n", "\n".join(filter(None, input.splitlines())), sep="") - else: - print(cmd_str) - if wait: - await asyncio.sleep(wait) - - try: - proc = await asyncio.create_subprocess_exec( - cmd, - *args, - stdin=asyncio.subprocess.PIPE if input else None, - stdout=asyncio.subprocess.PIPE, - stderr=asyncio.subprocess.PIPE, - ) - - def signal_handler(): - # make sure process exists, then terminate it - if proc.returncode is None: - proc.terminate() - - original_sigint_handler = signal.getsignal(signal.SIGINT) - if sys.platform == "win32": - - def handle_windows_signal(signum, frame): - signal_handler() - original_sigint_handler(signum, frame) - - signal.signal(signal.SIGINT, handle_windows_signal) - # NOTE: we're not adding a handler for SIGTERM since it's ignored on Windows - else: - loop = asyncio.get_event_loop() - loop.add_signal_handler(signal.SIGINT, signal_handler) - loop.add_signal_handler(signal.SIGTERM, signal_handler) - - empty_fut: asyncio.Future = asyncio.Future() - empty_fut.set_result(None) - stdout, stderr, _ = await asyncio.gather( - monitor_stream( - cast(asyncio.StreamReader, proc.stdout), - collect=True, - display=verbose, - on_line=on_stdout, - ), - monitor_stream( - cast(asyncio.StreamReader, proc.stderr), - collect=True, - display=verbose, - ), - proc._feed_stdin(input.encode()) if input else empty_fut, # type: ignore[attr-defined] - ) - returncode = await proc.wait() - if ( - returncode is not None - and returncode != 0 # success - and returncode != 130 # user interrupt - ): - sys.stdout.write(stdout.decode() if stdout else "") - sys.stderr.write(stderr.decode() if stderr else "") - raise click.exceptions.Exit(returncode) - if collect: - return ( - stdout.decode() if stdout else None, - stderr.decode() if stderr else None, - ) - else: - return None, None - finally: - try: - if proc.returncode is None: - try: - proc.terminate() - except (ProcessLookupError, KeyboardInterrupt): - pass - - if sys.platform == "win32": - signal.signal(signal.SIGINT, original_sigint_handler) - else: - loop.remove_signal_handler(signal.SIGINT) - loop.remove_signal_handler(signal.SIGTERM) - except UnboundLocalError: - pass - - -async def monitor_stream( - stream: asyncio.StreamReader, - collect: bool = False, - display: bool = False, - on_line: Optional[Callable[[str], Optional[bool]]] = None, -) -> Optional[bytearray]: - if collect: - ba = bytearray() - - def handle(line: bytes, overrun: bool): - nonlocal on_line - nonlocal display - - if display: - sys.stdout.buffer.write(line) - if overrun: - return - if collect: - ba.extend(line) - if on_line: - if on_line(line.decode()): - on_line = None - display = True - - """Adapted from asyncio.StreamReader.readline() to handle LimitOverrunError.""" - sep = b"\n" - seplen = len(sep) - while True: - try: - line = await stream.readuntil(sep) - overrun = False - except asyncio.IncompleteReadError as e: - line = e.partial - overrun = False - except asyncio.LimitOverrunError as e: - if stream._buffer.startswith(sep, e.consumed): - line = stream._buffer[: e.consumed + seplen] - else: - line = stream._buffer.clear() - overrun = True - stream._maybe_resume_transport() - await asyncio.to_thread(handle, line, overrun) - if line == b"": - break - - if collect: - return ba - else: - return None diff --git a/libs/cli/langgraph_cli/progress.py b/libs/cli/langgraph_cli/progress.py deleted file mode 100644 index 38154f1b9..000000000 --- a/libs/cli/langgraph_cli/progress.py +++ /dev/null @@ -1,64 +0,0 @@ -import sys -import threading -import time -from typing import Callable - - -class Progress: - delay: float = 0.1 - - @staticmethod - def spinning_cursor(): - while True: - yield from "|/-\\" - - def __init__(self, *, message=""): - self.message = message - self.spinner_generator = self.spinning_cursor() - - def spinner_iteration(self): - message = self.message - sys.stdout.write(next(self.spinner_generator) + " " + message) - sys.stdout.flush() - time.sleep(self.delay) - # clear the spinner and message - sys.stdout.write( - "\b" * (len(message) + 2) - + " " * (len(message) + 2) - + "\b" * (len(message) + 2) - ) - sys.stdout.flush() - - def spinner_task(self): - while self.message: - message = self.message - sys.stdout.write(next(self.spinner_generator) + " " + message) - sys.stdout.flush() - time.sleep(self.delay) - # clear the spinner and message - sys.stdout.write( - "\b" * (len(message) + 2) - + " " * (len(message) + 2) - + "\b" * (len(message) + 2) - ) - sys.stdout.flush() - - def __enter__(self) -> Callable[[str], None]: - self.thread = threading.Thread(target=self.spinner_task) - self.thread.start() - - def set_message(message): - self.message = message - if not message: - self.thread.join() - - return set_message - - def __exit__(self, exception, value, tb): - self.message = "" - try: - self.thread.join() - finally: - del self.thread - if exception is not None: - return False diff --git a/libs/cli/langgraph_cli/py.typed b/libs/cli/langgraph_cli/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/langgraph_cli/templates.py b/libs/cli/langgraph_cli/templates.py deleted file mode 100644 index fbbc261a5..000000000 --- a/libs/cli/langgraph_cli/templates.py +++ /dev/null @@ -1,223 +0,0 @@ -import os -import shutil -import sys -from io import BytesIO -from typing import Dict, Optional -from urllib import error, request -from zipfile import ZipFile - -import click - -TEMPLATES: Dict[str, Dict[str, str]] = { - "New LangGraph Project": { - "description": "A simple, minimal chatbot with memory.", - "python": "https://github.com/langchain-ai/new-langgraph-project/archive/refs/heads/main.zip", - "js": "https://github.com/langchain-ai/new-langgraphjs-project/archive/refs/heads/main.zip", - }, - "ReAct Agent": { - "description": "A simple agent that can be flexibly extended to many tools.", - "python": "https://github.com/langchain-ai/react-agent/archive/refs/heads/main.zip", - "js": "https://github.com/langchain-ai/react-agent-js/archive/refs/heads/main.zip", - }, - "Memory Agent": { - "description": "A ReAct-style agent with an additional tool to store memories for use across conversational threads.", - "python": "https://github.com/langchain-ai/memory-agent/archive/refs/heads/main.zip", - "js": "https://github.com/langchain-ai/memory-agent-js/archive/refs/heads/main.zip", - }, - "Retrieval Agent": { - "description": "An agent that includes a retrieval-based question-answering system.", - "python": "https://github.com/langchain-ai/retrieval-agent-template/archive/refs/heads/main.zip", - "js": "https://github.com/langchain-ai/retrieval-agent-template-js/archive/refs/heads/main.zip", - }, - "Data-enrichment Agent": { - "description": "An agent that performs web searches and organizes its findings into a structured format.", - "python": "https://github.com/langchain-ai/data-enrichment/archive/refs/heads/main.zip", - "js": "https://github.com/langchain-ai/data-enrichment-js/archive/refs/heads/main.zip", - }, -} - -# Generate TEMPLATE_IDS programmatically -TEMPLATE_ID_TO_CONFIG = { - f"{name.lower().replace(' ', '-')}-{lang}": (name, lang, url) - for name, versions in TEMPLATES.items() - for lang, url in versions.items() - if lang in {"python", "js"} -} - -TEMPLATE_IDS = list(TEMPLATE_ID_TO_CONFIG.keys()) - -TEMPLATE_HELP_STRING = ( - "The name of the template to use. Available options:\n" - + "\n".join(f"{id_}" for id_ in TEMPLATE_ID_TO_CONFIG) -) - - -def _choose_template() -> str: - """Presents a list of templates to the user and prompts them to select one. - - Returns: - str: The URL of the selected template. - """ - click.secho("🌟 Please select a template:", bold=True, fg="yellow") - for idx, (template_name, template_info) in enumerate(TEMPLATES.items(), 1): - click.secho(f"{idx}. ", nl=False, fg="cyan") - click.secho(template_name, fg="cyan", nl=False) - click.secho(f" - {template_info['description']}", fg="white") - - # Get the template choice from the user, defaulting to the first template if blank - template_choice: Optional[int] = click.prompt( - "Enter the number of your template choice (default is 1)", - type=int, - default=1, - show_default=False, - ) - - template_keys = list(TEMPLATES.keys()) - if 1 <= template_choice <= len(template_keys): - selected_template: str = template_keys[template_choice - 1] - else: - click.secho("❌ Invalid choice. Please try again.", fg="red") - return _choose_template() - - # Prompt the user to choose between Python or JS/TS version - click.secho( - f"\nYou selected: {selected_template} - {TEMPLATES[selected_template]['description']}", - fg="green", - ) - version_choice: int = click.prompt( - "Choose language (1 for Python 🐍, 2 for JS/TS 🌐)", type=int - ) - - if version_choice == 1: - return TEMPLATES[selected_template]["python"] - elif version_choice == 2: - return TEMPLATES[selected_template]["js"] - else: - click.secho("❌ Invalid choice. Please try again.", fg="red") - return _choose_template() - - -def _download_repo_with_requests(repo_url: str, path: str) -> None: - """Download a ZIP archive from the given URL and extracts it to the specified path. - - Args: - repo_url (str): The URL of the repository to download. - path (str): The path where the repository should be extracted. - """ - click.secho("📥 Attempting to download repository as a ZIP archive...", fg="yellow") - click.secho(f"URL: {repo_url}", fg="yellow") - try: - with request.urlopen(repo_url) as response: - if response.status == 200: - with ZipFile(BytesIO(response.read())) as zip_file: - zip_file.extractall(path) - # Move extracted contents to path - for item in os.listdir(path): - if item.endswith("-main"): - extracted_dir = os.path.join(path, item) - for filename in os.listdir(extracted_dir): - shutil.move(os.path.join(extracted_dir, filename), path) - shutil.rmtree(extracted_dir) - click.secho( - f"✅ Downloaded and extracted repository to {path}", fg="green" - ) - except error.HTTPError as e: - click.secho( - f"❌ Error: Failed to download repository.\n" f"Details: {e}\n", - fg="red", - bold=True, - err=True, - ) - sys.exit(1) - - -def _get_template_url(template_name: str) -> Optional[str]: - """ - Retrieves the template URL based on the provided template name. - - Args: - template_name (str): The name of the template. - - Returns: - Optional[str]: The URL of the template if found, else None. - """ - if template_name in TEMPLATES: - click.secho(f"Template selected: {template_name}", fg="green") - version_choice: int = click.prompt( - "Choose version (1 for Python 🐍, 2 for JS/TS 🌐)", type=int - ) - - if version_choice == 1: - return TEMPLATES[template_name]["python"] - elif version_choice == 2: - return TEMPLATES[template_name]["js"] - else: - click.secho("❌ Invalid choice. Please try again.", fg="red") - return None - else: - click.secho( - f"Template '{template_name}' not found. Please select from the available options.", - fg="red", - ) - return None - - -def create_new(path: Optional[str], template: Optional[str]) -> None: - """Create a new LangGraph project at the specified PATH using the chosen TEMPLATE. - - Args: - path (Optional[str]): The path where the new project will be created. - template (Optional[str]): The name of the template to use. - """ - # Prompt for path if not provided - if not path: - path = click.prompt( - "📂 Please specify the path to create the application", default="." - ) - - path = os.path.abspath(path) # Ensure path is absolute - - # Check if path exists and is not empty - if os.path.exists(path) and os.listdir(path): - click.secho( - "❌ The specified directory already exists and is not empty. " - "Aborting to prevent overwriting files.", - fg="red", - bold=True, - ) - sys.exit(1) - - # Get template URL either from command-line argument or - # through interactive selection - if template: - if template not in TEMPLATE_ID_TO_CONFIG: - # Format available options in a readable way with descriptions - template_options = "" - for id_ in TEMPLATE_IDS: - name, lang, _ = TEMPLATE_ID_TO_CONFIG[id_] - description = TEMPLATES[name]["description"] - - # Add each template option with color formatting - template_options += ( - click.style("- ", fg="yellow", bold=True) - + click.style(f"{id_}", fg="cyan") - + click.style(f": {description}", fg="white") - + "\n" - ) - - # Display error message with colors and formatting - click.secho("❌ Error:", fg="red", bold=True, nl=False) - click.secho(f" Template '{template}' not found.", fg="red") - click.secho( - "Please select from the available options:\n", fg="yellow", bold=True - ) - click.secho(template_options, fg="cyan") - sys.exit(1) - _, _, template_url = TEMPLATE_ID_TO_CONFIG[template] - else: - template_url = _choose_template() - - # Download and extract the template - _download_repo_with_requests(template_url, path) - - click.secho(f"🎉 New project created at {path}", fg="green", bold=True) diff --git a/libs/cli/langgraph_cli/util.py b/libs/cli/langgraph_cli/util.py deleted file mode 100644 index 79b67a2c9..000000000 --- a/libs/cli/langgraph_cli/util.py +++ /dev/null @@ -1,2 +0,0 @@ -def clean_empty_lines(input_str: str): - return "\n".join(filter(None, input_str.splitlines())) diff --git a/libs/cli/langgraph_cli/version.py b/libs/cli/langgraph_cli/version.py deleted file mode 100644 index 3368893c0..000000000 --- a/libs/cli/langgraph_cli/version.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Main entrypoint into package.""" - -from importlib import metadata - -try: - __version__ = metadata.version(__package__) -except metadata.PackageNotFoundError: - # Case where package metadata is not available. - __version__ = "" -del metadata # optional, avoids polluting the results of dir(__package__) diff --git a/libs/cli/poetry.lock b/libs/cli/poetry.lock deleted file mode 100644 index f3bdb61c4..000000000 --- a/libs/cli/poetry.lock +++ /dev/null @@ -1,1668 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. - -[[package]] -name = "annotated-types" -version = "0.7.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = true -python-versions = ">=3.8" -files = [ - {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, - {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, -] - -[[package]] -name = "anyio" -version = "4.8.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = true -python-versions = ">=3.9" -files = [ - {file = "anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"}, - {file = "anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a"}, -] - -[package.dependencies] -idna = ">=2.8" -sniffio = ">=1.1" -typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} - -[package.extras] -doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] -trio = ["trio (>=0.26.1)"] - -[[package]] -name = "certifi" -version = "2025.1.31" -description = "Python package for providing Mozilla's CA Bundle." -optional = true -python-versions = ">=3.6" -files = [ - {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, - {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, -] - -[[package]] -name = "cffi" -version = "1.17.1" -description = "Foreign Function Interface for Python calling C code." -optional = true -python-versions = ">=3.8" -files = [ - {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, - {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, - {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, - {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, - {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, - {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, - {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, - {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, - {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, - {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, - {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, - {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, - {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, - {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, - {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, - {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, -] - -[package.dependencies] -pycparser = "*" - -[[package]] -name = "charset-normalizer" -version = "3.4.1" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = true -python-versions = ">=3.7" -files = [ - {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, - {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, - {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, -] - -[[package]] -name = "click" -version = "8.1.8" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, - {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "codespell" -version = "2.4.1" -description = "Fix common misspellings in text files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "codespell-2.4.1-py3-none-any.whl", hash = "sha256:3dadafa67df7e4a3dbf51e0d7315061b80d265f9552ebd699b3dd6834b47e425"}, - {file = "codespell-2.4.1.tar.gz", hash = "sha256:299fcdcb09d23e81e35a671bbe746d5ad7e8385972e65dbb833a2eaac33c01e5"}, -] - -[package.extras] -dev = ["Pygments", "build", "chardet", "pre-commit", "pytest", "pytest-cov", "pytest-dependency", "ruff", "tomli", "twine"] -hard-encoding-detection = ["chardet"] -toml = ["tomli"] -types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency"] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "cryptography" -version = "43.0.3" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -optional = true -python-versions = ">=3.7" -files = [ - {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18"}, - {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd"}, - {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73"}, - {file = "cryptography-43.0.3-cp37-abi3-win32.whl", hash = "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2"}, - {file = "cryptography-43.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd"}, - {file = "cryptography-43.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405"}, - {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16"}, - {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73"}, - {file = "cryptography-43.0.3-cp39-abi3-win32.whl", hash = "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995"}, - {file = "cryptography-43.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, - {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, -] - -[package.dependencies] -cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} - -[package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] -nox = ["nox"] -pep8test = ["check-sdist", "click", "mypy", "ruff"] -sdist = ["build"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] -test-randomorder = ["pytest-randomly"] - -[[package]] -name = "docopt" -version = "0.6.2" -description = "Pythonic argument parser, that will make you smile" -optional = false -python-versions = "*" -files = [ - {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.2.2" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = true -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "httpcore" -version = "1.0.7" -description = "A minimal low-level HTTP client." -optional = true -python-versions = ">=3.8" -files = [ - {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, - {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, -] - -[package.dependencies] -certifi = "*" -h11 = ">=0.13,<0.15" - -[package.extras] -asyncio = ["anyio (>=4.0,<5.0)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<1.0)"] - -[[package]] -name = "httpx" -version = "0.28.1" -description = "The next generation HTTP client." -optional = true -python-versions = ">=3.8" -files = [ - {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, - {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, -] - -[package.dependencies] -anyio = "*" -certifi = "*" -httpcore = "==1.*" -idna = "*" - -[package.extras] -brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "idna" -version = "3.10" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = true -python-versions = ">=3.6" -files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "jsonpatch" -version = "1.33" -description = "Apply JSON-Patches (RFC 6902)" -optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -files = [ - {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, - {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, -] - -[package.dependencies] -jsonpointer = ">=1.9" - -[[package]] -name = "jsonpointer" -version = "3.0.0" -description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = true -python-versions = ">=3.7" -files = [ - {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, - {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, -] - -[[package]] -name = "jsonschema-rs" -version = "0.20.0" -description = "A high-performance JSON Schema validator for Python" -optional = true -python-versions = ">=3.8" -files = [ - {file = "jsonschema_rs-0.20.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:d4b12f8aaec5037529fd11e5f71032cb53d44e8e2236bb7c3fb35e6efc7ce7f2"}, - {file = "jsonschema_rs-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:25d512c47c5c391020c9fc4223f270cf42fbdd39b2906dbc894fe0205168b8f8"}, - {file = "jsonschema_rs-0.20.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e4d449a8c2d67c774b8719964cf4dc8eb453a6c665ddf0815780dbcc46a31be"}, - {file = "jsonschema_rs-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60e14bd30306f300d194d6053a8b7dc3723bac20edc2c27db055e45bcc02687c"}, - {file = "jsonschema_rs-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ea9cd8058c6d8ace05fd60a4e11d5bd933f4c21d55c4cccb2bdb6faba9b0319"}, - {file = "jsonschema_rs-0.20.0-cp310-none-win32.whl", hash = "sha256:ef3198e43addd93619242a30ba40962521b384d68c05507fc680b549d95f7cc0"}, - {file = "jsonschema_rs-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:ab5a5c6b7282242c64bfc812c10d72dcbd9f5fe083cf81ae94de3cc2da7f0e1e"}, - {file = "jsonschema_rs-0.20.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:2f76153d57c8c3778829e14867dd6479eaba17f56e2ba42da82494663200b37a"}, - {file = "jsonschema_rs-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:1a2b24871ade985580a3f10cfde2a52673823163813fe311abffb30e0aeb4181"}, - {file = "jsonschema_rs-0.20.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6bf5afaa6e80aa59fae06ca92efb1f8e29b2679f8f8884585272f7c100f04c69"}, - {file = "jsonschema_rs-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42d180b318653184eb69d9641dfded6b2d59c88db8fb82012d3d20e1582af5cd"}, - {file = "jsonschema_rs-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7aa67bf6338fbce3a2a3f9f408413aad7a72593ed73c846bc2667a20b747327f"}, - {file = "jsonschema_rs-0.20.0-cp311-none-win32.whl", hash = "sha256:55c255ca6ee44177b7b5c773a8edb25af34be0d6a454e602be92cc183d6dcbe7"}, - {file = "jsonschema_rs-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:3b6effefdef590854522517b84081214b46a8fba9a5d60c538c6f1ff819609c5"}, - {file = "jsonschema_rs-0.20.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:8b9d044ecdef9a15e350a35e950c9797c804f185b547bcb56bb91fef9bf31827"}, - {file = "jsonschema_rs-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d43b6a65c159f7aed82dca846f93a4c5ffd013ff0c87a5668a645a81792c8001"}, - {file = "jsonschema_rs-0.20.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9a6500934be21fe64bd65d9e75a67941b675091b8e2154df0a04f5b57073b8bf"}, - {file = "jsonschema_rs-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e42c80eed641a848ee38039291e6ca90e61de1a0b695e706894b175f45c741"}, - {file = "jsonschema_rs-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4e0945cb1ff4d183e855ae975839d648df24604d71827951f57a8b7edabb8ca"}, - {file = "jsonschema_rs-0.20.0-cp312-none-win32.whl", hash = "sha256:00016bfdc132aa8c728fe012e9ed2b5c9d0d3dd5c37368990d58288e121a6d79"}, - {file = "jsonschema_rs-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:2c5abcf6185a4eea7185aadb132f92f6bc1d808d3debe775f0e4608baba8501e"}, - {file = "jsonschema_rs-0.20.0-cp38-cp38-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e51888f8c6c6434fc4037db71fe366c78d3bec8b8b200b6fc70d80266b932d77"}, - {file = "jsonschema_rs-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:7ff31a9bb78813e2d3331aa0e4b558d34d7aaa89ab518b2313ecd53c0b3fb4ef"}, - {file = "jsonschema_rs-0.20.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c7dfb51026ce11ca5b657022a149b7324c81bbe8ff43b57439421b0b57d623ce"}, - {file = "jsonschema_rs-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3278fd2f0a47a0e479b551f526778da76006798dd0fc3c19155223b402b110cf"}, - {file = "jsonschema_rs-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cc6b6935e6a8716b532b09f231d37e6dd39fa5bec3d87aad036a13206e601bd"}, - {file = "jsonschema_rs-0.20.0-cp38-none-win32.whl", hash = "sha256:8ae5f0a04dd4ed2a801df814e67436b6c2cafc127485003382e24a7831f46be3"}, - {file = "jsonschema_rs-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:ee28d48e8dd9f3da8d5dbe190ff769940a606792be16eeb1fe23a62ec0900297"}, - {file = "jsonschema_rs-0.20.0-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:2a698ba8170dbb9fc32e1d0043c8f85903ffbcca56d7dc9ad8a9f169c72eae60"}, - {file = "jsonschema_rs-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4dcba330d2196f7af8229aca43178bdcacd8a393c76dee7b3763e7e2ac40457"}, - {file = "jsonschema_rs-0.20.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0afa2f4b2e4cd6688866a490f3d9d9bfa97a7f19aabd860cfc1c00b54f957a5e"}, - {file = "jsonschema_rs-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18acb318a367fdae7161126e36ecbc005b713684b7178ba853efdcac22d3f41f"}, - {file = "jsonschema_rs-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d0c7a497dbd59369018d6056f5ff54bf955ca385d186bfcf3529432323686f"}, - {file = "jsonschema_rs-0.20.0-cp39-none-win32.whl", hash = "sha256:16d670954877226b7ea66d777e7aba9ca0b6c70772630af67c836aa1e99ba143"}, - {file = "jsonschema_rs-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:12f62a745ee72a5ce109f7412d0f8c55f510158c7a69171d261f1da9bc8b4059"}, - {file = "jsonschema_rs-0.20.0.tar.gz", hash = "sha256:f76d52b7755d184844f1bfedc209c5107b5be3b6b2ae8531db4a0e563b8317ae"}, -] - -[package.extras] -bench = ["fastjsonschema (>=2.20.0)", "jsonschema (>=4.23.0)", "pytest-benchmark (>=4.0.0)"] -tests = ["flask (>=2.2.5)", "hypothesis (>=6.79.4)", "pytest (>=7.4.4)"] - -[[package]] -name = "langchain-core" -version = "0.3.40" -description = "Building applications with LLMs through composability" -optional = true -python-versions = "<4.0,>=3.9" -files = [ - {file = "langchain_core-0.3.40-py3-none-any.whl", hash = "sha256:9f31358741f10a13db8531e8288b8a5ae91904018c5c2e6f739d6645a98fca03"}, - {file = "langchain_core-0.3.40.tar.gz", hash = "sha256:893a238b38491967c804662c1ec7c3e6ebaf223d1125331249c3cf3862ff2746"}, -] - -[package.dependencies] -jsonpatch = ">=1.33,<2.0" -langsmith = ">=0.1.125,<0.4" -packaging = ">=23.2,<25" -pydantic = [ - {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""}, - {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, -] -PyYAML = ">=5.3" -tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" -typing-extensions = ">=4.7" - -[[package]] -name = "langgraph" -version = "0.3.1" -description = "Building stateful, multi-actor applications with LLMs" -optional = true -python-versions = "<4.0,>=3.9.0" -files = [ - {file = "langgraph-0.3.1-py3-none-any.whl", hash = "sha256:212e1220d6a2af27048109604c816ccfbceb53a9aa93721be874305d8e28b7f5"}, - {file = "langgraph-0.3.1.tar.gz", hash = "sha256:81cb89c381b089a20eac9a247f7ebcf3f41c922ac79e06dbcc4fc136c6f73dd5"}, -] - -[package.dependencies] -langchain-core = ">=0.1,<0.4" -langgraph-checkpoint = ">=2.0.10,<3.0.0" -langgraph-prebuilt = ">=0.1.1,<0.2" -langgraph-sdk = ">=0.1.42,<0.2.0" - -[[package]] -name = "langgraph-api" -version = "0.0.27" -description = "" -optional = true -python-versions = "<4.0,>=3.11.0" -files = [ - {file = "langgraph_api-0.0.27-py3-none-any.whl", hash = "sha256:9b21742238b15b8db9c2d3fd760a670332c8897d0bcbbd9d82e43b6ac15a7937"}, - {file = "langgraph_api-0.0.27.tar.gz", hash = "sha256:c21eb2b7fe3b93998379f7b13ad7d23b3ef06ab821b008c6b12b954acfb587ec"}, -] - -[package.dependencies] -cryptography = ">=43.0.3,<44.0.0" -httpx = ">=0.25.0" -jsonschema-rs = ">=0.20.0,<0.21.0" -langchain-core = ">=0.2.38,<0.4.0" -langgraph = ">=0.2.56,<0.4.0" -langgraph-checkpoint = ">=2.0.15,<3.0" -langgraph-sdk = ">=0.1.53,<0.2.0" -langsmith = ">=0.1.63,<0.4.0" -orjson = ">=3.9.7" -pyjwt = ">=2.9.0,<3.0.0" -sse-starlette = ">=2.1.0,<2.2.0" -starlette = ">=0.38.6" -structlog = ">=23.1.0,<24.0.0" -tenacity = ">=8.0.0" -uvicorn = ">=0.26.0" -watchfiles = ">=0.13" - -[[package]] -name = "langgraph-checkpoint" -version = "2.0.16" -description = "Library with base interfaces for LangGraph checkpoint savers." -optional = true -python-versions = "<4.0.0,>=3.9.0" -files = [ - {file = "langgraph_checkpoint-2.0.16-py3-none-any.whl", hash = "sha256:dfab51076a6eddb5f9e146cfe1b977e3dd6419168b2afa23ff3f4e47973bf06f"}, - {file = "langgraph_checkpoint-2.0.16.tar.gz", hash = "sha256:49ba8cfa12b2aae845ccc3b1fbd1d7a8d3a6c4a2e387ab3a92fca40dd3d4baa5"}, -] - -[package.dependencies] -langchain-core = ">=0.2.38,<0.4" -msgpack = ">=1.1.0,<2.0.0" - -[[package]] -name = "langgraph-prebuilt" -version = "0.1.1" -description = "Library with high-level APIs for creating and executing LangGraph agents and tools." -optional = true -python-versions = "<4.0.0,>=3.9.0" -files = [ - {file = "langgraph_prebuilt-0.1.1-py3-none-any.whl", hash = "sha256:148a9558a36ec7e83cc6512f3521425c862b0463251ae0242ade52a448c54e78"}, - {file = "langgraph_prebuilt-0.1.1.tar.gz", hash = "sha256:420a748ff93842f2b1a345a0c1ca3939d2bc7a2d46c20e9a9a0d8f148152cc47"}, -] - -[package.dependencies] -langchain-core = ">=0.2.43,<0.3.0 || >0.3.0,<0.3.1 || >0.3.1,<0.3.2 || >0.3.2,<0.3.3 || >0.3.3,<0.3.4 || >0.3.4,<0.3.5 || >0.3.5,<0.3.6 || >0.3.6,<0.3.7 || >0.3.7,<0.3.8 || >0.3.8,<0.3.9 || >0.3.9,<0.3.10 || >0.3.10,<0.3.11 || >0.3.11,<0.3.12 || >0.3.12,<0.3.13 || >0.3.13,<0.3.14 || >0.3.14,<0.3.15 || >0.3.15,<0.3.16 || >0.3.16,<0.3.17 || >0.3.17,<0.3.18 || >0.3.18,<0.3.19 || >0.3.19,<0.3.20 || >0.3.20,<0.3.21 || >0.3.21,<0.3.22 || >0.3.22,<0.4.0" -langgraph-checkpoint = ">=2.0.10,<3.0.0" - -[[package]] -name = "langgraph-sdk" -version = "0.1.53" -description = "SDK for interacting with LangGraph API" -optional = true -python-versions = "<4.0.0,>=3.9.0" -files = [ - {file = "langgraph_sdk-0.1.53-py3-none-any.whl", hash = "sha256:4fab62caad73661ffe4c3ababedcd0d7bfaaba986bee4416b9c28948458a3af5"}, - {file = "langgraph_sdk-0.1.53.tar.gz", hash = "sha256:12906ed965905fa27e0c28d9fa07dc6fd89e6895ff321ff049fdf3965d057cc4"}, -] - -[package.dependencies] -httpx = ">=0.25.2" -orjson = ">=3.10.1" - -[[package]] -name = "langsmith" -version = "0.3.11" -description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." -optional = true -python-versions = "<4.0,>=3.9" -files = [ - {file = "langsmith-0.3.11-py3-none-any.whl", hash = "sha256:0cca22737ef07d3b038a437c141deda37e00add56022582680188b681bec095e"}, - {file = "langsmith-0.3.11.tar.gz", hash = "sha256:ddf29d24352e99de79c9618aaf95679214324e146c5d3d9475a7ddd2870018b1"}, -] - -[package.dependencies] -httpx = ">=0.23.0,<1" -orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""} -packaging = ">=23.2" -pydantic = [ - {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, - {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, -] -requests = ">=2,<3" -requests-toolbelt = ">=1.0.0,<2.0.0" -zstandard = ">=0.23.0,<0.24.0" - -[package.extras] -langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"] -pytest = ["pytest (>=7.0.0)", "rich (>=13.9.4,<14.0.0)"] - -[[package]] -name = "msgpack" -version = "1.1.0" -description = "MessagePack serializer" -optional = true -python-versions = ">=3.8" -files = [ - {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd"}, - {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d"}, - {file = "msgpack-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:914571a2a5b4e7606997e169f64ce53a8b1e06f2cf2c3a7273aa106236d43dd5"}, - {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c921af52214dcbb75e6bdf6a661b23c3e6417f00c603dd2070bccb5c3ef499f5"}, - {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8ce0b22b890be5d252de90d0e0d119f363012027cf256185fc3d474c44b1b9e"}, - {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73322a6cc57fcee3c0c57c4463d828e9428275fb85a27aa2aa1a92fdc42afd7b"}, - {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e1f3c3d21f7cf67bcf2da8e494d30a75e4cf60041d98b3f79875afb5b96f3a3f"}, - {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64fc9068d701233effd61b19efb1485587560b66fe57b3e50d29c5d78e7fef68"}, - {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:42f754515e0f683f9c79210a5d1cad631ec3d06cea5172214d2176a42e67e19b"}, - {file = "msgpack-1.1.0-cp310-cp310-win32.whl", hash = "sha256:3df7e6b05571b3814361e8464f9304c42d2196808e0119f55d0d3e62cd5ea044"}, - {file = "msgpack-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:685ec345eefc757a7c8af44a3032734a739f8c45d1b0ac45efc5d8977aa4720f"}, - {file = "msgpack-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d364a55082fb2a7416f6c63ae383fbd903adb5a6cf78c5b96cc6316dc1cedc7"}, - {file = "msgpack-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79ec007767b9b56860e0372085f8504db5d06bd6a327a335449508bbee9648fa"}, - {file = "msgpack-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ad622bf7756d5a497d5b6836e7fc3752e2dd6f4c648e24b1803f6048596f701"}, - {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e59bca908d9ca0de3dc8684f21ebf9a690fe47b6be93236eb40b99af28b6ea6"}, - {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e1da8f11a3dd397f0a32c76165cf0c4eb95b31013a94f6ecc0b280c05c91b59"}, - {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:452aff037287acb1d70a804ffd022b21fa2bb7c46bee884dbc864cc9024128a0"}, - {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8da4bf6d54ceed70e8861f833f83ce0814a2b72102e890cbdfe4b34764cdd66e"}, - {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:41c991beebf175faf352fb940bf2af9ad1fb77fd25f38d9142053914947cdbf6"}, - {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a52a1f3a5af7ba1c9ace055b659189f6c669cf3657095b50f9602af3a3ba0fe5"}, - {file = "msgpack-1.1.0-cp311-cp311-win32.whl", hash = "sha256:58638690ebd0a06427c5fe1a227bb6b8b9fdc2bd07701bec13c2335c82131a88"}, - {file = "msgpack-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd2906780f25c8ed5d7b323379f6138524ba793428db5d0e9d226d3fa6aa1788"}, - {file = "msgpack-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d46cf9e3705ea9485687aa4001a76e44748b609d260af21c4ceea7f2212a501d"}, - {file = "msgpack-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5dbad74103df937e1325cc4bfeaf57713be0b4f15e1c2da43ccdd836393e2ea2"}, - {file = "msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58dfc47f8b102da61e8949708b3eafc3504509a5728f8b4ddef84bd9e16ad420"}, - {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676e5be1b472909b2ee6356ff425ebedf5142427842aa06b4dfd5117d1ca8a2"}, - {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17fb65dd0bec285907f68b15734a993ad3fc94332b5bb21b0435846228de1f39"}, - {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51abd48c6d8ac89e0cfd4fe177c61481aca2d5e7ba42044fd218cfd8ea9899f"}, - {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2137773500afa5494a61b1208619e3871f75f27b03bcfca7b3a7023284140247"}, - {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:398b713459fea610861c8a7b62a6fec1882759f308ae0795b5413ff6a160cf3c"}, - {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:06f5fd2f6bb2a7914922d935d3b8bb4a7fff3a9a91cfce6d06c13bc42bec975b"}, - {file = "msgpack-1.1.0-cp312-cp312-win32.whl", hash = "sha256:ad33e8400e4ec17ba782f7b9cf868977d867ed784a1f5f2ab46e7ba53b6e1e1b"}, - {file = "msgpack-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:115a7af8ee9e8cddc10f87636767857e7e3717b7a2e97379dc2054712693e90f"}, - {file = "msgpack-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:071603e2f0771c45ad9bc65719291c568d4edf120b44eb36324dcb02a13bfddf"}, - {file = "msgpack-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0f92a83b84e7c0749e3f12821949d79485971f087604178026085f60ce109330"}, - {file = "msgpack-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1964df7b81285d00a84da4e70cb1383f2e665e0f1f2a7027e683956d04b734"}, - {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59caf6a4ed0d164055ccff8fe31eddc0ebc07cf7326a2aaa0dbf7a4001cd823e"}, - {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0907e1a7119b337971a689153665764adc34e89175f9a34793307d9def08e6ca"}, - {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65553c9b6da8166e819a6aa90ad15288599b340f91d18f60b2061f402b9a4915"}, - {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7a946a8992941fea80ed4beae6bff74ffd7ee129a90b4dd5cf9c476a30e9708d"}, - {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4b51405e36e075193bc051315dbf29168d6141ae2500ba8cd80a522964e31434"}, - {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4c01941fd2ff87c2a934ee6055bda4ed353a7846b8d4f341c428109e9fcde8c"}, - {file = "msgpack-1.1.0-cp313-cp313-win32.whl", hash = "sha256:7c9a35ce2c2573bada929e0b7b3576de647b0defbd25f5139dcdaba0ae35a4cc"}, - {file = "msgpack-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f"}, - {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c40ffa9a15d74e05ba1fe2681ea33b9caffd886675412612d93ab17b58ea2fec"}, - {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1ba6136e650898082d9d5a5217d5906d1e138024f836ff48691784bbe1adf96"}, - {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0856a2b7e8dcb874be44fea031d22e5b3a19121be92a1e098f46068a11b0870"}, - {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:471e27a5787a2e3f974ba023f9e265a8c7cfd373632247deb225617e3100a3c7"}, - {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:646afc8102935a388ffc3914b336d22d1c2d6209c773f3eb5dd4d6d3b6f8c1cb"}, - {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:13599f8829cfbe0158f6456374e9eea9f44eee08076291771d8ae93eda56607f"}, - {file = "msgpack-1.1.0-cp38-cp38-win32.whl", hash = "sha256:8a84efb768fb968381e525eeeb3d92857e4985aacc39f3c47ffd00eb4509315b"}, - {file = "msgpack-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:879a7b7b0ad82481c52d3c7eb99bf6f0645dbdec5134a4bddbd16f3506947feb"}, - {file = "msgpack-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:53258eeb7a80fc46f62fd59c876957a2d0e15e6449a9e71842b6d24419d88ca1"}, - {file = "msgpack-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7e7b853bbc44fb03fbdba34feb4bd414322180135e2cb5164f20ce1c9795ee48"}, - {file = "msgpack-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3e9b4936df53b970513eac1758f3882c88658a220b58dcc1e39606dccaaf01c"}, - {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46c34e99110762a76e3911fc923222472c9d681f1094096ac4102c18319e6468"}, - {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a706d1e74dd3dea05cb54580d9bd8b2880e9264856ce5068027eed09680aa74"}, - {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:534480ee5690ab3cbed89d4c8971a5c631b69a8c0883ecfea96c19118510c846"}, - {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8cf9e8c3a2153934a23ac160cc4cba0ec035f6867c8013cc6077a79823370346"}, - {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3180065ec2abbe13a4ad37688b61b99d7f9e012a535b930e0e683ad6bc30155b"}, - {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c5a91481a3cc573ac8c0d9aace09345d989dc4a0202b7fcb312c88c26d4e71a8"}, - {file = "msgpack-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f80bc7d47f76089633763f952e67f8214cb7b3ee6bfa489b3cb6a84cfac114cd"}, - {file = "msgpack-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:4d1b7ff2d6146e16e8bd665ac726a89c74163ef8cd39fa8c1087d4e52d3a2325"}, - {file = "msgpack-1.1.0.tar.gz", hash = "sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e"}, -] - -[[package]] -name = "mypy" -version = "1.15.0" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, - {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, - {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"}, - {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"}, - {file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"}, - {file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"}, - {file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"}, - {file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"}, - {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"}, - {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"}, - {file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"}, - {file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"}, - {file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"}, - {file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"}, - {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"}, - {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"}, - {file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"}, - {file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"}, - {file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"}, - {file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"}, - {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"}, - {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"}, - {file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"}, - {file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"}, - {file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"}, - {file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"}, - {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"}, - {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"}, - {file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"}, - {file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"}, - {file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"}, - {file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"}, -] - -[package.dependencies] -mypy_extensions = ">=1.0.0" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing_extensions = ">=4.6.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -faster-cache = ["orjson"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "orjson" -version = "3.10.15" -description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -optional = true -python-versions = ">=3.8" -files = [ - {file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"}, - {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"}, - {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c2c79fa308e6edb0ffab0a31fd75a7841bf2a79a20ef08a3c6e3b26814c8ca8"}, - {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cb85490aa6bf98abd20607ab5c8324c0acb48d6da7863a51be48505646c814"}, - {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763dadac05e4e9d2bc14938a45a2d0560549561287d41c465d3c58aec818b164"}, - {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a330b9b4734f09a623f74a7490db713695e13b67c959713b78369f26b3dee6bf"}, - {file = "orjson-3.10.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a61a4622b7ff861f019974f73d8165be1bd9a0855e1cad18ee167acacabeb061"}, - {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acd271247691574416b3228db667b84775c497b245fa275c6ab90dc1ffbbd2b3"}, - {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e4759b109c37f635aa5c5cc93a1b26927bfde24b254bcc0e1149a9fada253d2d"}, - {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e992fd5cfb8b9f00bfad2fd7a05a4299db2bbe92e6440d9dd2fab27655b3182"}, - {file = "orjson-3.10.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f95fb363d79366af56c3f26b71df40b9a583b07bbaaf5b317407c4d58497852e"}, - {file = "orjson-3.10.15-cp310-cp310-win32.whl", hash = "sha256:f9875f5fea7492da8ec2444839dcc439b0ef298978f311103d0b7dfd775898ab"}, - {file = "orjson-3.10.15-cp310-cp310-win_amd64.whl", hash = "sha256:17085a6aa91e1cd70ca8533989a18b5433e15d29c574582f76f821737c8d5806"}, - {file = "orjson-3.10.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c4cc83960ab79a4031f3119cc4b1a1c627a3dc09df125b27c4201dff2af7eaa6"}, - {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddbeef2481d895ab8be5185f2432c334d6dec1f5d1933a9c83014d188e102cef"}, - {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e590a0477b23ecd5b0ac865b1b907b01b3c5535f5e8a8f6ab0e503efb896334"}, - {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6be38bd103d2fd9bdfa31c2720b23b5d47c6796bcb1d1b598e3924441b4298d"}, - {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ff4f6edb1578960ed628a3b998fa54d78d9bb3e2eb2cfc5c2a09732431c678d0"}, - {file = "orjson-3.10.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0482b21d0462eddd67e7fce10b89e0b6ac56570424662b685a0d6fccf581e13"}, - {file = "orjson-3.10.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bb5cc3527036ae3d98b65e37b7986a918955f85332c1ee07f9d3f82f3a6899b5"}, - {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d569c1c462912acdd119ccbf719cf7102ea2c67dd03b99edcb1a3048651ac96b"}, - {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:1e6d33efab6b71d67f22bf2962895d3dc6f82a6273a965fab762e64fa90dc399"}, - {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c33be3795e299f565681d69852ac8c1bc5c84863c0b0030b2b3468843be90388"}, - {file = "orjson-3.10.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eea80037b9fae5339b214f59308ef0589fc06dc870578b7cce6d71eb2096764c"}, - {file = "orjson-3.10.15-cp311-cp311-win32.whl", hash = "sha256:d5ac11b659fd798228a7adba3e37c010e0152b78b1982897020a8e019a94882e"}, - {file = "orjson-3.10.15-cp311-cp311-win_amd64.whl", hash = "sha256:cf45e0214c593660339ef63e875f32ddd5aa3b4adc15e662cdb80dc49e194f8e"}, - {file = "orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9d11c0714fc85bfcf36ada1179400862da3288fc785c30e8297844c867d7505a"}, - {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dba5a1e85d554e3897fa9fe6fbcff2ed32d55008973ec9a2b992bd9a65d2352d"}, - {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7723ad949a0ea502df656948ddd8b392780a5beaa4c3b5f97e525191b102fff0"}, - {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6fd9bc64421e9fe9bd88039e7ce8e58d4fead67ca88e3a4014b143cec7684fd4"}, - {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dadba0e7b6594216c214ef7894c4bd5f08d7c0135f4dd0145600be4fbcc16767"}, - {file = "orjson-3.10.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48f59114fe318f33bbaee8ebeda696d8ccc94c9e90bc27dbe72153094e26f41"}, - {file = "orjson-3.10.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:035fb83585e0f15e076759b6fedaf0abb460d1765b6a36f48018a52858443514"}, - {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d13b7fe322d75bf84464b075eafd8e7dd9eae05649aa2a5354cfa32f43c59f17"}, - {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7066b74f9f259849629e0d04db6609db4cf5b973248f455ba5d3bd58a4daaa5b"}, - {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:88dc3f65a026bd3175eb157fea994fca6ac7c4c8579fc5a86fc2114ad05705b7"}, - {file = "orjson-3.10.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b342567e5465bd99faa559507fe45e33fc76b9fb868a63f1642c6bc0735ad02a"}, - {file = "orjson-3.10.15-cp312-cp312-win32.whl", hash = "sha256:0a4f27ea5617828e6b58922fdbec67b0aa4bb844e2d363b9244c47fa2180e665"}, - {file = "orjson-3.10.15-cp312-cp312-win_amd64.whl", hash = "sha256:ef5b87e7aa9545ddadd2309efe6824bd3dd64ac101c15dae0f2f597911d46eaa"}, - {file = "orjson-3.10.15-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bae0e6ec2b7ba6895198cd981b7cca95d1487d0147c8ed751e5632ad16f031a6"}, - {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f93ce145b2db1252dd86af37d4165b6faa83072b46e3995ecc95d4b2301b725a"}, - {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c203f6f969210128af3acae0ef9ea6aab9782939f45f6fe02d05958fe761ef9"}, - {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8918719572d662e18b8af66aef699d8c21072e54b6c82a3f8f6404c1f5ccd5e0"}, - {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f71eae9651465dff70aa80db92586ad5b92df46a9373ee55252109bb6b703307"}, - {file = "orjson-3.10.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e117eb299a35f2634e25ed120c37c641398826c2f5a3d3cc39f5993b96171b9e"}, - {file = "orjson-3.10.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13242f12d295e83c2955756a574ddd6741c81e5b99f2bef8ed8d53e47a01e4b7"}, - {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7946922ada8f3e0b7b958cc3eb22cfcf6c0df83d1fe5521b4a100103e3fa84c8"}, - {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b7155eb1623347f0f22c38c9abdd738b287e39b9982e1da227503387b81b34ca"}, - {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:208beedfa807c922da4e81061dafa9c8489c6328934ca2a562efa707e049e561"}, - {file = "orjson-3.10.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eca81f83b1b8c07449e1d6ff7074e82e3fd6777e588f1a6632127f286a968825"}, - {file = "orjson-3.10.15-cp313-cp313-win32.whl", hash = "sha256:c03cd6eea1bd3b949d0d007c8d57049aa2b39bd49f58b4b2af571a5d3833d890"}, - {file = "orjson-3.10.15-cp313-cp313-win_amd64.whl", hash = "sha256:fd56a26a04f6ba5fb2045b0acc487a63162a958ed837648c5781e1fe3316cfbf"}, - {file = "orjson-3.10.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5e8afd6200e12771467a1a44e5ad780614b86abb4b11862ec54861a82d677746"}, - {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da9a18c500f19273e9e104cca8c1f0b40a6470bcccfc33afcc088045d0bf5ea6"}, - {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb00b7bfbdf5d34a13180e4805d76b4567025da19a197645ca746fc2fb536586"}, - {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33aedc3d903378e257047fee506f11e0833146ca3e57a1a1fb0ddb789876c1e1"}, - {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd0099ae6aed5eb1fc84c9eb72b95505a3df4267e6962eb93cdd5af03be71c98"}, - {file = "orjson-3.10.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c864a80a2d467d7786274fce0e4f93ef2a7ca4ff31f7fc5634225aaa4e9e98c"}, - {file = "orjson-3.10.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c25774c9e88a3e0013d7d1a6c8056926b607a61edd423b50eb5c88fd7f2823ae"}, - {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e78c211d0074e783d824ce7bb85bf459f93a233eb67a5b5003498232ddfb0e8a"}, - {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:43e17289ffdbbac8f39243916c893d2ae41a2ea1a9cbb060a56a4d75286351ae"}, - {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:781d54657063f361e89714293c095f506c533582ee40a426cb6489c48a637b81"}, - {file = "orjson-3.10.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6875210307d36c94873f553786a808af2788e362bd0cf4c8e66d976791e7b528"}, - {file = "orjson-3.10.15-cp38-cp38-win32.whl", hash = "sha256:305b38b2b8f8083cc3d618927d7f424349afce5975b316d33075ef0f73576b60"}, - {file = "orjson-3.10.15-cp38-cp38-win_amd64.whl", hash = "sha256:5dd9ef1639878cc3efffed349543cbf9372bdbd79f478615a1c633fe4e4180d1"}, - {file = "orjson-3.10.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ffe19f3e8d68111e8644d4f4e267a069ca427926855582ff01fc012496d19969"}, - {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d433bf32a363823863a96561a555227c18a522a8217a6f9400f00ddc70139ae2"}, - {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:da03392674f59a95d03fa5fb9fe3a160b0511ad84b7a3914699ea5a1b3a38da2"}, - {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a63bb41559b05360ded9132032239e47983a39b151af1201f07ec9370715c82"}, - {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3766ac4702f8f795ff3fa067968e806b4344af257011858cc3d6d8721588b53f"}, - {file = "orjson-3.10.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1c73dcc8fadbd7c55802d9aa093b36878d34a3b3222c41052ce6b0fc65f8e8"}, - {file = "orjson-3.10.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b299383825eafe642cbab34be762ccff9fd3408d72726a6b2a4506d410a71ab3"}, - {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:abc7abecdbf67a173ef1316036ebbf54ce400ef2300b4e26a7b843bd446c2480"}, - {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:3614ea508d522a621384c1d6639016a5a2e4f027f3e4a1c93a51867615d28829"}, - {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:295c70f9dc154307777ba30fe29ff15c1bcc9dfc5c48632f37d20a607e9ba85a"}, - {file = "orjson-3.10.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:63309e3ff924c62404923c80b9e2048c1f74ba4b615e7584584389ada50ed428"}, - {file = "orjson-3.10.15-cp39-cp39-win32.whl", hash = "sha256:a2f708c62d026fb5340788ba94a55c23df4e1869fec74be455e0b2f5363b8507"}, - {file = "orjson-3.10.15-cp39-cp39-win_amd64.whl", hash = "sha256:efcf6c735c3d22ef60c4aa27a5238f1a477df85e9b15f2142f9d669beb2d13fd"}, - {file = "orjson-3.10.15.tar.gz", hash = "sha256:05ca7fe452a2e9d8d9d706a2984c95b9c2ebc5db417ce0b7a49b91d50642a23e"}, -] - -[[package]] -name = "packaging" -version = "24.2" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, -] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pycparser" -version = "2.22" -description = "C parser in Python" -optional = true -python-versions = ">=3.8" -files = [ - {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, - {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, -] - -[[package]] -name = "pydantic" -version = "2.10.6" -description = "Data validation using Python type hints" -optional = true -python-versions = ">=3.8" -files = [ - {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, - {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, -] - -[package.dependencies] -annotated-types = ">=0.6.0" -pydantic-core = "2.27.2" -typing-extensions = ">=4.12.2" - -[package.extras] -email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata"] - -[[package]] -name = "pydantic-core" -version = "2.27.2" -description = "Core functionality for Pydantic validation and serialization" -optional = true -python-versions = ">=3.8" -files = [ - {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, - {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, - {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, - {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, - {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, - {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, - {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, - {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, - {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, - {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, - {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, - {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, - {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, - {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, - {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, - {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, - {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, - {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, -] - -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" - -[[package]] -name = "pyjwt" -version = "2.10.1" -description = "JSON Web Token implementation in Python" -optional = true -python-versions = ">=3.9" -files = [ - {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, - {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, -] - -[package.extras] -crypto = ["cryptography (>=3.4.0)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] -docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] - -[[package]] -name = "pytest" -version = "7.4.4" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-asyncio" -version = "0.21.2" -description = "Pytest support for asyncio" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest_asyncio-0.21.2-py3-none-any.whl", hash = "sha256:ab664c88bb7998f711d8039cacd4884da6430886ae8bbd4eded552ed2004f16b"}, - {file = "pytest_asyncio-0.21.2.tar.gz", hash = "sha256:d67738fc232b94b326b9d060750beb16e0074210b98dd8b58a5239fa2a154f45"}, -] - -[package.dependencies] -pytest = ">=7.0.0" - -[package.extras] -docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] -testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] - -[[package]] -name = "pytest-mock" -version = "3.14.0" -description = "Thin-wrapper around the mock package for easier use with pytest" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, - {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, -] - -[package.dependencies] -pytest = ">=6.2.5" - -[package.extras] -dev = ["pre-commit", "pytest-asyncio", "tox"] - -[[package]] -name = "pytest-watch" -version = "4.2.0" -description = "Local continuous test runner with pytest and watchdog." -optional = false -python-versions = "*" -files = [ - {file = "pytest-watch-4.2.0.tar.gz", hash = "sha256:06136f03d5b361718b8d0d234042f7b2f203910d8568f63df2f866b547b3d4b9"}, -] - -[package.dependencies] -colorama = ">=0.3.3" -docopt = ">=0.4.0" -pytest = ">=2.6.4" -watchdog = ">=0.6.0" - -[[package]] -name = "python-dotenv" -version = "1.0.1" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = true -python-versions = ">=3.8" -files = [ - {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, - {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "pyyaml" -version = "6.0.2" -description = "YAML parser and emitter for Python" -optional = true -python-versions = ">=3.8" -files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, - {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, - {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, - {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, - {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, - {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, - {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, - {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, - {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, - {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, - {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, - {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, -] - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = true -python-versions = ">=3.8" -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "requests-toolbelt" -version = "1.0.0" -description = "A utility belt for advanced users of python-requests" -optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, - {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, -] - -[package.dependencies] -requests = ">=2.0.1,<3.0.0" - -[[package]] -name = "ruff" -version = "0.6.9" -description = "An extremely fast Python linter and code formatter, written in Rust." -optional = false -python-versions = ">=3.7" -files = [ - {file = "ruff-0.6.9-py3-none-linux_armv6l.whl", hash = "sha256:064df58d84ccc0ac0fcd63bc3090b251d90e2a372558c0f057c3f75ed73e1ccd"}, - {file = "ruff-0.6.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:140d4b5c9f5fc7a7b074908a78ab8d384dd7f6510402267bc76c37195c02a7ec"}, - {file = "ruff-0.6.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53fd8ca5e82bdee8da7f506d7b03a261f24cd43d090ea9db9a1dc59d9313914c"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645d7d8761f915e48a00d4ecc3686969761df69fb561dd914a773c1a8266e14e"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eae02b700763e3847595b9d2891488989cac00214da7f845f4bcf2989007d577"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d5ccc9e58112441de8ad4b29dcb7a86dc25c5f770e3c06a9d57e0e5eba48829"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:417b81aa1c9b60b2f8edc463c58363075412866ae4e2b9ab0f690dc1e87ac1b5"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c866b631f5fbce896a74a6e4383407ba7507b815ccc52bcedabb6810fdb3ef7"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b118afbb3202f5911486ad52da86d1d52305b59e7ef2031cea3425142b97d6f"}, - {file = "ruff-0.6.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67267654edc23c97335586774790cde402fb6bbdb3c2314f1fc087dee320bfa"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3ef0cc774b00fec123f635ce5c547dac263f6ee9fb9cc83437c5904183b55ceb"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:12edd2af0c60fa61ff31cefb90aef4288ac4d372b4962c2864aeea3a1a2460c0"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:55bb01caeaf3a60b2b2bba07308a02fca6ab56233302406ed5245180a05c5625"}, - {file = "ruff-0.6.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:925d26471fa24b0ce5a6cdfab1bb526fb4159952385f386bdcc643813d472039"}, - {file = "ruff-0.6.9-py3-none-win32.whl", hash = "sha256:eb61ec9bdb2506cffd492e05ac40e5bc6284873aceb605503d8494180d6fc84d"}, - {file = "ruff-0.6.9-py3-none-win_amd64.whl", hash = "sha256:785d31851c1ae91f45b3d8fe23b8ae4b5170089021fbb42402d811135f0b7117"}, - {file = "ruff-0.6.9-py3-none-win_arm64.whl", hash = "sha256:a9641e31476d601f83cd602608739a0840e348bda93fec9f1ee816f8b6798b93"}, - {file = "ruff-0.6.9.tar.gz", hash = "sha256:b076ef717a8e5bc819514ee1d602bbdca5b4420ae13a9cf61a0c0a4f53a2baa2"}, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = true -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - -[[package]] -name = "sse-starlette" -version = "2.1.3" -description = "SSE plugin for Starlette" -optional = true -python-versions = ">=3.8" -files = [ - {file = "sse_starlette-2.1.3-py3-none-any.whl", hash = "sha256:8ec846438b4665b9e8c560fcdea6bc8081a3abf7942faa95e5a744999d219772"}, - {file = "sse_starlette-2.1.3.tar.gz", hash = "sha256:9cd27eb35319e1414e3d2558ee7414487f9529ce3b3cf9b21434fd110e017169"}, -] - -[package.dependencies] -anyio = "*" -starlette = "*" -uvicorn = "*" - -[package.extras] -examples = ["fastapi"] - -[[package]] -name = "starlette" -version = "0.46.0" -description = "The little ASGI library that shines." -optional = true -python-versions = ">=3.9" -files = [ - {file = "starlette-0.46.0-py3-none-any.whl", hash = "sha256:913f0798bd90ba90a9156383bcf1350a17d6259451d0d8ee27fc0cf2db609038"}, - {file = "starlette-0.46.0.tar.gz", hash = "sha256:b359e4567456b28d473d0193f34c0de0ed49710d75ef183a74a5ce0499324f50"}, -] - -[package.dependencies] -anyio = ">=3.6.2,<5" - -[package.extras] -full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] - -[[package]] -name = "structlog" -version = "23.3.0" -description = "Structured Logging for Python" -optional = true -python-versions = ">=3.8" -files = [ - {file = "structlog-23.3.0-py3-none-any.whl", hash = "sha256:d6922a88ceabef5b13b9eda9c4043624924f60edbb00397f4d193bd754cde60a"}, - {file = "structlog-23.3.0.tar.gz", hash = "sha256:24b42b914ac6bc4a4e6f716e82ac70d7fb1e8c3b1035a765591953bfc37101a5"}, -] - -[package.extras] -dev = ["structlog[tests,typing]"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-mermaid", "sphinxext-opengraph", "twisted"] -tests = ["freezegun (>=0.2.8)", "pretend", "pytest (>=6.0)", "pytest-asyncio (>=0.17)", "simplejson"] -typing = ["mypy (>=1.4)", "rich", "twisted"] - -[[package]] -name = "tenacity" -version = "9.0.0" -description = "Retry code until it succeeds" -optional = true -python-versions = ">=3.8" -files = [ - {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, - {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, -] - -[package.extras] -doc = ["reno", "sphinx"] -test = ["pytest", "tornado (>=4.5)", "typeguard"] - -[[package]] -name = "tomli" -version = "2.2.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, - {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, - {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, - {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, - {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, - {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, - {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, - {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, - {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, - {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, -] - -[[package]] -name = "typing-extensions" -version = "4.12.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - -[[package]] -name = "urllib3" -version = "2.3.0" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = true -python-versions = ">=3.9" -files = [ - {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, - {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "uvicorn" -version = "0.34.0" -description = "The lightning-fast ASGI server." -optional = true -python-versions = ">=3.9" -files = [ - {file = "uvicorn-0.34.0-py3-none-any.whl", hash = "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4"}, - {file = "uvicorn-0.34.0.tar.gz", hash = "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9"}, -] - -[package.dependencies] -click = ">=7.0" -h11 = ">=0.8" - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "watchdog" -version = "6.0.0" -description = "Filesystem events monitoring" -optional = false -python-versions = ">=3.9" -files = [ - {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, - {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, - {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"}, - {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"}, - {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"}, - {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"}, - {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"}, - {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"}, - {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"}, - {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"}, - {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"}, - {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"}, - {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"}, - {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"}, - {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"}, - {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"}, - {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"}, - {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"}, - {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"}, - {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"}, - {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"}, - {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"}, - {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"}, - {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"}, -] - -[package.extras] -watchmedo = ["PyYAML (>=3.10)"] - -[[package]] -name = "watchfiles" -version = "1.0.4" -description = "Simple, modern and high performance file watching and code reload in python." -optional = true -python-versions = ">=3.9" -files = [ - {file = "watchfiles-1.0.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ba5bb3073d9db37c64520681dd2650f8bd40902d991e7b4cfaeece3e32561d08"}, - {file = "watchfiles-1.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f25d0ba0fe2b6d2c921cf587b2bf4c451860086534f40c384329fb96e2044d1"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47eb32ef8c729dbc4f4273baece89398a4d4b5d21a1493efea77a17059f4df8a"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:076f293100db3b0b634514aa0d294b941daa85fc777f9c698adb1009e5aca0b1"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1eacd91daeb5158c598fe22d7ce66d60878b6294a86477a4715154990394c9b3"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:13c2ce7b72026cfbca120d652f02c7750f33b4c9395d79c9790b27f014c8a5a2"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:90192cdc15ab7254caa7765a98132a5a41471cf739513cc9bcf7d2ffcc0ec7b2"}, - {file = "watchfiles-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278aaa395f405972e9f523bd786ed59dfb61e4b827856be46a42130605fd0899"}, - {file = "watchfiles-1.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a462490e75e466edbb9fc4cd679b62187153b3ba804868452ef0577ec958f5ff"}, - {file = "watchfiles-1.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8d0d0630930f5cd5af929040e0778cf676a46775753e442a3f60511f2409f48f"}, - {file = "watchfiles-1.0.4-cp310-cp310-win32.whl", hash = "sha256:cc27a65069bcabac4552f34fd2dce923ce3fcde0721a16e4fb1b466d63ec831f"}, - {file = "watchfiles-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:8b1f135238e75d075359cf506b27bf3f4ca12029c47d3e769d8593a2024ce161"}, - {file = "watchfiles-1.0.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2a9f93f8439639dc244c4d2902abe35b0279102bca7bbcf119af964f51d53c19"}, - {file = "watchfiles-1.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9eea33ad8c418847dd296e61eb683cae1c63329b6d854aefcd412e12d94ee235"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31f1a379c9dcbb3f09cf6be1b7e83b67c0e9faabed0471556d9438a4a4e14202"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ab594e75644421ae0a2484554832ca5895f8cab5ab62de30a1a57db460ce06c6"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc2eb5d14a8e0d5df7b36288979176fbb39672d45184fc4b1c004d7c3ce29317"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f68d8e9d5a321163ddacebe97091000955a1b74cd43724e346056030b0bacee"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9ce064e81fe79faa925ff03b9f4c1a98b0bbb4a1b8c1b015afa93030cb21a49"}, - {file = "watchfiles-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b77d5622ac5cc91d21ae9c2b284b5d5c51085a0bdb7b518dba263d0af006132c"}, - {file = "watchfiles-1.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1941b4e39de9b38b868a69b911df5e89dc43767feeda667b40ae032522b9b5f1"}, - {file = "watchfiles-1.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f8c4998506241dedf59613082d1c18b836e26ef2a4caecad0ec41e2a15e4226"}, - {file = "watchfiles-1.0.4-cp311-cp311-win32.whl", hash = "sha256:4ebbeca9360c830766b9f0df3640b791be569d988f4be6c06d6fae41f187f105"}, - {file = "watchfiles-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:05d341c71f3d7098920f8551d4df47f7b57ac5b8dad56558064c3431bdfc0b74"}, - {file = "watchfiles-1.0.4-cp311-cp311-win_arm64.whl", hash = "sha256:32b026a6ab64245b584acf4931fe21842374da82372d5c039cba6bf99ef722f3"}, - {file = "watchfiles-1.0.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:229e6ec880eca20e0ba2f7e2249c85bae1999d330161f45c78d160832e026ee2"}, - {file = "watchfiles-1.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5717021b199e8353782dce03bd8a8f64438832b84e2885c4a645f9723bf656d9"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0799ae68dfa95136dde7c472525700bd48777875a4abb2ee454e3ab18e9fc712"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43b168bba889886b62edb0397cab5b6490ffb656ee2fcb22dec8bfeb371a9e12"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb2c46e275fbb9f0c92e7654b231543c7bbfa1df07cdc4b99fa73bedfde5c844"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:857f5fc3aa027ff5e57047da93f96e908a35fe602d24f5e5d8ce64bf1f2fc733"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55ccfd27c497b228581e2838d4386301227fc0cb47f5a12923ec2fe4f97b95af"}, - {file = "watchfiles-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c11ea22304d17d4385067588123658e9f23159225a27b983f343fcffc3e796a"}, - {file = "watchfiles-1.0.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:74cb3ca19a740be4caa18f238298b9d472c850f7b2ed89f396c00a4c97e2d9ff"}, - {file = "watchfiles-1.0.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c7cce76c138a91e720d1df54014a047e680b652336e1b73b8e3ff3158e05061e"}, - {file = "watchfiles-1.0.4-cp312-cp312-win32.whl", hash = "sha256:b045c800d55bc7e2cadd47f45a97c7b29f70f08a7c2fa13241905010a5493f94"}, - {file = "watchfiles-1.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:c2acfa49dd0ad0bf2a9c0bb9a985af02e89345a7189be1efc6baa085e0f72d7c"}, - {file = "watchfiles-1.0.4-cp312-cp312-win_arm64.whl", hash = "sha256:22bb55a7c9e564e763ea06c7acea24fc5d2ee5dfc5dafc5cfbedfe58505e9f90"}, - {file = "watchfiles-1.0.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:8012bd820c380c3d3db8435e8cf7592260257b378b649154a7948a663b5f84e9"}, - {file = "watchfiles-1.0.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa216f87594f951c17511efe5912808dfcc4befa464ab17c98d387830ce07b60"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c9953cf85529c05b24705639ffa390f78c26449e15ec34d5339e8108c7c407"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7cf684aa9bba4cd95ecb62c822a56de54e3ae0598c1a7f2065d51e24637a3c5d"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f44a39aee3cbb9b825285ff979ab887a25c5d336e5ec3574f1506a4671556a8d"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38320582736922be8c865d46520c043bff350956dfc9fbaee3b2df4e1740a4b"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39f4914548b818540ef21fd22447a63e7be6e24b43a70f7642d21f1e73371590"}, - {file = "watchfiles-1.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f12969a3765909cf5dc1e50b2436eb2c0e676a3c75773ab8cc3aa6175c16e902"}, - {file = "watchfiles-1.0.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0986902677a1a5e6212d0c49b319aad9cc48da4bd967f86a11bde96ad9676ca1"}, - {file = "watchfiles-1.0.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:308ac265c56f936636e3b0e3f59e059a40003c655228c131e1ad439957592303"}, - {file = "watchfiles-1.0.4-cp313-cp313-win32.whl", hash = "sha256:aee397456a29b492c20fda2d8961e1ffb266223625346ace14e4b6d861ba9c80"}, - {file = "watchfiles-1.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:d6097538b0ae5c1b88c3b55afa245a66793a8fec7ada6755322e465fb1a0e8cc"}, - {file = "watchfiles-1.0.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:d3452c1ec703aa1c61e15dfe9d482543e4145e7c45a6b8566978fbb044265a21"}, - {file = "watchfiles-1.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7b75fee5a16826cf5c46fe1c63116e4a156924d668c38b013e6276f2582230f0"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e997802d78cdb02623b5941830ab06f8860038faf344f0d288d325cc9c5d2ff"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0611d244ce94d83f5b9aff441ad196c6e21b55f77f3c47608dcf651efe54c4a"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9745a4210b59e218ce64c91deb599ae8775c8a9da4e95fb2ee6fe745fc87d01a"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4810ea2ae622add560f4aa50c92fef975e475f7ac4900ce5ff5547b2434642d8"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:740d103cd01458f22462dedeb5a3382b7f2c57d07ff033fbc9465919e5e1d0f3"}, - {file = "watchfiles-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbd912a61543a36aef85e34f212e5d2486e7c53ebfdb70d1e0b060cc50dd0bf"}, - {file = "watchfiles-1.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0bc80d91ddaf95f70258cf78c471246846c1986bcc5fd33ccc4a1a67fcb40f9a"}, - {file = "watchfiles-1.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ab0311bb2ffcd9f74b6c9de2dda1612c13c84b996d032cd74799adb656af4e8b"}, - {file = "watchfiles-1.0.4-cp39-cp39-win32.whl", hash = "sha256:02a526ee5b5a09e8168314c905fc545c9bc46509896ed282aeb5a8ba9bd6ca27"}, - {file = "watchfiles-1.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:a5ae5706058b27c74bac987d615105da17724172d5aaacc6c362a40599b6de43"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdcc92daeae268de1acf5b7befcd6cfffd9a047098199056c72e4623f531de18"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d8d3d9203705b5797f0af7e7e5baa17c8588030aaadb7f6a86107b7247303817"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdef5a1be32d0b07dcea3318a0be95d42c98ece24177820226b56276e06b63b0"}, - {file = "watchfiles-1.0.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:342622287b5604ddf0ed2d085f3a589099c9ae8b7331df3ae9845571586c4f3d"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9fe37a2de80aa785d340f2980276b17ef697ab8db6019b07ee4fd28a8359d2f3"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9d1ef56b56ed7e8f312c934436dea93bfa3e7368adfcf3df4c0da6d4de959a1e"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b42cac65beae3a362629950c444077d1b44f1790ea2772beaea95451c086bb"}, - {file = "watchfiles-1.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e0227b8ed9074c6172cf55d85b5670199c99ab11fd27d2c473aa30aec67ee42"}, - {file = "watchfiles-1.0.4.tar.gz", hash = "sha256:6ba473efd11062d73e4f00c2b730255f9c1bdd73cd5f9fe5b5da8dbd4a717205"}, -] - -[package.dependencies] -anyio = ">=3.0.0" - -[[package]] -name = "zstandard" -version = "0.23.0" -description = "Zstandard bindings for Python" -optional = true -python-versions = ">=3.8" -files = [ - {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"}, - {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"}, - {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc"}, - {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573"}, - {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391"}, - {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e"}, - {file = "zstandard-0.23.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0"}, - {file = "zstandard-0.23.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c"}, - {file = "zstandard-0.23.0-cp310-cp310-win32.whl", hash = "sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813"}, - {file = "zstandard-0.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4"}, - {file = "zstandard-0.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e"}, - {file = "zstandard-0.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23"}, - {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a"}, - {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db"}, - {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2"}, - {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca"}, - {file = "zstandard-0.23.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78"}, - {file = "zstandard-0.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473"}, - {file = "zstandard-0.23.0-cp311-cp311-win32.whl", hash = "sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160"}, - {file = "zstandard-0.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0"}, - {file = "zstandard-0.23.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094"}, - {file = "zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8"}, - {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1"}, - {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072"}, - {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20"}, - {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373"}, - {file = "zstandard-0.23.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90"}, - {file = "zstandard-0.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35"}, - {file = "zstandard-0.23.0-cp312-cp312-win32.whl", hash = "sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d"}, - {file = "zstandard-0.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b"}, - {file = "zstandard-0.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9"}, - {file = "zstandard-0.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a"}, - {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2"}, - {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5"}, - {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f"}, - {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed"}, - {file = "zstandard-0.23.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057"}, - {file = "zstandard-0.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33"}, - {file = "zstandard-0.23.0-cp313-cp313-win32.whl", hash = "sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd"}, - {file = "zstandard-0.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b"}, - {file = "zstandard-0.23.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2ef3775758346d9ac6214123887d25c7061c92afe1f2b354f9388e9e4d48acfc"}, - {file = "zstandard-0.23.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4051e406288b8cdbb993798b9a45c59a4896b6ecee2f875424ec10276a895740"}, - {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2d1a054f8f0a191004675755448d12be47fa9bebbcffa3cdf01db19f2d30a54"}, - {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f83fa6cae3fff8e98691248c9320356971b59678a17f20656a9e59cd32cee6d8"}, - {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32ba3b5ccde2d581b1e6aa952c836a6291e8435d788f656fe5976445865ae045"}, - {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f146f50723defec2975fb7e388ae3a024eb7151542d1599527ec2aa9cacb152"}, - {file = "zstandard-0.23.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bfe8de1da6d104f15a60d4a8a768288f66aa953bbe00d027398b93fb9680b26"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:29a2bc7c1b09b0af938b7a8343174b987ae021705acabcbae560166567f5a8db"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:61f89436cbfede4bc4e91b4397eaa3e2108ebe96d05e93d6ccc95ab5714be512"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:53ea7cdc96c6eb56e76bb06894bcfb5dfa93b7adcf59d61c6b92674e24e2dd5e"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:a4ae99c57668ca1e78597d8b06d5af837f377f340f4cce993b551b2d7731778d"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:379b378ae694ba78cef921581ebd420c938936a153ded602c4fea612b7eaa90d"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:50a80baba0285386f97ea36239855f6020ce452456605f262b2d33ac35c7770b"}, - {file = "zstandard-0.23.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:61062387ad820c654b6a6b5f0b94484fa19515e0c5116faf29f41a6bc91ded6e"}, - {file = "zstandard-0.23.0-cp38-cp38-win32.whl", hash = "sha256:b8c0bd73aeac689beacd4e7667d48c299f61b959475cdbb91e7d3d88d27c56b9"}, - {file = "zstandard-0.23.0-cp38-cp38-win_amd64.whl", hash = "sha256:a05e6d6218461eb1b4771d973728f0133b2a4613a6779995df557f70794fd60f"}, - {file = "zstandard-0.23.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa014d55c3af933c1315eb4bb06dd0459661cc0b15cd61077afa6489bec63bb"}, - {file = "zstandard-0.23.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7f0804bb3799414af278e9ad51be25edf67f78f916e08afdb983e74161b916"}, - {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb2b1ecfef1e67897d336de3a0e3f52478182d6a47eda86cbd42504c5cbd009a"}, - {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:837bb6764be6919963ef41235fd56a6486b132ea64afe5fafb4cb279ac44f259"}, - {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1516c8c37d3a053b01c1c15b182f3b5f5eef19ced9b930b684a73bad121addf4"}, - {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ef6a43b1846f6025dde6ed9fee0c24e1149c1c25f7fb0a0585572b2f3adc58"}, - {file = "zstandard-0.23.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11e3bf3c924853a2d5835b24f03eeba7fc9b07d8ca499e247e06ff5676461a15"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2fb4535137de7e244c230e24f9d1ec194f61721c86ebea04e1581d9d06ea1269"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8c24f21fa2af4bb9f2c492a86fe0c34e6d2c63812a839590edaf177b7398f700"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a8c86881813a78a6f4508ef9daf9d4995b8ac2d147dcb1a450448941398091c9"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fe3b385d996ee0822fd46528d9f0443b880d4d05528fd26a9119a54ec3f91c69"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:82d17e94d735c99621bf8ebf9995f870a6b3e6d14543b99e201ae046dfe7de70"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c7c517d74bea1a6afd39aa612fa025e6b8011982a0897768a2f7c8ab4ebb78a2"}, - {file = "zstandard-0.23.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fd7e0f1cfb70eb2f95a19b472ee7ad6d9a0a992ec0ae53286870c104ca939e5"}, - {file = "zstandard-0.23.0-cp39-cp39-win32.whl", hash = "sha256:43da0f0092281bf501f9c5f6f3b4c975a8a0ea82de49ba3f7100e64d422a1274"}, - {file = "zstandard-0.23.0-cp39-cp39-win_amd64.whl", hash = "sha256:f8346bfa098532bc1fb6c7ef06783e969d87a99dd1d2a5a18a892c1d7a643c58"}, - {file = "zstandard-0.23.0.tar.gz", hash = "sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09"}, -] - -[package.dependencies] -cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\""} - -[package.extras] -cffi = ["cffi (>=1.11)"] - -[extras] -inmem = ["langgraph-api", "python-dotenv"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.9.0,<4.0" -content-hash = "04a0b0e203ae00f30cca7e454c632be0b41cbb4820d0c05315a346d514b5f98e" diff --git a/libs/cli/pyproject.toml b/libs/cli/pyproject.toml deleted file mode 100644 index 0c9910cb9..000000000 --- a/libs/cli/pyproject.toml +++ /dev/null @@ -1,60 +0,0 @@ -[tool.poetry] -name = "langgraph-cli" -version = "0.1.74" -description = "CLI for interacting with LangGraph API" -authors = [] -license = "MIT" -readme = "README.md" -repository = "https://www.github.com/langchain-ai/langgraph" -packages = [{ include = "langgraph_cli" }] - -[tool.poetry.scripts] -langgraph = "langgraph_cli.cli:cli" - -[tool.poetry.dependencies] -python = "^3.9.0,<4.0" -click = "^8.1.7" -langgraph-api = { version = ">=0.0.27,<0.1.0", optional = true, python = ">=3.11,<4.0" } -python-dotenv = { version = ">=0.8.0", optional = true } - -[tool.poetry.group.dev.dependencies] -ruff = "^0.6.2" -codespell = "^2.2.0" -pytest = "^7.2.1" -pytest-asyncio = "^0.21.1" -pytest-mock = "^3.11.1" -pytest-watch = "^4.2.0" -mypy = "^1.10.0" - -[tool.poetry.extras] -inmem = ["langgraph-api", "python-dotenv"] - -[tool.pytest.ini_options] -# --strict-markers will raise errors on unknown marks. -# https://docs.pytest.org/en/7.1.x/how-to/mark.html#raising-errors-on-unknown-marks -# -# https://docs.pytest.org/en/7.1.x/reference/reference.html -# --strict-config any warnings encountered while parsing the `pytest` -# section of the configuration file raise errors. -addopts = "--strict-markers --strict-config --durations=5 -vv" -asyncio_mode = "auto" - - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" - -[tool.ruff] -lint.select = [ - # pycodestyle - "E", - # Pyflakes - "F", - # pyupgrade - "UP", - # flake8-bugbear - "B", - # isort - "I", -] -lint.ignore = ["E501", "B008"] diff --git a/libs/cli/tests/__init__.py b/libs/cli/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/tests/integration_tests/__init__.py b/libs/cli/tests/integration_tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/tests/integration_tests/test_cli.py b/libs/cli/tests/integration_tests/test_cli.py deleted file mode 100644 index 7cb41b47b..000000000 --- a/libs/cli/tests/integration_tests/test_cli.py +++ /dev/null @@ -1,13 +0,0 @@ -import pytest -import requests - -from langgraph_cli.templates import TEMPLATE_ID_TO_CONFIG - - -@pytest.mark.parametrize("template_key", TEMPLATE_ID_TO_CONFIG.keys()) -def test_template_urls_work(template_key: str) -> None: - """Integration test to verify that all template URLs are reachable.""" - _, _, template_url = TEMPLATE_ID_TO_CONFIG[template_key] - response = requests.head(template_url) - # Returns 302 on a successful HEAD request - assert response.status_code == 302, f"URL {template_url} is not reachable." diff --git a/libs/cli/tests/unit_tests/__init__.py b/libs/cli/tests/unit_tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/tests/unit_tests/agent.py b/libs/cli/tests/unit_tests/agent.py deleted file mode 100644 index e6c27c1f8..000000000 --- a/libs/cli/tests/unit_tests/agent.py +++ /dev/null @@ -1,81 +0,0 @@ -import asyncio -import os -from typing import Annotated, Sequence, TypedDict - -from langchain_core.language_models.fake_chat_models import FakeListChatModel -from langchain_core.messages import BaseMessage, HumanMessage, ToolMessage -from langgraph.graph import END, StateGraph, add_messages - -# check that env var is present -os.environ["SOME_ENV_VAR"] - - -class AgentState(TypedDict): - some_bytes: bytes - some_byte_array: bytearray - dict_with_bytes: dict[str, bytes] - messages: Annotated[Sequence[BaseMessage], add_messages] - sleep: int - - -async def call_model(state, config): - if sleep := state.get("sleep"): - await asyncio.sleep(sleep) - - messages = state["messages"] - - if len(messages) > 1: - assert state["some_bytes"] == b"some_bytes" - assert state["some_byte_array"] == bytearray(b"some_byte_array") - assert state["dict_with_bytes"] == {"more_bytes": b"more_bytes"} - - # hacky way to reset model to the "first" response - if isinstance(messages[-1], HumanMessage): - model.i = 0 - - response = await model.ainvoke(messages) - return { - "messages": [response], - "some_bytes": b"some_bytes", - "some_byte_array": bytearray(b"some_byte_array"), - "dict_with_bytes": {"more_bytes": b"more_bytes"}, - } - - -def call_tool(state): - last_message_content = state["messages"][-1].content - return { - "messages": [ - ToolMessage( - f"tool_call__{last_message_content}", tool_call_id="tool_call_id" - ) - ] - } - - -def should_continue(state): - messages = state["messages"] - last_message = messages[-1] - if last_message.content == "end": - return END - else: - return "tool" - - -# NOTE: the model cycles through responses infinitely here -model = FakeListChatModel(responses=["begin", "end"]) -workflow = StateGraph(AgentState) - -workflow.add_node("agent", call_model) -workflow.add_node("tool", call_tool) - -workflow.set_entry_point("agent") - -workflow.add_conditional_edges( - "agent", - should_continue, -) - -workflow.add_edge("tool", "agent") - -graph = workflow.compile() diff --git a/libs/cli/tests/unit_tests/cli/__init__.py b/libs/cli/tests/unit_tests/cli/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/tests/unit_tests/cli/langgraph.json b/libs/cli/tests/unit_tests/cli/langgraph.json deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/tests/unit_tests/cli/pyproject.toml b/libs/cli/tests/unit_tests/cli/pyproject.toml deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/tests/unit_tests/cli/test_cli.py b/libs/cli/tests/unit_tests/cli/test_cli.py deleted file mode 100644 index ecce0af92..000000000 --- a/libs/cli/tests/unit_tests/cli/test_cli.py +++ /dev/null @@ -1,259 +0,0 @@ -import json -import pathlib -import shutil -import tempfile -from contextlib import contextmanager -from pathlib import Path - -from click.testing import CliRunner - -from langgraph_cli.cli import cli, prepare_args_and_stdin -from langgraph_cli.config import Config, validate_config -from langgraph_cli.docker import DEFAULT_POSTGRES_URI, DockerCapabilities, Version -from langgraph_cli.util import clean_empty_lines - -DEFAULT_DOCKER_CAPABILITIES = DockerCapabilities( - version_docker=Version(26, 1, 1), - version_compose=Version(2, 27, 0), - healthcheck_start_interval=True, -) - - -@contextmanager -def temporary_config_folder(config_content: dict): - # Create a temporary directory - temp_dir = tempfile.mkdtemp() - try: - # Define the path for the config.json file - config_path = Path(temp_dir) / "config.json" - - # Write the provided dictionary content to config.json - with open(config_path, "w", encoding="utf-8") as config_file: - json.dump(config_content, config_file) - - # Yield the temporary directory path for use within the context - yield config_path.parent - finally: - # Cleanup the temporary directory and its contents - shutil.rmtree(temp_dir) - - -def test_prepare_args_and_stdin() -> None: - # this basically serves as an end-to-end test for using config and docker helpers - config_path = pathlib.Path(__file__).parent / "langgraph.json" - config = validate_config( - Config(dependencies=[".", "../../.."], graphs={"agent": "agent.py:graph"}) - ) - port = 8000 - debugger_port = 8001 - debugger_graph_url = f"http://127.0.0.1:{port}" - - actual_args, actual_stdin = prepare_args_and_stdin( - capabilities=DEFAULT_DOCKER_CAPABILITIES, - config_path=config_path, - config=config, - docker_compose=pathlib.Path("custom-docker-compose.yml"), - port=port, - debugger_port=debugger_port, - debugger_base_url=debugger_graph_url, - watch=True, - ) - - expected_args = [ - "--project-directory", - str(pathlib.Path(__file__).parent.absolute()), - "-f", - "custom-docker-compose.yml", - "-f", - "-", - ] - expected_stdin = f"""volumes: - langgraph-data: - driver: local -services: - langgraph-redis: - image: redis:6 - healthcheck: - test: redis-cli ping - interval: 5s - timeout: 1s - retries: 5 - langgraph-postgres: - image: pgvector/pgvector:pg16 - ports: - - "5433:5432" - environment: - POSTGRES_DB: postgres - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - command: - - postgres - - -c - - shared_preload_libraries=vector - volumes: - - langgraph-data:/var/lib/postgresql/data - healthcheck: - test: pg_isready -U postgres - start_period: 10s - timeout: 1s - retries: 5 - interval: 60s - start_interval: 1s - langgraph-debugger: - image: langchain/langgraph-debugger - restart: on-failure - depends_on: - langgraph-postgres: - condition: service_healthy - ports: - - "{debugger_port}:3968" - environment: - VITE_STUDIO_LOCAL_GRAPH_URL: {debugger_graph_url} - langgraph-api: - ports: - - "8000:8000" - depends_on: - langgraph-redis: - condition: service_healthy - langgraph-postgres: - condition: service_healthy - environment: - REDIS_URI: redis://langgraph-redis:6379 - POSTGRES_URI: {DEFAULT_POSTGRES_URI} - healthcheck: - test: python /api/healthcheck.py - interval: 60s - start_interval: 1s - start_period: 10s - - pull_policy: build - build: - context: . - additional_contexts: - - cli_1: {str(pathlib.Path(__file__).parent.parent.parent.parent.absolute())} - dockerfile_inline: | - FROM langchain/langgraph-api:3.11 - # -- Adding local package . -- - ADD . /deps/cli - # -- End of local package . -- - # -- Adding local package ../../.. -- - COPY --from=cli_1 . /deps/cli_1 - # -- End of local package ../../.. -- - # -- Installing all local dependencies -- - RUN PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* - # -- End of local dependencies install -- - ENV LANGSERVE_GRAPHS='{{"agent": "agent.py:graph"}}' - WORKDIR /deps/cli - - develop: - watch: - - path: langgraph.json - action: rebuild - - path: . - action: rebuild - - path: ../../.. - action: rebuild\ -""" - assert actual_args == expected_args - assert clean_empty_lines(actual_stdin) == expected_stdin - - -def test_version_option() -> None: - """Test the --version option of the CLI.""" - runner = CliRunner() - result = runner.invoke(cli, ["--version"]) - - # Verify that the command executed successfully - assert result.exit_code == 0, "Expected exit code 0 for --version option" - - # Check that the output contains the correct version information - assert ( - "LangGraph CLI, version" in result.output - ), "Expected version information in output" - - -def test_dockerfile_command_basic() -> None: - """Test the 'dockerfile' command with basic configuration.""" - runner = CliRunner() - config_content = { - "node_version": "20", # Add any other necessary configuration fields - "graphs": {"agent": "agent.py:graph"}, - } - - with temporary_config_folder(config_content) as temp_dir: - save_path = temp_dir / "Dockerfile" - - result = runner.invoke( - cli, - ["dockerfile", str(save_path), "--config", str(temp_dir / "config.json")], - ) - - # Assert command was successful - assert result.exit_code == 0, result.output - assert "✅ Created: Dockerfile" in result.output - - # Check if Dockerfile was created - assert save_path.exists() - - -def test_dockerfile_command_with_docker_compose() -> None: - """Test the 'dockerfile' command with Docker Compose configuration.""" - runner = CliRunner() - config_content = { - "dependencies": ["./my_agent"], - "graphs": {"agent": "./my_agent/agent.py:graph"}, - "env": ".env", - } - with temporary_config_folder(config_content) as temp_dir: - save_path = temp_dir / "Dockerfile" - # Add agent.py file - agent_path = temp_dir / "my_agent" / "agent.py" - agent_path.parent.mkdir(parents=True, exist_ok=True) - agent_path.touch() - - result = runner.invoke( - cli, - [ - "dockerfile", - str(save_path), - "--config", - str(temp_dir / "config.json"), - "--add-docker-compose", - ], - ) - - # Assert command was successful - assert result.exit_code == 0 - assert "✅ Created: Dockerfile" in result.output - assert "✅ Created: .dockerignore" in result.output - assert "✅ Created: docker-compose.yml" in result.output - assert ( - "✅ Created: .env" in result.output or "➖ Skipped: .env" in result.output - ) - assert "🎉 Files generated successfully" in result.output - - # Check if Dockerfile, .dockerignore, docker-compose.yml, and .env were created - assert save_path.exists() - assert (temp_dir / ".dockerignore").exists() - assert (temp_dir / "docker-compose.yml").exists() - assert (temp_dir / ".env").exists() or "➖ Skipped: .env" in result.output - - -def test_dockerfile_command_with_bad_config() -> None: - """Test the 'dockerfile' command with basic configuration.""" - runner = CliRunner() - config_content = { - "node_version": "20" # Add any other necessary configuration fields - } - - with temporary_config_folder(config_content) as temp_dir: - save_path = temp_dir / "Dockerfile" - - result = runner.invoke( - cli, - ["dockerfile", str(save_path), "--config", str(temp_dir / "conf.json")], - ) - - # Assert command was successful - assert result.exit_code == 2 - assert "conf.json' does not exist" in result.output diff --git a/libs/cli/tests/unit_tests/cli/test_templates.py b/libs/cli/tests/unit_tests/cli/test_templates.py deleted file mode 100644 index acd7651d0..000000000 --- a/libs/cli/tests/unit_tests/cli/test_templates.py +++ /dev/null @@ -1,70 +0,0 @@ -"""Unit tests for the 'new' CLI command. - -This command creates a new LangGraph project using a specified template. -""" - -import os -from io import BytesIO -from pathlib import Path -from tempfile import TemporaryDirectory -from unittest.mock import MagicMock, patch -from urllib import request -from zipfile import ZipFile - -from click.testing import CliRunner - -from langgraph_cli.cli import cli -from langgraph_cli.templates import TEMPLATE_ID_TO_CONFIG - - -@patch.object(request, "urlopen") -def test_create_new_with_mocked_download(mock_urlopen: MagicMock) -> None: - """Test the 'new' CLI command with a mocked download response using urllib.""" - # Mock the response content to simulate a ZIP file - mock_zip_content = BytesIO() - with ZipFile(mock_zip_content, "w") as mock_zip: - mock_zip.writestr("test-file.txt", "Test content.") - - # Create a mock response that behaves like a context manager - mock_response = MagicMock() - mock_response.read.return_value = mock_zip_content.getvalue() - mock_response.__enter__.return_value = mock_response # Setup enter context - mock_response.status = 200 - - mock_urlopen.return_value = mock_response - - with TemporaryDirectory() as temp_dir: - runner = CliRunner() - template = next( - iter(TEMPLATE_ID_TO_CONFIG) - ) # Select the first template for the test - result = runner.invoke(cli, ["new", temp_dir, "--template", template]) - - # Verify CLI command execution and success - assert result.exit_code == 0, result.output - assert ( - "New project created" in result.output - ), "Expected success message in output." - - # Verify that the directory is not empty - assert os.listdir(temp_dir), "Expected files to be created in temp directory." - - # Check for a known file in the extracted content - extracted_files = [f.name for f in Path(temp_dir).glob("*")] - assert ( - "test-file.txt" in extracted_files - ), "Expected 'test-file.txt' in the extracted content." - - -def test_invalid_template_id() -> None: - """Test that an invalid template ID passed via CLI results in a graceful error.""" - runner = CliRunner() - result = runner.invoke( - cli, ["new", "dummy_path", "--template", "invalid-template-id"] - ) - - # Verify the command failed and proper message is displayed - assert result.exit_code != 0, "Expected non-zero exit code for invalid template." - assert ( - "Template 'invalid-template-id' not found" in result.output - ), "Expected error message in output." diff --git a/libs/cli/tests/unit_tests/conftest.py b/libs/cli/tests/unit_tests/conftest.py deleted file mode 100644 index 5caaa6c81..000000000 --- a/libs/cli/tests/unit_tests/conftest.py +++ /dev/null @@ -1,16 +0,0 @@ -import os -from unittest.mock import patch - -import pytest - - -@pytest.fixture(autouse=True) -def disable_analytics_env() -> None: - """Disable analytics for unit tests LANGGRAPH_CLI_NO_ANALYTICS.""" - # First check if the environment variable is already set, if so, log a warning prior - # to overriding it. - if "LANGGRAPH_CLI_NO_ANALYTICS" in os.environ: - print("⚠️ LANGGRAPH_CLI_NO_ANALYTICS is set. Overriding it for the test.") - - with patch.dict(os.environ, {"LANGGRAPH_CLI_NO_ANALYTICS": "0"}): - yield diff --git a/libs/cli/tests/unit_tests/graphs/agent.py b/libs/cli/tests/unit_tests/graphs/agent.py deleted file mode 100644 index 700ba9fcb..000000000 --- a/libs/cli/tests/unit_tests/graphs/agent.py +++ /dev/null @@ -1,6 +0,0 @@ -from langgraph.func import entrypoint - - -@entrypoint() -def graph(state): - return None diff --git a/libs/cli/tests/unit_tests/helpers.py b/libs/cli/tests/unit_tests/helpers.py deleted file mode 100644 index 79b67a2c9..000000000 --- a/libs/cli/tests/unit_tests/helpers.py +++ /dev/null @@ -1,2 +0,0 @@ -def clean_empty_lines(input_str: str): - return "\n".join(filter(None, input_str.splitlines())) diff --git a/libs/cli/tests/unit_tests/pipconfig.txt b/libs/cli/tests/unit_tests/pipconfig.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/libs/cli/tests/unit_tests/test_config.json b/libs/cli/tests/unit_tests/test_config.json deleted file mode 100644 index 3ec8f0908..000000000 --- a/libs/cli/tests/unit_tests/test_config.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "python_version": "3.12", - "pip_config_file": "pipconfig.txt", - "dockerfile_lines": [ - "ARG meow=woof" - ], - "dependencies": [ - "langchain_openai", - "starlette", - "." - ], - "graphs": { - "agent": "graphs/agent.py:graph" - }, - "env": ".env", - "http": { - "app": "../../examples/my_app.py:app" - } -} diff --git a/libs/cli/tests/unit_tests/test_config.py b/libs/cli/tests/unit_tests/test_config.py deleted file mode 100644 index 95e20033e..000000000 --- a/libs/cli/tests/unit_tests/test_config.py +++ /dev/null @@ -1,679 +0,0 @@ -import json -import os -import pathlib -import tempfile - -import click -import pytest - -from langgraph_cli.config import ( - config_to_compose, - config_to_docker, - validate_config, - validate_config_file, -) -from langgraph_cli.util import clean_empty_lines - -PATH_TO_CONFIG = pathlib.Path(__file__).parent / "test_config.json" - - -def test_validate_config(): - # minimal config - expected_config = { - "dependencies": ["."], - "graphs": { - "agent": "./agent.py:graph", - }, - } - expected_config = { - "python_version": "3.11", - "pip_config_file": None, - "dockerfile_lines": [], - "env": {}, - "store": None, - "auth": None, - "http": None, - **expected_config, - } - actual_config = validate_config(expected_config) - assert actual_config == expected_config - - # full config - env = ".env" - expected_config = { - "python_version": "3.12", - "pip_config_file": "pipconfig.txt", - "dockerfile_lines": ["ARG meow"], - "dependencies": [".", "langchain"], - "graphs": { - "agent": "./agent.py:graph", - }, - "env": env, - "store": None, - "auth": None, - "http": None, - } - actual_config = validate_config(expected_config) - assert actual_config == expected_config - expected_config["python_version"] = "3.13" - actual_config = validate_config(expected_config) - assert actual_config == expected_config - - # check wrong python version raises - with pytest.raises(click.UsageError): - validate_config( - { - "python_version": "3.9", - } - ) - - # check missing dependencies key raises - with pytest.raises(click.UsageError): - validate_config( - {"python_version": "3.9", "graphs": {"agent": "./agent.py:graph"}}, - ) - - # check missing graphs key raises - with pytest.raises(click.UsageError): - validate_config({"python_version": "3.9", "dependencies": ["."]}) - - with pytest.raises(click.UsageError) as exc_info: - validate_config({"python_version": "3.11.0"}) - assert "Invalid Python version format" in str(exc_info.value) - - with pytest.raises(click.UsageError) as exc_info: - validate_config({"python_version": "3"}) - assert "Invalid Python version format" in str(exc_info.value) - - with pytest.raises(click.UsageError) as exc_info: - validate_config({"python_version": "abc.def"}) - assert "Invalid Python version format" in str(exc_info.value) - - with pytest.raises(click.UsageError) as exc_info: - validate_config({"python_version": "3.10"}) - assert "Minimum required version" in str(exc_info.value) - - config = validate_config( - { - "python_version": "3.11-bullseye", - "dependencies": ["."], - "graphs": {"agent": "./agent.py:graph"}, - } - ) - assert config["python_version"] == "3.11-bullseye" - - config = validate_config( - { - "python_version": "3.12-slim", - "dependencies": ["."], - "graphs": {"agent": "./agent.py:graph"}, - } - ) - assert config["python_version"] == "3.12-slim" - with pytest.raises( - ValueError, - match="Invalid http.app format", - ): - validate_config( - { - "python_version": "3.12", - "dependencies": ["."], - "graphs": {"agent": "./agent.py:graph"}, - "http": {"app": "../../examples/my_app.py"}, - } - ) - - -def test_validate_config_file(): - with tempfile.TemporaryDirectory() as tmpdir: - tmpdir_path = pathlib.Path(tmpdir) - - config_path = tmpdir_path / "langgraph.json" - - node_config = {"node_version": "20", "graphs": {"agent": "./agent.js:graph"}} - with open(config_path, "w") as f: - json.dump(node_config, f) - - validate_config_file(config_path) - - package_json = {"name": "test", "engines": {"node": "20"}} - with open(tmpdir_path / "package.json", "w") as f: - json.dump(package_json, f) - validate_config_file(config_path) - - package_json["engines"]["node"] = "20.18" - with open(tmpdir_path / "package.json", "w") as f: - json.dump(package_json, f) - with pytest.raises(click.UsageError, match="Use major version only"): - validate_config_file(config_path) - - package_json["engines"] = {"node": "18"} - with open(tmpdir_path / "package.json", "w") as f: - json.dump(package_json, f) - with pytest.raises(click.UsageError, match="must be >= 20"): - validate_config_file(config_path) - - package_json["engines"] = {"node": "20", "deno": "1.0"} - with open(tmpdir_path / "package.json", "w") as f: - json.dump(package_json, f) - with pytest.raises(click.UsageError, match="Only 'node' engine is supported"): - validate_config_file(config_path) - - with open(tmpdir_path / "package.json", "w") as f: - f.write("{invalid json") - with pytest.raises(click.UsageError, match="Invalid package.json"): - validate_config_file(config_path) - - python_config = { - "python_version": "3.11", - "dependencies": ["."], - "graphs": {"agent": "./agent.py:graph"}, - } - with open(config_path, "w") as f: - json.dump(python_config, f) - - validate_config_file(config_path) - - for package_content in [ - {"name": "test"}, - {"engines": {"node": "18"}}, - {"engines": {"node": "20", "deno": "1.0"}}, - "{invalid json", - ]: - with open(tmpdir_path / "package.json", "w") as f: - if isinstance(package_content, dict): - json.dump(package_content, f) - else: - f.write(package_content) - validate_config_file(config_path) - - -# config_to_docker -def test_config_to_docker_simple(): - graphs = {"agent": "./agent.py:graph"} - actual_docker_stdin, additional_contexts = config_to_docker( - PATH_TO_CONFIG, - validate_config( - { - "dependencies": [".", "../../examples/graphs_reqs_a", "../../examples"], - "graphs": graphs, - "http": {"app": "../../examples/my_app.py:app"}, - } - ), - "langchain/langgraph-api", - ) - expected_docker_stdin = """\ -FROM langchain/langgraph-api:3.11 -# -- Installing local requirements -- -COPY --from=__outer_requirements.txt requirements.txt /deps/__outer_graphs_reqs_a/graphs_reqs_a/requirements.txt -RUN PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -r /deps/__outer_graphs_reqs_a/graphs_reqs_a/requirements.txt -# -- End of local requirements install -- -# -- Adding local package ../../examples -- -COPY --from=examples . /deps/examples -# -- End of local package ../../examples -- -# -- Adding non-package dependency unit_tests -- -ADD . /deps/__outer_unit_tests/unit_tests -RUN set -ex && \\ - for line in '[project]' \\ - 'name = "unit_tests"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_unit_tests/pyproject.toml; \\ - done -# -- End of non-package dependency unit_tests -- -# -- Adding non-package dependency graphs_reqs_a -- -COPY --from=__outer_graphs_reqs_a . /deps/__outer_graphs_reqs_a/graphs_reqs_a -RUN set -ex && \\ - for line in '[project]' \\ - 'name = "graphs_reqs_a"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_graphs_reqs_a/pyproject.toml; \\ - done -# -- End of non-package dependency graphs_reqs_a -- -# -- Installing all local dependencies -- -RUN PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* -# -- End of local dependencies install -- -ENV LANGGRAPH_HTTP='{"app": "/deps/examples/my_app.py:app"}' -ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_unit_tests/unit_tests/agent.py:graph"}' -WORKDIR /deps/__outer_unit_tests/unit_tests\ -""" - assert clean_empty_lines(actual_docker_stdin) == expected_docker_stdin - - assert additional_contexts == { - "__outer_graphs_reqs_a": str( - (pathlib.Path(__file__).parent / "../../examples/graphs_reqs_a").resolve() - ), - "examples": str((pathlib.Path(__file__).parent / "../../examples").resolve()), - } - - -def test_config_to_docker_outside_path(): - graphs = {"agent": "./agent.py:graph"} - actual_docker_stdin, additional_contexts = config_to_docker( - PATH_TO_CONFIG, - validate_config({"dependencies": [".", ".."], "graphs": graphs}), - "langchain/langgraph-api", - ) - expected_docker_stdin = """\ -FROM langchain/langgraph-api:3.11 -# -- Adding non-package dependency unit_tests -- -ADD . /deps/__outer_unit_tests/unit_tests -RUN set -ex && \\ - for line in '[project]' \\ - 'name = "unit_tests"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_unit_tests/pyproject.toml; \\ - done -# -- End of non-package dependency unit_tests -- -# -- Adding non-package dependency tests -- -COPY --from=__outer_tests . /deps/__outer_tests/tests -RUN set -ex && \\ - for line in '[project]' \\ - 'name = "tests"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_tests/pyproject.toml; \\ - done -# -- End of non-package dependency tests -- -# -- Installing all local dependencies -- -RUN PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* -# -- End of local dependencies install -- -ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_unit_tests/unit_tests/agent.py:graph"}' -WORKDIR /deps/__outer_unit_tests/unit_tests\ -""" - assert clean_empty_lines(actual_docker_stdin) == expected_docker_stdin - assert additional_contexts == { - "__outer_tests": str(pathlib.Path(__file__).parent.parent.absolute()), - } - - -def test_config_to_docker_pipconfig(): - graphs = {"agent": "./agent.py:graph"} - actual_docker_stdin, additional_contexts = config_to_docker( - PATH_TO_CONFIG, - validate_config( - { - "dependencies": ["."], - "graphs": graphs, - "pip_config_file": "pipconfig.txt", - } - ), - "langchain/langgraph-api", - ) - expected_docker_stdin = """\ -FROM langchain/langgraph-api:3.11 -ADD pipconfig.txt /pipconfig.txt -# -- Adding non-package dependency unit_tests -- -ADD . /deps/__outer_unit_tests/unit_tests -RUN set -ex && \\ - for line in '[project]' \\ - 'name = "unit_tests"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_unit_tests/pyproject.toml; \\ - done -# -- End of non-package dependency unit_tests -- -# -- Installing all local dependencies -- -RUN PIP_CONFIG_FILE=/pipconfig.txt PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* -# -- End of local dependencies install -- -ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_unit_tests/unit_tests/agent.py:graph"}' -WORKDIR /deps/__outer_unit_tests/unit_tests\ -""" - assert clean_empty_lines(actual_docker_stdin) == expected_docker_stdin - assert additional_contexts == {} - - -def test_config_to_docker_invalid_inputs(): - # test missing local dependencies - with pytest.raises(FileNotFoundError): - graphs = {"agent": "tests/unit_tests/agent.py:graph"} - config_to_docker( - PATH_TO_CONFIG, - validate_config({"dependencies": ["./missing"], "graphs": graphs}), - "langchain/langgraph-api", - ) - - # test missing local module - with pytest.raises(FileNotFoundError): - graphs = {"agent": "./missing_agent.py:graph"} - config_to_docker( - PATH_TO_CONFIG, - validate_config({"dependencies": ["."], "graphs": graphs}), - "langchain/langgraph-api", - ) - - -def test_config_to_docker_local_deps(): - graphs = {"agent": "./graphs/agent.py:graph"} - actual_docker_stdin, additional_contexts = config_to_docker( - PATH_TO_CONFIG, - validate_config( - { - "dependencies": ["./graphs"], - "graphs": graphs, - } - ), - "langchain/langgraph-api-custom", - ) - expected_docker_stdin = """\ -FROM langchain/langgraph-api-custom:3.11 -# -- Adding non-package dependency graphs -- -ADD ./graphs /deps/__outer_graphs/src -RUN set -ex && \\ - for line in '[project]' \\ - 'name = "graphs"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_graphs/pyproject.toml; \\ - done -# -- End of non-package dependency graphs -- -# -- Installing all local dependencies -- -RUN PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* -# -- End of local dependencies install -- -ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_graphs/src/agent.py:graph"}'\ -""" - assert clean_empty_lines(actual_docker_stdin) == expected_docker_stdin - assert additional_contexts == {} - - -def test_config_to_docker_pyproject(): - pyproject_str = """[project] -name = "custom" -version = "0.1" -dependencies = ["langchain"]""" - pyproject_path = "tests/unit_tests/pyproject.toml" - with open(pyproject_path, "w") as f: - f.write(pyproject_str) - - graphs = {"agent": "./graphs/agent.py:graph"} - actual_docker_stdin, additional_contexts = config_to_docker( - PATH_TO_CONFIG, - validate_config( - { - "dependencies": ["."], - "graphs": graphs, - } - ), - "langchain/langgraph-api", - ) - os.remove(pyproject_path) - expected_docker_stdin = """FROM langchain/langgraph-api:3.11 -# -- Adding local package . -- -ADD . /deps/unit_tests -# -- End of local package . -- -# -- Installing all local dependencies -- -RUN PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* -# -- End of local dependencies install -- -ENV LANGSERVE_GRAPHS='{"agent": "/deps/unit_tests/graphs/agent.py:graph"}' -WORKDIR /deps/unit_tests""" - assert clean_empty_lines(actual_docker_stdin) == expected_docker_stdin - assert additional_contexts == {} - - -def test_config_to_docker_end_to_end(): - graphs = {"agent": "./graphs/agent.py:graph"} - actual_docker_stdin, additional_contexts = config_to_docker( - PATH_TO_CONFIG, - validate_config( - { - "python_version": "3.12", - "dependencies": ["./graphs/", "langchain", "langchain_openai"], - "graphs": graphs, - "pip_config_file": "pipconfig.txt", - "dockerfile_lines": ["ARG meow", "ARG foo"], - } - ), - "langchain/langgraph-api", - ) - expected_docker_stdin = """FROM langchain/langgraph-api:3.12 -ARG meow -ARG foo -ADD pipconfig.txt /pipconfig.txt -RUN PIP_CONFIG_FILE=/pipconfig.txt PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt langchain langchain_openai -# -- Adding non-package dependency graphs -- -ADD ./graphs/ /deps/__outer_graphs/src -RUN set -ex && \\ - for line in '[project]' \\ - 'name = "graphs"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_graphs/pyproject.toml; \\ - done -# -- End of non-package dependency graphs -- -# -- Installing all local dependencies -- -RUN PIP_CONFIG_FILE=/pipconfig.txt PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* -# -- End of local dependencies install -- -ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_graphs/src/agent.py:graph"}'""" - assert clean_empty_lines(actual_docker_stdin) == expected_docker_stdin - assert additional_contexts == {} - - -# node.js build used for LangGraph Cloud -def test_config_to_docker_nodejs(): - graphs = {"agent": "./graphs/agent.js:graph"} - actual_docker_stdin, additional_contexts = config_to_docker( - PATH_TO_CONFIG, - validate_config( - { - "node_version": "20", - "graphs": graphs, - "dockerfile_lines": ["ARG meow", "ARG foo"], - } - ), - "langchain/langgraphjs-api", - ) - expected_docker_stdin = """FROM langchain/langgraphjs-api:20 -ARG meow -ARG foo -ADD . /deps/unit_tests -RUN cd /deps/unit_tests && npm i -ENV LANGSERVE_GRAPHS='{"agent": "./graphs/agent.js:graph"}' -WORKDIR /deps/unit_tests -RUN (test ! -f /api/langgraph_api/js/build.mts && echo "Prebuild script not found, skipping") || tsx /api/langgraph_api/js/build.mts""" - - assert clean_empty_lines(actual_docker_stdin) == expected_docker_stdin - assert additional_contexts == {} - - -# config_to_compose -def test_config_to_compose_simple_config(): - graphs = {"agent": "./agent.py:graph"} - expected_compose_stdin = """\ - - pull_policy: build - build: - context: . - dockerfile_inline: | - FROM langchain/langgraph-api:3.11 - # -- Adding non-package dependency unit_tests -- - ADD . /deps/__outer_unit_tests/unit_tests - RUN set -ex && \\ - for line in '[project]' \\ - 'name = "unit_tests"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_unit_tests/pyproject.toml; \\ - done - # -- End of non-package dependency unit_tests -- - # -- Installing all local dependencies -- - RUN PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* - # -- End of local dependencies install -- - ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_unit_tests/unit_tests/agent.py:graph"}' - WORKDIR /deps/__outer_unit_tests/unit_tests - """ - actual_compose_stdin = config_to_compose( - PATH_TO_CONFIG, - validate_config({"dependencies": ["."], "graphs": graphs}), - "langchain/langgraph-api", - ) - assert clean_empty_lines(actual_compose_stdin) == expected_compose_stdin - - -def test_config_to_compose_env_vars(): - graphs = {"agent": "./agent.py:graph"} - expected_compose_stdin = """ OPENAI_API_KEY: "key" - - pull_policy: build - build: - context: . - dockerfile_inline: | - FROM langchain/langgraph-api-custom:3.11 - # -- Adding non-package dependency unit_tests -- - ADD . /deps/__outer_unit_tests/unit_tests - RUN set -ex && \\ - for line in '[project]' \\ - 'name = "unit_tests"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_unit_tests/pyproject.toml; \\ - done - # -- End of non-package dependency unit_tests -- - # -- Installing all local dependencies -- - RUN PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* - # -- End of local dependencies install -- - ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_unit_tests/unit_tests/agent.py:graph"}' - WORKDIR /deps/__outer_unit_tests/unit_tests - """ - openai_api_key = "key" - actual_compose_stdin = config_to_compose( - PATH_TO_CONFIG, - validate_config( - { - "dependencies": ["."], - "graphs": graphs, - "env": {"OPENAI_API_KEY": openai_api_key}, - } - ), - "langchain/langgraph-api-custom", - ) - assert clean_empty_lines(actual_compose_stdin) == expected_compose_stdin - - -def test_config_to_compose_env_file(): - graphs = {"agent": "./agent.py:graph"} - expected_compose_stdin = """\ - env_file: .env - pull_policy: build - build: - context: . - dockerfile_inline: | - FROM langchain/langgraph-api:3.11 - # -- Adding non-package dependency unit_tests -- - ADD . /deps/__outer_unit_tests/unit_tests - RUN set -ex && \\ - for line in '[project]' \\ - 'name = "unit_tests"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_unit_tests/pyproject.toml; \\ - done - # -- End of non-package dependency unit_tests -- - # -- Installing all local dependencies -- - RUN PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* - # -- End of local dependencies install -- - ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_unit_tests/unit_tests/agent.py:graph"}' - WORKDIR /deps/__outer_unit_tests/unit_tests - """ - actual_compose_stdin = config_to_compose( - PATH_TO_CONFIG, - validate_config({"dependencies": ["."], "graphs": graphs, "env": ".env"}), - "langchain/langgraph-api", - ) - assert clean_empty_lines(actual_compose_stdin) == expected_compose_stdin - - -def test_config_to_compose_watch(): - graphs = {"agent": "./agent.py:graph"} - expected_compose_stdin = """\ - - pull_policy: build - build: - context: . - dockerfile_inline: | - FROM langchain/langgraph-api:3.11 - # -- Adding non-package dependency unit_tests -- - ADD . /deps/__outer_unit_tests/unit_tests - RUN set -ex && \\ - for line in '[project]' \\ - 'name = "unit_tests"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_unit_tests/pyproject.toml; \\ - done - # -- End of non-package dependency unit_tests -- - # -- Installing all local dependencies -- - RUN PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* - # -- End of local dependencies install -- - ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_unit_tests/unit_tests/agent.py:graph"}' - WORKDIR /deps/__outer_unit_tests/unit_tests - - develop: - watch: - - path: test_config.json - action: rebuild - - path: . - action: rebuild\ -""" - actual_compose_stdin = config_to_compose( - PATH_TO_CONFIG, - validate_config({"dependencies": ["."], "graphs": graphs}), - "langchain/langgraph-api", - watch=True, - ) - assert clean_empty_lines(actual_compose_stdin) == expected_compose_stdin - - -def test_config_to_compose_end_to_end(): - # test all of the above + langgraph API path - graphs = {"agent": "./agent.py:graph"} - expected_compose_stdin = """\ - env_file: .env - pull_policy: build - build: - context: . - dockerfile_inline: | - FROM langchain/langgraph-api:3.11 - # -- Adding non-package dependency unit_tests -- - ADD . /deps/__outer_unit_tests/unit_tests - RUN set -ex && \\ - for line in '[project]' \\ - 'name = "unit_tests"' \\ - 'version = "0.1"' \\ - '[tool.setuptools.package-data]' \\ - '"*" = ["**/*"]'; do \\ - echo "$line" >> /deps/__outer_unit_tests/pyproject.toml; \\ - done - # -- End of non-package dependency unit_tests -- - # -- Installing all local dependencies -- - RUN PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/* - # -- End of local dependencies install -- - ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_unit_tests/unit_tests/agent.py:graph"}' - WORKDIR /deps/__outer_unit_tests/unit_tests - - develop: - watch: - - path: test_config.json - action: rebuild - - path: . - action: rebuild\ -""" - actual_compose_stdin = config_to_compose( - PATH_TO_CONFIG, - validate_config({"dependencies": ["."], "graphs": graphs, "env": ".env"}), - "langchain/langgraph-api", - watch=True, - ) - assert clean_empty_lines(actual_compose_stdin) == expected_compose_stdin diff --git a/libs/cli/tests/unit_tests/test_docker.py b/libs/cli/tests/unit_tests/test_docker.py deleted file mode 100644 index 355efeb4d..000000000 --- a/libs/cli/tests/unit_tests/test_docker.py +++ /dev/null @@ -1,148 +0,0 @@ -from langgraph_cli.docker import ( - DEFAULT_POSTGRES_URI, - DockerCapabilities, - Version, - compose, -) -from langgraph_cli.util import clean_empty_lines - -DEFAULT_DOCKER_CAPABILITIES = DockerCapabilities( - version_docker=Version(26, 1, 1), - version_compose=Version(2, 27, 0), - healthcheck_start_interval=False, -) - - -def test_compose_with_no_debugger_and_custom_db(): - port = 8123 - custom_postgres_uri = "custom_postgres_uri" - actual_compose_str = compose( - DEFAULT_DOCKER_CAPABILITIES, port=port, postgres_uri=custom_postgres_uri - ) - expected_compose_str = f"""services: - langgraph-redis: - image: redis:6 - healthcheck: - test: redis-cli ping - interval: 5s - timeout: 1s - retries: 5 - langgraph-api: - ports: - - "{port}:8000" - depends_on: - langgraph-redis: - condition: service_healthy - environment: - REDIS_URI: redis://langgraph-redis:6379 - POSTGRES_URI: {custom_postgres_uri}""" - assert clean_empty_lines(actual_compose_str) == expected_compose_str - - -def test_compose_with_no_debugger_and_custom_db_with_healthcheck(): - port = 8123 - custom_postgres_uri = "custom_postgres_uri" - actual_compose_str = compose( - DEFAULT_DOCKER_CAPABILITIES._replace(healthcheck_start_interval=True), - port=port, - postgres_uri=custom_postgres_uri, - ) - expected_compose_str = f"""services: - langgraph-redis: - image: redis:6 - healthcheck: - test: redis-cli ping - interval: 5s - timeout: 1s - retries: 5 - langgraph-api: - ports: - - "{port}:8000" - depends_on: - langgraph-redis: - condition: service_healthy - environment: - REDIS_URI: redis://langgraph-redis:6379 - POSTGRES_URI: {custom_postgres_uri} - healthcheck: - test: python /api/healthcheck.py - interval: 60s - start_interval: 1s - start_period: 10s""" - assert clean_empty_lines(actual_compose_str) == expected_compose_str - - -def test_compose_with_debugger_and_custom_db(): - port = 8123 - custom_postgres_uri = "custom_postgres_uri" - actual_compose_str = compose( - DEFAULT_DOCKER_CAPABILITIES, - port=port, - postgres_uri=custom_postgres_uri, - ) - expected_compose_str = f"""services: - langgraph-redis: - image: redis:6 - healthcheck: - test: redis-cli ping - interval: 5s - timeout: 1s - retries: 5 - langgraph-api: - ports: - - "{port}:8000" - depends_on: - langgraph-redis: - condition: service_healthy - environment: - REDIS_URI: redis://langgraph-redis:6379 - POSTGRES_URI: {custom_postgres_uri}""" - assert clean_empty_lines(actual_compose_str) == expected_compose_str - - -def test_compose_with_debugger_and_default_db(): - port = 8123 - actual_compose_str = compose(DEFAULT_DOCKER_CAPABILITIES, port=port) - expected_compose_str = f"""volumes: - langgraph-data: - driver: local -services: - langgraph-redis: - image: redis:6 - healthcheck: - test: redis-cli ping - interval: 5s - timeout: 1s - retries: 5 - langgraph-postgres: - image: pgvector/pgvector:pg16 - ports: - - "5433:5432" - environment: - POSTGRES_DB: postgres - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - command: - - postgres - - -c - - shared_preload_libraries=vector - volumes: - - langgraph-data:/var/lib/postgresql/data - healthcheck: - test: pg_isready -U postgres - start_period: 10s - timeout: 1s - retries: 5 - interval: 5s - langgraph-api: - ports: - - "{port}:8000" - depends_on: - langgraph-redis: - condition: service_healthy - langgraph-postgres: - condition: service_healthy - environment: - REDIS_URI: redis://langgraph-redis:6379 - POSTGRES_URI: {DEFAULT_POSTGRES_URI}""" - assert clean_empty_lines(actual_compose_str) == expected_compose_str