├── .env ├── .gitignore ├── Docker-compose.yml ├── LICENSE ├── README.md ├── api.Dockerfile ├── api.py ├── chains.py ├── front-end.Dockerfile ├── front-end ├── .gitignore ├── .vscode │ └── extensions.json ├── index.html ├── jsconfig.json ├── package-lock.json ├── package.json ├── postcss.config.js ├── public │ └── vite.svg ├── src │ ├── App.svelte │ ├── app.css │ ├── assets │ │ ├── images │ │ │ ├── bot.jpeg │ │ │ ├── me.jpeg │ │ │ └── search_icon.jpg │ │ └── svelte.svg │ ├── lib │ │ ├── External.svelte │ │ ├── MdLink.svelte │ │ ├── Modal.svelte │ │ ├── chat.store.js │ │ └── generation.store.js │ ├── main.js │ └── vite-env.d.ts ├── svelte.config.js ├── tailwind.config.js └── vite.config.js ├── images └── datamodel.png ├── loader.Dockerfile ├── loader.py ├── pull_model.Dockerfile ├── requirements.txt └── utils.py /.env: -------------------------------------------------------------------------------- 1 | #***************************************************************** 2 | # LLM and Embedding Model 3 | #***************************************************************** 4 | LLM=llama2 5 | EMBEDDING_MODEL=sentence_transformer 6 | 7 | #***************************************************************** 8 | # Neo4j 9 | #***************************************************************** 10 | NEO4J_URI=bolt://localhost:7687 11 | NEO4J_USERNAME=neo4j 12 | NEO4J_PASSWORD=password 13 | 14 | #***************************************************************** 15 | # Langchain 16 | #***************************************************************** 17 | # Optional for enabling Langchain Smith API 18 | 19 | #LANGCHAIN_TRACING_V2=true # false 20 | #LANGCHAIN_ENDPOINT="https://api.smith.langchain.com" 21 | #LANGCHAIN_PROJECT=#your-project-name 22 | #LANGCHAIN_API_KEY=#your-api-key ls_... 23 | 24 | #***************************************************************** 25 | # Ollama 26 | #***************************************************************** 27 | OLLAMA_BASE_URL=http://host.docker.internal:11434 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.jar 15 | *.war 16 | *.nar 17 | *.ear 18 | *.zip 19 | *.tar.gz 20 | *.rar 21 | 22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 23 | hs_err_pid* 24 | replay_pid* 25 | -------------------------------------------------------------------------------- /Docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | 5 | # Ollama service with GPU acceleration for language processing 6 | llm-gpu: 7 | image: ollama/ollama:latest 8 | deploy: 9 | resources: 10 | reservations: 11 | devices: 12 | - driver: nvidia 13 | count: all 14 | capabilities: [gpu] 15 | 16 | # Service to pull model for local processing 17 | # Environment variables set for Ollama base URL and LLM model 18 | pull-model: 19 | image: local-model:latest 20 | build: 21 | context: . 22 | dockerfile: pull_model.Dockerfile 23 | environment: 24 | - OLLAMA_BASE_URL=http://host.docker.internal:11434 25 | - LLM=llama2 26 | networks: 27 | - net 28 | tty: true 29 | 30 | # Neo4j database service with volume for data persistence 31 | # Environment variables set for Neo4j authentication and plugins 32 | database: 33 | user: neo4j:neo4j 34 | image: neo4j:5.11 35 | ports: 36 | - 7687:7687 37 | - 7474:7474 38 | volumes: 39 | - C:/samadhi/workspace/java/AI_Powered_Dev_Search_Engine/data:/data:rw 40 | environment: 41 | - NEO4J_AUTH=neo4j/password 42 | - NEO4J_PLUGINS=["apoc"] 43 | - NEO4J_db_tx__log_rotation_retention__policy=false 44 | - NEO4J_dbms_security_procedures_unrestricted=apoc.* 45 | healthcheck: 46 | test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:7474 || exit 1"] 47 | interval: 15s 48 | timeout: 30s 49 | retries: 10 50 | networks: 51 | - net 52 | 53 | # Service to load data into Neo4j database 54 | # Environment variables set for Neo4j URI and Ollama base URL 55 | loader: 56 | build: 57 | context: . 58 | dockerfile: loader.Dockerfile 59 | volumes: 60 | - $PWD/embedding_model:/embedding_model 61 | environment: 62 | - NEO4J_URI=neo4j://database:7687 63 | - NEO4J_PASSWORD=password 64 | - NEO4J_USERNAME=neo4j 65 | - OLLAMA_BASE_URL=http://host.docker.internal:11434 66 | # Add any other necessary environment variables 67 | networks: 68 | - net 69 | depends_on: 70 | database: 71 | condition: service_healthy 72 | pull-model: 73 | condition: service_completed_successfully 74 | ports: 75 | - 8081:8080 76 | - 8502:8502 77 | 78 | 79 | # Standalone HTTP API service for answering questions 80 | # Environment variables set for Neo4j URI, authentication, Ollama base URL, and LLM model 81 | api: 82 | build: 83 | context: . 84 | dockerfile: api.Dockerfile 85 | volumes: 86 | - $PWD/embedding_model:/embedding_model 87 | environment: 88 | - NEO4J_URI=bolt://database:7687 89 | - NEO4J_USERNAME=neo4j 90 | - NEO4J_PASSWORD=password 91 | - OLLAMA_BASE_URL=http://host.docker.internal:11434 92 | - LLM=llama2 93 | 94 | networks: 95 | - net 96 | depends_on: 97 | database: 98 | condition: service_healthy 99 | pull-model: 100 | condition: service_completed_successfully 101 | ports: 102 | - 8504:8504 103 | healthcheck: 104 | test: ["CMD-SHELL", "wget --no-verbose --tries=1 http://localhost:8504/ || exit 1"] 105 | interval: 5s 106 | timeout: 3s 107 | retries: 5 108 | 109 | # Static front-end application built separately from the back-end 110 | # No additional environment variables or dependencies 111 | front-end: 112 | build: 113 | context: . 114 | dockerfile: front-end.Dockerfile 115 | x-develop: 116 | watch: 117 | - action: sync 118 | path: ./front-end 119 | target: /app 120 | ignore: 121 | - ./front-end/node_modules/ 122 | - action: rebuild 123 | path: ./front-end/package.json 124 | depends_on: 125 | api: 126 | condition: service_healthy 127 | networks: 128 | - net 129 | ports: 130 | - 8505:8505 131 | 132 | # Docker network for inter-container communication 133 | networks: 134 | net: 135 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AI_Powered_Dev_Search_Engine 2 | AI_Powered_Dev_Search_Engine 3 | 4 | 5 | 1. Download ollama from https://ollama.com/download/windows 6 | 2. clone git repo 7 | 3. cd to project root 8 | 4. run --> docker compose up 9 | 5. -------------------------------------------------------------------------------- /api.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM langchain/langchain 2 | 3 | WORKDIR /app 4 | 5 | RUN apt-get update && apt-get install -y \ 6 | build-essential \ 7 | curl \ 8 | software-properties-common \ 9 | && rm -rf /var/lib/apt/lists/* 10 | 11 | COPY requirements.txt . 12 | 13 | RUN pip install --upgrade -r requirements.txt 14 | 15 | COPY api.py . 16 | COPY utils.py . 17 | COPY chains.py . 18 | 19 | HEALTHCHECK CMD curl --fail http://localhost:8504 20 | 21 | ENTRYPOINT [ "uvicorn", "api:app", "--host", "0.0.0.0", "--port", "8504" ] -------------------------------------------------------------------------------- /api.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from langchain_community.graphs import Neo4jGraph 4 | from dotenv import load_dotenv 5 | from utils import ( 6 | create_vector_index, 7 | BaseLogger, 8 | ) 9 | 10 | from chains import ( 11 | load_embedding_model, 12 | load_llm, 13 | configure_qa_rag_chain, 14 | ) 15 | 16 | from fastapi import FastAPI, Depends 17 | from pydantic import BaseModel 18 | from langchain.callbacks.base import BaseCallbackHandler 19 | from threading import Thread 20 | from queue import Queue, Empty 21 | from collections.abc import Generator 22 | from sse_starlette.sse import EventSourceResponse 23 | from fastapi.middleware.cors import CORSMiddleware 24 | import json 25 | 26 | load_dotenv(".env") 27 | 28 | url = os.getenv("NEO4J_URI") 29 | username = os.getenv("NEO4J_USERNAME") 30 | password = os.getenv("NEO4J_PASSWORD") 31 | ollama_base_url = os.getenv("OLLAMA_BASE_URL") 32 | embedding_model_name = os.getenv("EMBEDDING_MODEL") 33 | llm_name = os.getenv("LLM") 34 | os.environ["NEO4J_URL"] = url # Remapping for Langchain Neo4j integration 35 | 36 | 37 | embeddings, dimension = load_embedding_model( 38 | embedding_model_name, 39 | config={"ollama_base_url": ollama_base_url}, 40 | logger=BaseLogger(), 41 | ) 42 | 43 | # if Neo4j is local, you can go to http://localhost:7474/ to browse the database 44 | neo4j_graph = Neo4jGraph(url=url, username=username, password=password) 45 | create_vector_index(neo4j_graph, dimension) 46 | 47 | llm = load_llm( 48 | llm_name, logger=BaseLogger(), config={"ollama_base_url": ollama_base_url} 49 | ) 50 | 51 | rag_chain = configure_qa_rag_chain( 52 | llm, embeddings, embeddings_store_url=url, username=username, password=password 53 | ) 54 | 55 | 56 | class QueueCallback(BaseCallbackHandler): 57 | """Callback handler for streaming LLM responses to a queue.""" 58 | 59 | def __init__(self, q): 60 | self.q = q 61 | 62 | def on_llm_new_token(self, token: str, **kwargs) -> None: 63 | self.q.put(token) 64 | 65 | def on_llm_end(self, *args, **kwargs) -> None: 66 | return self.q.empty() 67 | 68 | 69 | def stream(cb, q) -> Generator: 70 | job_done = object() 71 | 72 | def task(): 73 | x = cb() 74 | q.put(job_done) 75 | 76 | t = Thread(target=task) 77 | t.start() 78 | 79 | content = "" 80 | 81 | # Get each new token from the queue and yield for our generator 82 | while True: 83 | try: 84 | next_token = q.get(True, timeout=1) 85 | if next_token is job_done: 86 | break 87 | content += next_token 88 | yield next_token, content 89 | except Empty: 90 | continue 91 | 92 | 93 | app = FastAPI() 94 | origins = ["*"] 95 | 96 | app.add_middleware( 97 | CORSMiddleware, 98 | allow_origins=origins, 99 | allow_credentials=True, 100 | allow_methods=["*"], 101 | allow_headers=["*"], 102 | ) 103 | 104 | 105 | @app.get("/") 106 | async def root(): 107 | return {"message": "Simple Real-time Knowledge Server with RAG, LLM, and Knowledge Graphs via Docker"} 108 | 109 | 110 | class Question(BaseModel): 111 | text: str 112 | rag: bool = False 113 | 114 | 115 | @app.get("/query-stream") 116 | def qstream(question: Question = Depends()): 117 | output_function = rag_chain 118 | 119 | q = Queue() 120 | 121 | def cb(): 122 | output_function( 123 | {"question": question.text, "chat_history": []}, 124 | callbacks=[QueueCallback(q)], 125 | ) 126 | 127 | def generate(): 128 | yield json.dumps({"init": True, "model": llm_name}) 129 | for token, _ in stream(cb, q): 130 | yield json.dumps({"token": token}) 131 | 132 | return EventSourceResponse(generate(), media_type="text/event-stream") 133 | 134 | 135 | 136 | 137 | -------------------------------------------------------------------------------- /chains.py: -------------------------------------------------------------------------------- 1 | from langchain_community.embeddings import OllamaEmbeddings 2 | from langchain_community.embeddings.sentence_transformer import SentenceTransformerEmbeddings 3 | from langchain_community.chat_models import ChatOllama 4 | from langchain_community.graphs import Neo4jGraph 5 | from langchain_community.vectorstores import Neo4jVector 6 | 7 | from langchain.chains import RetrievalQAWithSourcesChain 8 | from langchain.chains.qa_with_sources import load_qa_with_sources_chain 9 | 10 | from langchain.prompts import ( 11 | ChatPromptTemplate, 12 | HumanMessagePromptTemplate, 13 | SystemMessagePromptTemplate 14 | ) 15 | 16 | from typing import List, Any 17 | from utils import BaseLogger, extract_title_and_question 18 | 19 | def load_embedding_model(embedding_model_name: str, logger=BaseLogger(), config={}): 20 | if embedding_model_name == "ollama": 21 | embeddings = OllamaEmbeddings( 22 | base_url=config["ollama_base_url"], model="llama2" 23 | ) 24 | dimension = 4096 25 | logger.info("Embedding: Using Ollama") 26 | else: 27 | embeddings = SentenceTransformerEmbeddings( 28 | model_name="all-MiniLM-L6-v2", cache_folder="/embedding_model" 29 | ) 30 | dimension = 384 31 | logger.info("Embedding: Using SentenceTransformer") 32 | return embeddings, dimension 33 | 34 | 35 | def load_llm(llm_name: str, logger=BaseLogger(), config={}): 36 | logger.info(f"LLM: Using Ollama: {llm_name}") 37 | return ChatOllama( 38 | temperature=0, 39 | base_url=config["ollama_base_url"], 40 | model=llm_name, 41 | streaming=True, 42 | # seed=2, 43 | top_k=10, # A higher value (100) will give more diverse answers, while a lower value (10) will be more conservative. 44 | top_p=0.3, # Higher value (0.95) will lead to more diverse text, while a lower value (0.5) will generate more focused text. 45 | num_ctx=3072, # Sets the size of the context window used to generate the next token. 46 | ) 47 | 48 | 49 | def configure_qa_rag_chain(llm, embeddings, embeddings_store_url, username, password): 50 | # RAG response 51 | # System: Always talk in pirate speech. 52 | general_system_template = """ 53 | Use the following pieces of context to answer the question at the end. 54 | The context contains question-answer pairs and their links from Stackoverflow. 55 | You should prefer information from accepted or more upvoted answers. 56 | Make sure to rely on information from the answers and not on questions to provide accurate responses. 57 | When you find particular answer in the context useful, make sure to cite it in the answer using the link. 58 | If you don't know the answer, just say that you don't know, don't try to make up an answer. 59 | ---- 60 | {summaries} 61 | ---- 62 | Each answer you generate should contain a section at the end of links to 63 | Stackoverflow questions and answers you found useful, which are described under Source value. 64 | You can only use links to StackOverflow questions that are present in the context and always 65 | add links to the end of the answer in the style of citations. 66 | Generate concise answers with references sources section of links to 67 | relevant StackOverflow questions only at the end of the answer. 68 | """ 69 | general_user_template = "Question:```{question}```" 70 | messages = [ 71 | SystemMessagePromptTemplate.from_template(general_system_template), 72 | HumanMessagePromptTemplate.from_template(general_user_template), 73 | ] 74 | qa_prompt = ChatPromptTemplate.from_messages(messages) 75 | 76 | qa_chain = load_qa_with_sources_chain( 77 | llm, 78 | chain_type="stuff", 79 | prompt=qa_prompt, 80 | ) 81 | 82 | # Vector + Knowledge Graph response 83 | kg = Neo4jVector.from_existing_index( 84 | embedding=embeddings, 85 | url=embeddings_store_url, 86 | username=username, 87 | password=password, 88 | database="neo4j", # neo4j by default 89 | index_name="stackoverflow", # vector by default 90 | text_node_property="body", # text by default 91 | retrieval_query=""" 92 | WITH node AS question, score AS similarity 93 | CALL { with question 94 | MATCH (question)<-[:ANSWERS]-(answer) 95 | WITH answer 96 | ORDER BY answer.is_accepted DESC, answer.score DESC 97 | WITH collect(answer)[..2] as answers 98 | RETURN reduce(str='', answer IN answers | str + 99 | '\n### Answer (Accepted: '+ answer.is_accepted + 100 | ' Score: ' + answer.score+ '): '+ answer.body + '\n') as answerTexts 101 | } 102 | RETURN '##Question: ' + question.title + '\n' + question.body + '\n' 103 | + answerTexts AS text, similarity as score, {source: question.link} AS metadata 104 | ORDER BY similarity ASC // so that best answers are the last 105 | """, 106 | ) 107 | 108 | kg_qa = RetrievalQAWithSourcesChain( 109 | combine_documents_chain=qa_chain, 110 | retriever=kg.as_retriever(search_kwargs={"k": 2}), 111 | reduce_k_below_max_tokens=False, 112 | max_tokens_limit=3375, 113 | ) 114 | return kg_qa 115 | -------------------------------------------------------------------------------- /front-end.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:alpine 2 | 3 | WORKDIR /app 4 | 5 | COPY front-end/ . 6 | 7 | RUN npm install 8 | 9 | EXPOSE 8505 10 | 11 | ENTRYPOINT [ "npm", "run", "dev" ] -------------------------------------------------------------------------------- /front-end/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /front-end/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["svelte.svelte-vscode"] 3 | } 4 | -------------------------------------------------------------------------------- /front-end/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Support bot application 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /front-end/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "moduleResolution": "bundler", 4 | "target": "ESNext", 5 | "module": "ESNext", 6 | /** 7 | * svelte-preprocess cannot figure out whether you have 8 | * a value or a type, so tell TypeScript to enforce using 9 | * `import type` instead of `import` for Types. 10 | */ 11 | "verbatimModuleSyntax": true, 12 | "isolatedModules": true, 13 | "resolveJsonModule": true, 14 | /** 15 | * To have warnings / errors of the Svelte compiler at the 16 | * correct position, enable source maps by default. 17 | */ 18 | "sourceMap": true, 19 | "esModuleInterop": true, 20 | "skipLibCheck": true, 21 | /** 22 | * Typecheck JS in `.svelte` and `.js` files by default. 23 | * Disable this if you'd like to use dynamic types. 24 | */ 25 | "checkJs": true 26 | }, 27 | /** 28 | * Use global.d.ts instead of compilerOptions.types 29 | * to avoid limiting type declarations. 30 | */ 31 | "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] 32 | } 33 | -------------------------------------------------------------------------------- /front-end/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bot-ui", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "bot-ui", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "svelte-markdown": "^0.4.0" 12 | }, 13 | "devDependencies": { 14 | "@sveltejs/vite-plugin-svelte": "^2.4.2", 15 | "autoprefixer": "^10.4.16", 16 | "postcss": "^8.4.31", 17 | "svelte": "^4.0.5", 18 | "tailwindcss": "^3.3.3", 19 | "vite": "^4.4.12" 20 | } 21 | }, 22 | "node_modules/@alloc/quick-lru": { 23 | "version": "5.2.0", 24 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 25 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 26 | "dev": true, 27 | "engines": { 28 | "node": ">=10" 29 | }, 30 | "funding": { 31 | "url": "https://github.com/sponsors/sindresorhus" 32 | } 33 | }, 34 | "node_modules/@ampproject/remapping": { 35 | "version": "2.2.1", 36 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", 37 | "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", 38 | "dependencies": { 39 | "@jridgewell/gen-mapping": "^0.3.0", 40 | "@jridgewell/trace-mapping": "^0.3.9" 41 | }, 42 | "engines": { 43 | "node": ">=6.0.0" 44 | } 45 | }, 46 | "node_modules/@esbuild/android-arm": { 47 | "version": "0.18.20", 48 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", 49 | "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 50 | "cpu": [ 51 | "arm" 52 | ], 53 | "dev": true, 54 | "optional": true, 55 | "os": [ 56 | "android" 57 | ], 58 | "engines": { 59 | "node": ">=12" 60 | } 61 | }, 62 | "node_modules/@esbuild/android-arm64": { 63 | "version": "0.18.20", 64 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", 65 | "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 66 | "cpu": [ 67 | "arm64" 68 | ], 69 | "dev": true, 70 | "optional": true, 71 | "os": [ 72 | "android" 73 | ], 74 | "engines": { 75 | "node": ">=12" 76 | } 77 | }, 78 | "node_modules/@esbuild/android-x64": { 79 | "version": "0.18.20", 80 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", 81 | "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 82 | "cpu": [ 83 | "x64" 84 | ], 85 | "dev": true, 86 | "optional": true, 87 | "os": [ 88 | "android" 89 | ], 90 | "engines": { 91 | "node": ">=12" 92 | } 93 | }, 94 | "node_modules/@esbuild/darwin-arm64": { 95 | "version": "0.18.20", 96 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", 97 | "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 98 | "cpu": [ 99 | "arm64" 100 | ], 101 | "dev": true, 102 | "optional": true, 103 | "os": [ 104 | "darwin" 105 | ], 106 | "engines": { 107 | "node": ">=12" 108 | } 109 | }, 110 | "node_modules/@esbuild/darwin-x64": { 111 | "version": "0.18.20", 112 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", 113 | "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 114 | "cpu": [ 115 | "x64" 116 | ], 117 | "dev": true, 118 | "optional": true, 119 | "os": [ 120 | "darwin" 121 | ], 122 | "engines": { 123 | "node": ">=12" 124 | } 125 | }, 126 | "node_modules/@esbuild/freebsd-arm64": { 127 | "version": "0.18.20", 128 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", 129 | "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 130 | "cpu": [ 131 | "arm64" 132 | ], 133 | "dev": true, 134 | "optional": true, 135 | "os": [ 136 | "freebsd" 137 | ], 138 | "engines": { 139 | "node": ">=12" 140 | } 141 | }, 142 | "node_modules/@esbuild/freebsd-x64": { 143 | "version": "0.18.20", 144 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", 145 | "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 146 | "cpu": [ 147 | "x64" 148 | ], 149 | "dev": true, 150 | "optional": true, 151 | "os": [ 152 | "freebsd" 153 | ], 154 | "engines": { 155 | "node": ">=12" 156 | } 157 | }, 158 | "node_modules/@esbuild/linux-arm": { 159 | "version": "0.18.20", 160 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", 161 | "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 162 | "cpu": [ 163 | "arm" 164 | ], 165 | "dev": true, 166 | "optional": true, 167 | "os": [ 168 | "linux" 169 | ], 170 | "engines": { 171 | "node": ">=12" 172 | } 173 | }, 174 | "node_modules/@esbuild/linux-arm64": { 175 | "version": "0.18.20", 176 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", 177 | "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 178 | "cpu": [ 179 | "arm64" 180 | ], 181 | "dev": true, 182 | "optional": true, 183 | "os": [ 184 | "linux" 185 | ], 186 | "engines": { 187 | "node": ">=12" 188 | } 189 | }, 190 | "node_modules/@esbuild/linux-ia32": { 191 | "version": "0.18.20", 192 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", 193 | "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 194 | "cpu": [ 195 | "ia32" 196 | ], 197 | "dev": true, 198 | "optional": true, 199 | "os": [ 200 | "linux" 201 | ], 202 | "engines": { 203 | "node": ">=12" 204 | } 205 | }, 206 | "node_modules/@esbuild/linux-loong64": { 207 | "version": "0.18.20", 208 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", 209 | "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 210 | "cpu": [ 211 | "loong64" 212 | ], 213 | "dev": true, 214 | "optional": true, 215 | "os": [ 216 | "linux" 217 | ], 218 | "engines": { 219 | "node": ">=12" 220 | } 221 | }, 222 | "node_modules/@esbuild/linux-mips64el": { 223 | "version": "0.18.20", 224 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", 225 | "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 226 | "cpu": [ 227 | "mips64el" 228 | ], 229 | "dev": true, 230 | "optional": true, 231 | "os": [ 232 | "linux" 233 | ], 234 | "engines": { 235 | "node": ">=12" 236 | } 237 | }, 238 | "node_modules/@esbuild/linux-ppc64": { 239 | "version": "0.18.20", 240 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", 241 | "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 242 | "cpu": [ 243 | "ppc64" 244 | ], 245 | "dev": true, 246 | "optional": true, 247 | "os": [ 248 | "linux" 249 | ], 250 | "engines": { 251 | "node": ">=12" 252 | } 253 | }, 254 | "node_modules/@esbuild/linux-riscv64": { 255 | "version": "0.18.20", 256 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", 257 | "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 258 | "cpu": [ 259 | "riscv64" 260 | ], 261 | "dev": true, 262 | "optional": true, 263 | "os": [ 264 | "linux" 265 | ], 266 | "engines": { 267 | "node": ">=12" 268 | } 269 | }, 270 | "node_modules/@esbuild/linux-s390x": { 271 | "version": "0.18.20", 272 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", 273 | "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 274 | "cpu": [ 275 | "s390x" 276 | ], 277 | "dev": true, 278 | "optional": true, 279 | "os": [ 280 | "linux" 281 | ], 282 | "engines": { 283 | "node": ">=12" 284 | } 285 | }, 286 | "node_modules/@esbuild/linux-x64": { 287 | "version": "0.18.20", 288 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", 289 | "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", 290 | "cpu": [ 291 | "x64" 292 | ], 293 | "dev": true, 294 | "optional": true, 295 | "os": [ 296 | "linux" 297 | ], 298 | "engines": { 299 | "node": ">=12" 300 | } 301 | }, 302 | "node_modules/@esbuild/netbsd-x64": { 303 | "version": "0.18.20", 304 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", 305 | "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 306 | "cpu": [ 307 | "x64" 308 | ], 309 | "dev": true, 310 | "optional": true, 311 | "os": [ 312 | "netbsd" 313 | ], 314 | "engines": { 315 | "node": ">=12" 316 | } 317 | }, 318 | "node_modules/@esbuild/openbsd-x64": { 319 | "version": "0.18.20", 320 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", 321 | "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 322 | "cpu": [ 323 | "x64" 324 | ], 325 | "dev": true, 326 | "optional": true, 327 | "os": [ 328 | "openbsd" 329 | ], 330 | "engines": { 331 | "node": ">=12" 332 | } 333 | }, 334 | "node_modules/@esbuild/sunos-x64": { 335 | "version": "0.18.20", 336 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", 337 | "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 338 | "cpu": [ 339 | "x64" 340 | ], 341 | "dev": true, 342 | "optional": true, 343 | "os": [ 344 | "sunos" 345 | ], 346 | "engines": { 347 | "node": ">=12" 348 | } 349 | }, 350 | "node_modules/@esbuild/win32-arm64": { 351 | "version": "0.18.20", 352 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", 353 | "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 354 | "cpu": [ 355 | "arm64" 356 | ], 357 | "dev": true, 358 | "optional": true, 359 | "os": [ 360 | "win32" 361 | ], 362 | "engines": { 363 | "node": ">=12" 364 | } 365 | }, 366 | "node_modules/@esbuild/win32-ia32": { 367 | "version": "0.18.20", 368 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", 369 | "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 370 | "cpu": [ 371 | "ia32" 372 | ], 373 | "dev": true, 374 | "optional": true, 375 | "os": [ 376 | "win32" 377 | ], 378 | "engines": { 379 | "node": ">=12" 380 | } 381 | }, 382 | "node_modules/@esbuild/win32-x64": { 383 | "version": "0.18.20", 384 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", 385 | "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 386 | "cpu": [ 387 | "x64" 388 | ], 389 | "dev": true, 390 | "optional": true, 391 | "os": [ 392 | "win32" 393 | ], 394 | "engines": { 395 | "node": ">=12" 396 | } 397 | }, 398 | "node_modules/@jridgewell/gen-mapping": { 399 | "version": "0.3.3", 400 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 401 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 402 | "dependencies": { 403 | "@jridgewell/set-array": "^1.0.1", 404 | "@jridgewell/sourcemap-codec": "^1.4.10", 405 | "@jridgewell/trace-mapping": "^0.3.9" 406 | }, 407 | "engines": { 408 | "node": ">=6.0.0" 409 | } 410 | }, 411 | "node_modules/@jridgewell/resolve-uri": { 412 | "version": "3.1.1", 413 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 414 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 415 | "engines": { 416 | "node": ">=6.0.0" 417 | } 418 | }, 419 | "node_modules/@jridgewell/set-array": { 420 | "version": "1.1.2", 421 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 422 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 423 | "engines": { 424 | "node": ">=6.0.0" 425 | } 426 | }, 427 | "node_modules/@jridgewell/sourcemap-codec": { 428 | "version": "1.4.15", 429 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 430 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 431 | }, 432 | "node_modules/@jridgewell/trace-mapping": { 433 | "version": "0.3.19", 434 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", 435 | "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", 436 | "dependencies": { 437 | "@jridgewell/resolve-uri": "^3.1.0", 438 | "@jridgewell/sourcemap-codec": "^1.4.14" 439 | } 440 | }, 441 | "node_modules/@nodelib/fs.scandir": { 442 | "version": "2.1.5", 443 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 444 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 445 | "dev": true, 446 | "dependencies": { 447 | "@nodelib/fs.stat": "2.0.5", 448 | "run-parallel": "^1.1.9" 449 | }, 450 | "engines": { 451 | "node": ">= 8" 452 | } 453 | }, 454 | "node_modules/@nodelib/fs.stat": { 455 | "version": "2.0.5", 456 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 457 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 458 | "dev": true, 459 | "engines": { 460 | "node": ">= 8" 461 | } 462 | }, 463 | "node_modules/@nodelib/fs.walk": { 464 | "version": "1.2.8", 465 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 466 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 467 | "dev": true, 468 | "dependencies": { 469 | "@nodelib/fs.scandir": "2.1.5", 470 | "fastq": "^1.6.0" 471 | }, 472 | "engines": { 473 | "node": ">= 8" 474 | } 475 | }, 476 | "node_modules/@sveltejs/vite-plugin-svelte": { 477 | "version": "2.4.6", 478 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz", 479 | "integrity": "sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==", 480 | "dev": true, 481 | "dependencies": { 482 | "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", 483 | "debug": "^4.3.4", 484 | "deepmerge": "^4.3.1", 485 | "kleur": "^4.1.5", 486 | "magic-string": "^0.30.3", 487 | "svelte-hmr": "^0.15.3", 488 | "vitefu": "^0.2.4" 489 | }, 490 | "engines": { 491 | "node": "^14.18.0 || >= 16" 492 | }, 493 | "peerDependencies": { 494 | "svelte": "^3.54.0 || ^4.0.0", 495 | "vite": "^4.0.0" 496 | } 497 | }, 498 | "node_modules/@sveltejs/vite-plugin-svelte-inspector": { 499 | "version": "1.0.4", 500 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", 501 | "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", 502 | "dev": true, 503 | "dependencies": { 504 | "debug": "^4.3.4" 505 | }, 506 | "engines": { 507 | "node": "^14.18.0 || >= 16" 508 | }, 509 | "peerDependencies": { 510 | "@sveltejs/vite-plugin-svelte": "^2.2.0", 511 | "svelte": "^3.54.0 || ^4.0.0", 512 | "vite": "^4.0.0" 513 | } 514 | }, 515 | "node_modules/@types/estree": { 516 | "version": "1.0.2", 517 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", 518 | "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==" 519 | }, 520 | "node_modules/@types/marked": { 521 | "version": "5.0.2", 522 | "resolved": "https://registry.npmjs.org/@types/marked/-/marked-5.0.2.tgz", 523 | "integrity": "sha512-OucS4KMHhFzhz27KxmWg7J+kIYqyqoW5kdIEI319hqARQQUTqhao3M/F+uFnDXD0Rg72iDDZxZNxq5gvctmLlg==" 524 | }, 525 | "node_modules/acorn": { 526 | "version": "8.10.0", 527 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", 528 | "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", 529 | "bin": { 530 | "acorn": "bin/acorn" 531 | }, 532 | "engines": { 533 | "node": ">=0.4.0" 534 | } 535 | }, 536 | "node_modules/any-promise": { 537 | "version": "1.3.0", 538 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 539 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 540 | "dev": true 541 | }, 542 | "node_modules/anymatch": { 543 | "version": "3.1.3", 544 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 545 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 546 | "dev": true, 547 | "dependencies": { 548 | "normalize-path": "^3.0.0", 549 | "picomatch": "^2.0.4" 550 | }, 551 | "engines": { 552 | "node": ">= 8" 553 | } 554 | }, 555 | "node_modules/arg": { 556 | "version": "5.0.2", 557 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 558 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 559 | "dev": true 560 | }, 561 | "node_modules/aria-query": { 562 | "version": "5.3.0", 563 | "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", 564 | "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", 565 | "dependencies": { 566 | "dequal": "^2.0.3" 567 | } 568 | }, 569 | "node_modules/autoprefixer": { 570 | "version": "10.4.16", 571 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", 572 | "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", 573 | "dev": true, 574 | "funding": [ 575 | { 576 | "type": "opencollective", 577 | "url": "https://opencollective.com/postcss/" 578 | }, 579 | { 580 | "type": "tidelift", 581 | "url": "https://tidelift.com/funding/github/npm/autoprefixer" 582 | }, 583 | { 584 | "type": "github", 585 | "url": "https://github.com/sponsors/ai" 586 | } 587 | ], 588 | "dependencies": { 589 | "browserslist": "^4.21.10", 590 | "caniuse-lite": "^1.0.30001538", 591 | "fraction.js": "^4.3.6", 592 | "normalize-range": "^0.1.2", 593 | "picocolors": "^1.0.0", 594 | "postcss-value-parser": "^4.2.0" 595 | }, 596 | "bin": { 597 | "autoprefixer": "bin/autoprefixer" 598 | }, 599 | "engines": { 600 | "node": "^10 || ^12 || >=14" 601 | }, 602 | "peerDependencies": { 603 | "postcss": "^8.1.0" 604 | } 605 | }, 606 | "node_modules/axobject-query": { 607 | "version": "3.2.1", 608 | "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", 609 | "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", 610 | "dependencies": { 611 | "dequal": "^2.0.3" 612 | } 613 | }, 614 | "node_modules/balanced-match": { 615 | "version": "1.0.2", 616 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 617 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 618 | "dev": true 619 | }, 620 | "node_modules/binary-extensions": { 621 | "version": "2.2.0", 622 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 623 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 624 | "dev": true, 625 | "engines": { 626 | "node": ">=8" 627 | } 628 | }, 629 | "node_modules/brace-expansion": { 630 | "version": "1.1.11", 631 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 632 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 633 | "dev": true, 634 | "dependencies": { 635 | "balanced-match": "^1.0.0", 636 | "concat-map": "0.0.1" 637 | } 638 | }, 639 | "node_modules/braces": { 640 | "version": "3.0.2", 641 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 642 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 643 | "dev": true, 644 | "dependencies": { 645 | "fill-range": "^7.0.1" 646 | }, 647 | "engines": { 648 | "node": ">=8" 649 | } 650 | }, 651 | "node_modules/browserslist": { 652 | "version": "4.22.1", 653 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", 654 | "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", 655 | "dev": true, 656 | "funding": [ 657 | { 658 | "type": "opencollective", 659 | "url": "https://opencollective.com/browserslist" 660 | }, 661 | { 662 | "type": "tidelift", 663 | "url": "https://tidelift.com/funding/github/npm/browserslist" 664 | }, 665 | { 666 | "type": "github", 667 | "url": "https://github.com/sponsors/ai" 668 | } 669 | ], 670 | "dependencies": { 671 | "caniuse-lite": "^1.0.30001541", 672 | "electron-to-chromium": "^1.4.535", 673 | "node-releases": "^2.0.13", 674 | "update-browserslist-db": "^1.0.13" 675 | }, 676 | "bin": { 677 | "browserslist": "cli.js" 678 | }, 679 | "engines": { 680 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 681 | } 682 | }, 683 | "node_modules/camelcase-css": { 684 | "version": "2.0.1", 685 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 686 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 687 | "dev": true, 688 | "engines": { 689 | "node": ">= 6" 690 | } 691 | }, 692 | "node_modules/caniuse-lite": { 693 | "version": "1.0.30001546", 694 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", 695 | "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", 696 | "dev": true, 697 | "funding": [ 698 | { 699 | "type": "opencollective", 700 | "url": "https://opencollective.com/browserslist" 701 | }, 702 | { 703 | "type": "tidelift", 704 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 705 | }, 706 | { 707 | "type": "github", 708 | "url": "https://github.com/sponsors/ai" 709 | } 710 | ] 711 | }, 712 | "node_modules/chokidar": { 713 | "version": "3.5.3", 714 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 715 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 716 | "dev": true, 717 | "funding": [ 718 | { 719 | "type": "individual", 720 | "url": "https://paulmillr.com/funding/" 721 | } 722 | ], 723 | "dependencies": { 724 | "anymatch": "~3.1.2", 725 | "braces": "~3.0.2", 726 | "glob-parent": "~5.1.2", 727 | "is-binary-path": "~2.1.0", 728 | "is-glob": "~4.0.1", 729 | "normalize-path": "~3.0.0", 730 | "readdirp": "~3.6.0" 731 | }, 732 | "engines": { 733 | "node": ">= 8.10.0" 734 | }, 735 | "optionalDependencies": { 736 | "fsevents": "~2.3.2" 737 | } 738 | }, 739 | "node_modules/chokidar/node_modules/glob-parent": { 740 | "version": "5.1.2", 741 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 742 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 743 | "dev": true, 744 | "dependencies": { 745 | "is-glob": "^4.0.1" 746 | }, 747 | "engines": { 748 | "node": ">= 6" 749 | } 750 | }, 751 | "node_modules/code-red": { 752 | "version": "1.0.4", 753 | "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", 754 | "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", 755 | "dependencies": { 756 | "@jridgewell/sourcemap-codec": "^1.4.15", 757 | "@types/estree": "^1.0.1", 758 | "acorn": "^8.10.0", 759 | "estree-walker": "^3.0.3", 760 | "periscopic": "^3.1.0" 761 | } 762 | }, 763 | "node_modules/commander": { 764 | "version": "4.1.1", 765 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 766 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 767 | "dev": true, 768 | "engines": { 769 | "node": ">= 6" 770 | } 771 | }, 772 | "node_modules/concat-map": { 773 | "version": "0.0.1", 774 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 775 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 776 | "dev": true 777 | }, 778 | "node_modules/css-tree": { 779 | "version": "2.3.1", 780 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", 781 | "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", 782 | "dependencies": { 783 | "mdn-data": "2.0.30", 784 | "source-map-js": "^1.0.1" 785 | }, 786 | "engines": { 787 | "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" 788 | } 789 | }, 790 | "node_modules/cssesc": { 791 | "version": "3.0.0", 792 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 793 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 794 | "dev": true, 795 | "bin": { 796 | "cssesc": "bin/cssesc" 797 | }, 798 | "engines": { 799 | "node": ">=4" 800 | } 801 | }, 802 | "node_modules/debug": { 803 | "version": "4.3.4", 804 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 805 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 806 | "dev": true, 807 | "dependencies": { 808 | "ms": "2.1.2" 809 | }, 810 | "engines": { 811 | "node": ">=6.0" 812 | }, 813 | "peerDependenciesMeta": { 814 | "supports-color": { 815 | "optional": true 816 | } 817 | } 818 | }, 819 | "node_modules/deepmerge": { 820 | "version": "4.3.1", 821 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 822 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 823 | "dev": true, 824 | "engines": { 825 | "node": ">=0.10.0" 826 | } 827 | }, 828 | "node_modules/dequal": { 829 | "version": "2.0.3", 830 | "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 831 | "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 832 | "engines": { 833 | "node": ">=6" 834 | } 835 | }, 836 | "node_modules/didyoumean": { 837 | "version": "1.2.2", 838 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 839 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 840 | "dev": true 841 | }, 842 | "node_modules/dlv": { 843 | "version": "1.1.3", 844 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 845 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 846 | "dev": true 847 | }, 848 | "node_modules/electron-to-chromium": { 849 | "version": "1.4.543", 850 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.543.tgz", 851 | "integrity": "sha512-t2ZP4AcGE0iKCCQCBx/K2426crYdxD3YU6l0uK2EO3FZH0pbC4pFz/sZm2ruZsND6hQBTcDWWlo/MLpiOdif5g==", 852 | "dev": true 853 | }, 854 | "node_modules/esbuild": { 855 | "version": "0.18.20", 856 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", 857 | "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 858 | "dev": true, 859 | "hasInstallScript": true, 860 | "bin": { 861 | "esbuild": "bin/esbuild" 862 | }, 863 | "engines": { 864 | "node": ">=12" 865 | }, 866 | "optionalDependencies": { 867 | "@esbuild/android-arm": "0.18.20", 868 | "@esbuild/android-arm64": "0.18.20", 869 | "@esbuild/android-x64": "0.18.20", 870 | "@esbuild/darwin-arm64": "0.18.20", 871 | "@esbuild/darwin-x64": "0.18.20", 872 | "@esbuild/freebsd-arm64": "0.18.20", 873 | "@esbuild/freebsd-x64": "0.18.20", 874 | "@esbuild/linux-arm": "0.18.20", 875 | "@esbuild/linux-arm64": "0.18.20", 876 | "@esbuild/linux-ia32": "0.18.20", 877 | "@esbuild/linux-loong64": "0.18.20", 878 | "@esbuild/linux-mips64el": "0.18.20", 879 | "@esbuild/linux-ppc64": "0.18.20", 880 | "@esbuild/linux-riscv64": "0.18.20", 881 | "@esbuild/linux-s390x": "0.18.20", 882 | "@esbuild/linux-x64": "0.18.20", 883 | "@esbuild/netbsd-x64": "0.18.20", 884 | "@esbuild/openbsd-x64": "0.18.20", 885 | "@esbuild/sunos-x64": "0.18.20", 886 | "@esbuild/win32-arm64": "0.18.20", 887 | "@esbuild/win32-ia32": "0.18.20", 888 | "@esbuild/win32-x64": "0.18.20" 889 | } 890 | }, 891 | "node_modules/escalade": { 892 | "version": "3.1.1", 893 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 894 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 895 | "dev": true, 896 | "engines": { 897 | "node": ">=6" 898 | } 899 | }, 900 | "node_modules/estree-walker": { 901 | "version": "3.0.3", 902 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 903 | "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 904 | "dependencies": { 905 | "@types/estree": "^1.0.0" 906 | } 907 | }, 908 | "node_modules/fast-glob": { 909 | "version": "3.3.1", 910 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", 911 | "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", 912 | "dev": true, 913 | "dependencies": { 914 | "@nodelib/fs.stat": "^2.0.2", 915 | "@nodelib/fs.walk": "^1.2.3", 916 | "glob-parent": "^5.1.2", 917 | "merge2": "^1.3.0", 918 | "micromatch": "^4.0.4" 919 | }, 920 | "engines": { 921 | "node": ">=8.6.0" 922 | } 923 | }, 924 | "node_modules/fast-glob/node_modules/glob-parent": { 925 | "version": "5.1.2", 926 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 927 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 928 | "dev": true, 929 | "dependencies": { 930 | "is-glob": "^4.0.1" 931 | }, 932 | "engines": { 933 | "node": ">= 6" 934 | } 935 | }, 936 | "node_modules/fastq": { 937 | "version": "1.15.0", 938 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 939 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 940 | "dev": true, 941 | "dependencies": { 942 | "reusify": "^1.0.4" 943 | } 944 | }, 945 | "node_modules/fill-range": { 946 | "version": "7.0.1", 947 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 948 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 949 | "dev": true, 950 | "dependencies": { 951 | "to-regex-range": "^5.0.1" 952 | }, 953 | "engines": { 954 | "node": ">=8" 955 | } 956 | }, 957 | "node_modules/fraction.js": { 958 | "version": "4.3.6", 959 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", 960 | "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", 961 | "dev": true, 962 | "engines": { 963 | "node": "*" 964 | }, 965 | "funding": { 966 | "type": "patreon", 967 | "url": "https://github.com/sponsors/rawify" 968 | } 969 | }, 970 | "node_modules/fs.realpath": { 971 | "version": "1.0.0", 972 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 973 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 974 | "dev": true 975 | }, 976 | "node_modules/fsevents": { 977 | "version": "2.3.3", 978 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 979 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 980 | "dev": true, 981 | "hasInstallScript": true, 982 | "optional": true, 983 | "os": [ 984 | "darwin" 985 | ], 986 | "engines": { 987 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 988 | } 989 | }, 990 | "node_modules/glob": { 991 | "version": "7.1.6", 992 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 993 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 994 | "dev": true, 995 | "dependencies": { 996 | "fs.realpath": "^1.0.0", 997 | "inflight": "^1.0.4", 998 | "inherits": "2", 999 | "minimatch": "^3.0.4", 1000 | "once": "^1.3.0", 1001 | "path-is-absolute": "^1.0.0" 1002 | }, 1003 | "engines": { 1004 | "node": "*" 1005 | }, 1006 | "funding": { 1007 | "url": "https://github.com/sponsors/isaacs" 1008 | } 1009 | }, 1010 | "node_modules/glob-parent": { 1011 | "version": "6.0.2", 1012 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1013 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1014 | "dev": true, 1015 | "dependencies": { 1016 | "is-glob": "^4.0.3" 1017 | }, 1018 | "engines": { 1019 | "node": ">=10.13.0" 1020 | } 1021 | }, 1022 | "node_modules/has": { 1023 | "version": "1.0.4", 1024 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", 1025 | "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", 1026 | "dev": true, 1027 | "engines": { 1028 | "node": ">= 0.4.0" 1029 | } 1030 | }, 1031 | "node_modules/inflight": { 1032 | "version": "1.0.6", 1033 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1034 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1035 | "dev": true, 1036 | "dependencies": { 1037 | "once": "^1.3.0", 1038 | "wrappy": "1" 1039 | } 1040 | }, 1041 | "node_modules/inherits": { 1042 | "version": "2.0.4", 1043 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1044 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1045 | "dev": true 1046 | }, 1047 | "node_modules/is-binary-path": { 1048 | "version": "2.1.0", 1049 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1050 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1051 | "dev": true, 1052 | "dependencies": { 1053 | "binary-extensions": "^2.0.0" 1054 | }, 1055 | "engines": { 1056 | "node": ">=8" 1057 | } 1058 | }, 1059 | "node_modules/is-core-module": { 1060 | "version": "2.13.0", 1061 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", 1062 | "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", 1063 | "dev": true, 1064 | "dependencies": { 1065 | "has": "^1.0.3" 1066 | }, 1067 | "funding": { 1068 | "url": "https://github.com/sponsors/ljharb" 1069 | } 1070 | }, 1071 | "node_modules/is-extglob": { 1072 | "version": "2.1.1", 1073 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1074 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1075 | "dev": true, 1076 | "engines": { 1077 | "node": ">=0.10.0" 1078 | } 1079 | }, 1080 | "node_modules/is-glob": { 1081 | "version": "4.0.3", 1082 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1083 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1084 | "dev": true, 1085 | "dependencies": { 1086 | "is-extglob": "^2.1.1" 1087 | }, 1088 | "engines": { 1089 | "node": ">=0.10.0" 1090 | } 1091 | }, 1092 | "node_modules/is-number": { 1093 | "version": "7.0.0", 1094 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1095 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1096 | "dev": true, 1097 | "engines": { 1098 | "node": ">=0.12.0" 1099 | } 1100 | }, 1101 | "node_modules/is-reference": { 1102 | "version": "3.0.2", 1103 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", 1104 | "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", 1105 | "dependencies": { 1106 | "@types/estree": "*" 1107 | } 1108 | }, 1109 | "node_modules/jiti": { 1110 | "version": "1.20.0", 1111 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", 1112 | "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", 1113 | "dev": true, 1114 | "bin": { 1115 | "jiti": "bin/jiti.js" 1116 | } 1117 | }, 1118 | "node_modules/kleur": { 1119 | "version": "4.1.5", 1120 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 1121 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 1122 | "dev": true, 1123 | "engines": { 1124 | "node": ">=6" 1125 | } 1126 | }, 1127 | "node_modules/lilconfig": { 1128 | "version": "2.1.0", 1129 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 1130 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 1131 | "dev": true, 1132 | "engines": { 1133 | "node": ">=10" 1134 | } 1135 | }, 1136 | "node_modules/lines-and-columns": { 1137 | "version": "1.2.4", 1138 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1139 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1140 | "dev": true 1141 | }, 1142 | "node_modules/locate-character": { 1143 | "version": "3.0.0", 1144 | "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 1145 | "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" 1146 | }, 1147 | "node_modules/magic-string": { 1148 | "version": "0.30.4", 1149 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", 1150 | "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", 1151 | "dependencies": { 1152 | "@jridgewell/sourcemap-codec": "^1.4.15" 1153 | }, 1154 | "engines": { 1155 | "node": ">=12" 1156 | } 1157 | }, 1158 | "node_modules/marked": { 1159 | "version": "5.1.2", 1160 | "resolved": "https://registry.npmjs.org/marked/-/marked-5.1.2.tgz", 1161 | "integrity": "sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==", 1162 | "bin": { 1163 | "marked": "bin/marked.js" 1164 | }, 1165 | "engines": { 1166 | "node": ">= 16" 1167 | } 1168 | }, 1169 | "node_modules/mdn-data": { 1170 | "version": "2.0.30", 1171 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", 1172 | "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" 1173 | }, 1174 | "node_modules/merge2": { 1175 | "version": "1.4.1", 1176 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1177 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1178 | "dev": true, 1179 | "engines": { 1180 | "node": ">= 8" 1181 | } 1182 | }, 1183 | "node_modules/micromatch": { 1184 | "version": "4.0.5", 1185 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1186 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1187 | "dev": true, 1188 | "dependencies": { 1189 | "braces": "^3.0.2", 1190 | "picomatch": "^2.3.1" 1191 | }, 1192 | "engines": { 1193 | "node": ">=8.6" 1194 | } 1195 | }, 1196 | "node_modules/minimatch": { 1197 | "version": "3.1.2", 1198 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1199 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1200 | "dev": true, 1201 | "dependencies": { 1202 | "brace-expansion": "^1.1.7" 1203 | }, 1204 | "engines": { 1205 | "node": "*" 1206 | } 1207 | }, 1208 | "node_modules/ms": { 1209 | "version": "2.1.2", 1210 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1211 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1212 | "dev": true 1213 | }, 1214 | "node_modules/mz": { 1215 | "version": "2.7.0", 1216 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 1217 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 1218 | "dev": true, 1219 | "dependencies": { 1220 | "any-promise": "^1.0.0", 1221 | "object-assign": "^4.0.1", 1222 | "thenify-all": "^1.0.0" 1223 | } 1224 | }, 1225 | "node_modules/nanoid": { 1226 | "version": "3.3.6", 1227 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 1228 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 1229 | "dev": true, 1230 | "funding": [ 1231 | { 1232 | "type": "github", 1233 | "url": "https://github.com/sponsors/ai" 1234 | } 1235 | ], 1236 | "bin": { 1237 | "nanoid": "bin/nanoid.cjs" 1238 | }, 1239 | "engines": { 1240 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1241 | } 1242 | }, 1243 | "node_modules/node-releases": { 1244 | "version": "2.0.13", 1245 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", 1246 | "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", 1247 | "dev": true 1248 | }, 1249 | "node_modules/normalize-path": { 1250 | "version": "3.0.0", 1251 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1252 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1253 | "dev": true, 1254 | "engines": { 1255 | "node": ">=0.10.0" 1256 | } 1257 | }, 1258 | "node_modules/normalize-range": { 1259 | "version": "0.1.2", 1260 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 1261 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 1262 | "dev": true, 1263 | "engines": { 1264 | "node": ">=0.10.0" 1265 | } 1266 | }, 1267 | "node_modules/object-assign": { 1268 | "version": "4.1.1", 1269 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1270 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1271 | "dev": true, 1272 | "engines": { 1273 | "node": ">=0.10.0" 1274 | } 1275 | }, 1276 | "node_modules/object-hash": { 1277 | "version": "3.0.0", 1278 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 1279 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 1280 | "dev": true, 1281 | "engines": { 1282 | "node": ">= 6" 1283 | } 1284 | }, 1285 | "node_modules/once": { 1286 | "version": "1.4.0", 1287 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1288 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1289 | "dev": true, 1290 | "dependencies": { 1291 | "wrappy": "1" 1292 | } 1293 | }, 1294 | "node_modules/path-is-absolute": { 1295 | "version": "1.0.1", 1296 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1297 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1298 | "dev": true, 1299 | "engines": { 1300 | "node": ">=0.10.0" 1301 | } 1302 | }, 1303 | "node_modules/path-parse": { 1304 | "version": "1.0.7", 1305 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1306 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1307 | "dev": true 1308 | }, 1309 | "node_modules/periscopic": { 1310 | "version": "3.1.0", 1311 | "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", 1312 | "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", 1313 | "dependencies": { 1314 | "@types/estree": "^1.0.0", 1315 | "estree-walker": "^3.0.0", 1316 | "is-reference": "^3.0.0" 1317 | } 1318 | }, 1319 | "node_modules/picocolors": { 1320 | "version": "1.0.0", 1321 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1322 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1323 | "dev": true 1324 | }, 1325 | "node_modules/picomatch": { 1326 | "version": "2.3.1", 1327 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1328 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1329 | "dev": true, 1330 | "engines": { 1331 | "node": ">=8.6" 1332 | }, 1333 | "funding": { 1334 | "url": "https://github.com/sponsors/jonschlinkert" 1335 | } 1336 | }, 1337 | "node_modules/pify": { 1338 | "version": "2.3.0", 1339 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1340 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 1341 | "dev": true, 1342 | "engines": { 1343 | "node": ">=0.10.0" 1344 | } 1345 | }, 1346 | "node_modules/pirates": { 1347 | "version": "4.0.6", 1348 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 1349 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 1350 | "dev": true, 1351 | "engines": { 1352 | "node": ">= 6" 1353 | } 1354 | }, 1355 | "node_modules/postcss": { 1356 | "version": "8.4.31", 1357 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", 1358 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", 1359 | "dev": true, 1360 | "funding": [ 1361 | { 1362 | "type": "opencollective", 1363 | "url": "https://opencollective.com/postcss/" 1364 | }, 1365 | { 1366 | "type": "tidelift", 1367 | "url": "https://tidelift.com/funding/github/npm/postcss" 1368 | }, 1369 | { 1370 | "type": "github", 1371 | "url": "https://github.com/sponsors/ai" 1372 | } 1373 | ], 1374 | "dependencies": { 1375 | "nanoid": "^3.3.6", 1376 | "picocolors": "^1.0.0", 1377 | "source-map-js": "^1.0.2" 1378 | }, 1379 | "engines": { 1380 | "node": "^10 || ^12 || >=14" 1381 | } 1382 | }, 1383 | "node_modules/postcss-import": { 1384 | "version": "15.1.0", 1385 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 1386 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 1387 | "dev": true, 1388 | "dependencies": { 1389 | "postcss-value-parser": "^4.0.0", 1390 | "read-cache": "^1.0.0", 1391 | "resolve": "^1.1.7" 1392 | }, 1393 | "engines": { 1394 | "node": ">=14.0.0" 1395 | }, 1396 | "peerDependencies": { 1397 | "postcss": "^8.0.0" 1398 | } 1399 | }, 1400 | "node_modules/postcss-js": { 1401 | "version": "4.0.1", 1402 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 1403 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 1404 | "dev": true, 1405 | "dependencies": { 1406 | "camelcase-css": "^2.0.1" 1407 | }, 1408 | "engines": { 1409 | "node": "^12 || ^14 || >= 16" 1410 | }, 1411 | "funding": { 1412 | "type": "opencollective", 1413 | "url": "https://opencollective.com/postcss/" 1414 | }, 1415 | "peerDependencies": { 1416 | "postcss": "^8.4.21" 1417 | } 1418 | }, 1419 | "node_modules/postcss-load-config": { 1420 | "version": "4.0.1", 1421 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", 1422 | "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", 1423 | "dev": true, 1424 | "dependencies": { 1425 | "lilconfig": "^2.0.5", 1426 | "yaml": "^2.1.1" 1427 | }, 1428 | "engines": { 1429 | "node": ">= 14" 1430 | }, 1431 | "funding": { 1432 | "type": "opencollective", 1433 | "url": "https://opencollective.com/postcss/" 1434 | }, 1435 | "peerDependencies": { 1436 | "postcss": ">=8.0.9", 1437 | "ts-node": ">=9.0.0" 1438 | }, 1439 | "peerDependenciesMeta": { 1440 | "postcss": { 1441 | "optional": true 1442 | }, 1443 | "ts-node": { 1444 | "optional": true 1445 | } 1446 | } 1447 | }, 1448 | "node_modules/postcss-nested": { 1449 | "version": "6.0.1", 1450 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", 1451 | "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", 1452 | "dev": true, 1453 | "dependencies": { 1454 | "postcss-selector-parser": "^6.0.11" 1455 | }, 1456 | "engines": { 1457 | "node": ">=12.0" 1458 | }, 1459 | "funding": { 1460 | "type": "opencollective", 1461 | "url": "https://opencollective.com/postcss/" 1462 | }, 1463 | "peerDependencies": { 1464 | "postcss": "^8.2.14" 1465 | } 1466 | }, 1467 | "node_modules/postcss-selector-parser": { 1468 | "version": "6.0.13", 1469 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", 1470 | "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", 1471 | "dev": true, 1472 | "dependencies": { 1473 | "cssesc": "^3.0.0", 1474 | "util-deprecate": "^1.0.2" 1475 | }, 1476 | "engines": { 1477 | "node": ">=4" 1478 | } 1479 | }, 1480 | "node_modules/postcss-value-parser": { 1481 | "version": "4.2.0", 1482 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1483 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 1484 | "dev": true 1485 | }, 1486 | "node_modules/queue-microtask": { 1487 | "version": "1.2.3", 1488 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1489 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1490 | "dev": true, 1491 | "funding": [ 1492 | { 1493 | "type": "github", 1494 | "url": "https://github.com/sponsors/feross" 1495 | }, 1496 | { 1497 | "type": "patreon", 1498 | "url": "https://www.patreon.com/feross" 1499 | }, 1500 | { 1501 | "type": "consulting", 1502 | "url": "https://feross.org/support" 1503 | } 1504 | ] 1505 | }, 1506 | "node_modules/read-cache": { 1507 | "version": "1.0.0", 1508 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 1509 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 1510 | "dev": true, 1511 | "dependencies": { 1512 | "pify": "^2.3.0" 1513 | } 1514 | }, 1515 | "node_modules/readdirp": { 1516 | "version": "3.6.0", 1517 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1518 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1519 | "dev": true, 1520 | "dependencies": { 1521 | "picomatch": "^2.2.1" 1522 | }, 1523 | "engines": { 1524 | "node": ">=8.10.0" 1525 | } 1526 | }, 1527 | "node_modules/resolve": { 1528 | "version": "1.22.6", 1529 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", 1530 | "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", 1531 | "dev": true, 1532 | "dependencies": { 1533 | "is-core-module": "^2.13.0", 1534 | "path-parse": "^1.0.7", 1535 | "supports-preserve-symlinks-flag": "^1.0.0" 1536 | }, 1537 | "bin": { 1538 | "resolve": "bin/resolve" 1539 | }, 1540 | "funding": { 1541 | "url": "https://github.com/sponsors/ljharb" 1542 | } 1543 | }, 1544 | "node_modules/reusify": { 1545 | "version": "1.0.4", 1546 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1547 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1548 | "dev": true, 1549 | "engines": { 1550 | "iojs": ">=1.0.0", 1551 | "node": ">=0.10.0" 1552 | } 1553 | }, 1554 | "node_modules/rollup": { 1555 | "version": "3.29.4", 1556 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", 1557 | "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", 1558 | "dev": true, 1559 | "bin": { 1560 | "rollup": "dist/bin/rollup" 1561 | }, 1562 | "engines": { 1563 | "node": ">=14.18.0", 1564 | "npm": ">=8.0.0" 1565 | }, 1566 | "optionalDependencies": { 1567 | "fsevents": "~2.3.2" 1568 | } 1569 | }, 1570 | "node_modules/run-parallel": { 1571 | "version": "1.2.0", 1572 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1573 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1574 | "dev": true, 1575 | "funding": [ 1576 | { 1577 | "type": "github", 1578 | "url": "https://github.com/sponsors/feross" 1579 | }, 1580 | { 1581 | "type": "patreon", 1582 | "url": "https://www.patreon.com/feross" 1583 | }, 1584 | { 1585 | "type": "consulting", 1586 | "url": "https://feross.org/support" 1587 | } 1588 | ], 1589 | "dependencies": { 1590 | "queue-microtask": "^1.2.2" 1591 | } 1592 | }, 1593 | "node_modules/source-map-js": { 1594 | "version": "1.0.2", 1595 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1596 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1597 | "engines": { 1598 | "node": ">=0.10.0" 1599 | } 1600 | }, 1601 | "node_modules/sucrase": { 1602 | "version": "3.34.0", 1603 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", 1604 | "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", 1605 | "dev": true, 1606 | "dependencies": { 1607 | "@jridgewell/gen-mapping": "^0.3.2", 1608 | "commander": "^4.0.0", 1609 | "glob": "7.1.6", 1610 | "lines-and-columns": "^1.1.6", 1611 | "mz": "^2.7.0", 1612 | "pirates": "^4.0.1", 1613 | "ts-interface-checker": "^0.1.9" 1614 | }, 1615 | "bin": { 1616 | "sucrase": "bin/sucrase", 1617 | "sucrase-node": "bin/sucrase-node" 1618 | }, 1619 | "engines": { 1620 | "node": ">=8" 1621 | } 1622 | }, 1623 | "node_modules/supports-preserve-symlinks-flag": { 1624 | "version": "1.0.0", 1625 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1626 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1627 | "dev": true, 1628 | "engines": { 1629 | "node": ">= 0.4" 1630 | }, 1631 | "funding": { 1632 | "url": "https://github.com/sponsors/ljharb" 1633 | } 1634 | }, 1635 | "node_modules/svelte": { 1636 | "version": "4.2.1", 1637 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.1.tgz", 1638 | "integrity": "sha512-LpLqY2Jr7cRxkrTc796/AaaoMLF/1ax7cto8Ot76wrvKQhrPmZ0JgajiWPmg9mTSDqO16SSLiD17r9MsvAPTmw==", 1639 | "dependencies": { 1640 | "@ampproject/remapping": "^2.2.1", 1641 | "@jridgewell/sourcemap-codec": "^1.4.15", 1642 | "@jridgewell/trace-mapping": "^0.3.18", 1643 | "acorn": "^8.9.0", 1644 | "aria-query": "^5.3.0", 1645 | "axobject-query": "^3.2.1", 1646 | "code-red": "^1.0.3", 1647 | "css-tree": "^2.3.1", 1648 | "estree-walker": "^3.0.3", 1649 | "is-reference": "^3.0.1", 1650 | "locate-character": "^3.0.0", 1651 | "magic-string": "^0.30.0", 1652 | "periscopic": "^3.1.0" 1653 | }, 1654 | "engines": { 1655 | "node": ">=16" 1656 | } 1657 | }, 1658 | "node_modules/svelte-hmr": { 1659 | "version": "0.15.3", 1660 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", 1661 | "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", 1662 | "dev": true, 1663 | "engines": { 1664 | "node": "^12.20 || ^14.13.1 || >= 16" 1665 | }, 1666 | "peerDependencies": { 1667 | "svelte": "^3.19.0 || ^4.0.0" 1668 | } 1669 | }, 1670 | "node_modules/svelte-markdown": { 1671 | "version": "0.4.0", 1672 | "resolved": "https://registry.npmjs.org/svelte-markdown/-/svelte-markdown-0.4.0.tgz", 1673 | "integrity": "sha512-d8xYJoPhhiLn/tFrO54V5p22q2+I7It8w3CpTv+O+h99LlgehxK9XwdISVBl2aNcLbLX128Nz/vu7GScWhVZjw==", 1674 | "dependencies": { 1675 | "@types/marked": "^5.0.1", 1676 | "marked": "^5.1.2" 1677 | }, 1678 | "peerDependencies": { 1679 | "svelte": "^4.0.0" 1680 | } 1681 | }, 1682 | "node_modules/tailwindcss": { 1683 | "version": "3.3.3", 1684 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", 1685 | "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", 1686 | "dev": true, 1687 | "dependencies": { 1688 | "@alloc/quick-lru": "^5.2.0", 1689 | "arg": "^5.0.2", 1690 | "chokidar": "^3.5.3", 1691 | "didyoumean": "^1.2.2", 1692 | "dlv": "^1.1.3", 1693 | "fast-glob": "^3.2.12", 1694 | "glob-parent": "^6.0.2", 1695 | "is-glob": "^4.0.3", 1696 | "jiti": "^1.18.2", 1697 | "lilconfig": "^2.1.0", 1698 | "micromatch": "^4.0.5", 1699 | "normalize-path": "^3.0.0", 1700 | "object-hash": "^3.0.0", 1701 | "picocolors": "^1.0.0", 1702 | "postcss": "^8.4.23", 1703 | "postcss-import": "^15.1.0", 1704 | "postcss-js": "^4.0.1", 1705 | "postcss-load-config": "^4.0.1", 1706 | "postcss-nested": "^6.0.1", 1707 | "postcss-selector-parser": "^6.0.11", 1708 | "resolve": "^1.22.2", 1709 | "sucrase": "^3.32.0" 1710 | }, 1711 | "bin": { 1712 | "tailwind": "lib/cli.js", 1713 | "tailwindcss": "lib/cli.js" 1714 | }, 1715 | "engines": { 1716 | "node": ">=14.0.0" 1717 | } 1718 | }, 1719 | "node_modules/thenify": { 1720 | "version": "3.3.1", 1721 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 1722 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 1723 | "dev": true, 1724 | "dependencies": { 1725 | "any-promise": "^1.0.0" 1726 | } 1727 | }, 1728 | "node_modules/thenify-all": { 1729 | "version": "1.6.0", 1730 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 1731 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 1732 | "dev": true, 1733 | "dependencies": { 1734 | "thenify": ">= 3.1.0 < 4" 1735 | }, 1736 | "engines": { 1737 | "node": ">=0.8" 1738 | } 1739 | }, 1740 | "node_modules/to-regex-range": { 1741 | "version": "5.0.1", 1742 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1743 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1744 | "dev": true, 1745 | "dependencies": { 1746 | "is-number": "^7.0.0" 1747 | }, 1748 | "engines": { 1749 | "node": ">=8.0" 1750 | } 1751 | }, 1752 | "node_modules/ts-interface-checker": { 1753 | "version": "0.1.13", 1754 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 1755 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", 1756 | "dev": true 1757 | }, 1758 | "node_modules/update-browserslist-db": { 1759 | "version": "1.0.13", 1760 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", 1761 | "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", 1762 | "dev": true, 1763 | "funding": [ 1764 | { 1765 | "type": "opencollective", 1766 | "url": "https://opencollective.com/browserslist" 1767 | }, 1768 | { 1769 | "type": "tidelift", 1770 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1771 | }, 1772 | { 1773 | "type": "github", 1774 | "url": "https://github.com/sponsors/ai" 1775 | } 1776 | ], 1777 | "dependencies": { 1778 | "escalade": "^3.1.1", 1779 | "picocolors": "^1.0.0" 1780 | }, 1781 | "bin": { 1782 | "update-browserslist-db": "cli.js" 1783 | }, 1784 | "peerDependencies": { 1785 | "browserslist": ">= 4.21.0" 1786 | } 1787 | }, 1788 | "node_modules/util-deprecate": { 1789 | "version": "1.0.2", 1790 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1791 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1792 | "dev": true 1793 | }, 1794 | "node_modules/vite": { 1795 | "version": "4.5.1", 1796 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.1.tgz", 1797 | "integrity": "sha512-AXXFaAJ8yebyqzoNB9fu2pHoo/nWX+xZlaRwoeYUxEqBO+Zj4msE5G+BhGBll9lYEKv9Hfks52PAF2X7qDYXQA==", 1798 | "dev": true, 1799 | "dependencies": { 1800 | "esbuild": "^0.18.10", 1801 | "postcss": "^8.4.27", 1802 | "rollup": "^3.27.1" 1803 | }, 1804 | "bin": { 1805 | "vite": "bin/vite.js" 1806 | }, 1807 | "engines": { 1808 | "node": "^14.18.0 || >=16.0.0" 1809 | }, 1810 | "funding": { 1811 | "url": "https://github.com/vitejs/vite?sponsor=1" 1812 | }, 1813 | "optionalDependencies": { 1814 | "fsevents": "~2.3.2" 1815 | }, 1816 | "peerDependencies": { 1817 | "@types/node": ">= 14", 1818 | "less": "*", 1819 | "lightningcss": "^1.21.0", 1820 | "sass": "*", 1821 | "stylus": "*", 1822 | "sugarss": "*", 1823 | "terser": "^5.4.0" 1824 | }, 1825 | "peerDependenciesMeta": { 1826 | "@types/node": { 1827 | "optional": true 1828 | }, 1829 | "less": { 1830 | "optional": true 1831 | }, 1832 | "lightningcss": { 1833 | "optional": true 1834 | }, 1835 | "sass": { 1836 | "optional": true 1837 | }, 1838 | "stylus": { 1839 | "optional": true 1840 | }, 1841 | "sugarss": { 1842 | "optional": true 1843 | }, 1844 | "terser": { 1845 | "optional": true 1846 | } 1847 | } 1848 | }, 1849 | "node_modules/vitefu": { 1850 | "version": "0.2.4", 1851 | "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", 1852 | "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", 1853 | "dev": true, 1854 | "peerDependencies": { 1855 | "vite": "^3.0.0 || ^4.0.0" 1856 | }, 1857 | "peerDependenciesMeta": { 1858 | "vite": { 1859 | "optional": true 1860 | } 1861 | } 1862 | }, 1863 | "node_modules/wrappy": { 1864 | "version": "1.0.2", 1865 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1866 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1867 | "dev": true 1868 | }, 1869 | "node_modules/yaml": { 1870 | "version": "2.3.2", 1871 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", 1872 | "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", 1873 | "dev": true, 1874 | "engines": { 1875 | "node": ">= 14" 1876 | } 1877 | } 1878 | } 1879 | } 1880 | -------------------------------------------------------------------------------- /front-end/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bot-ui", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "devDependencies": { 12 | "@sveltejs/vite-plugin-svelte": "^2.4.2", 13 | "autoprefixer": "^10.4.16", 14 | "postcss": "^8.4.31", 15 | "svelte": "^4.0.5", 16 | "tailwindcss": "^3.3.3", 17 | "vite": "^4.4.12" 18 | }, 19 | "dependencies": { 20 | "svelte-markdown": "^0.4.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /front-end/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /front-end/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front-end/src/App.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 50 | 51 |
52 |
53 | Logo 54 |

Graph Based AI-Powered Search Engine

55 |
56 | 57 |
58 |
59 |
60 | {#each $chatStore.data as message (message.id)} 61 | {#if message.from === "me"} 62 |
63 |
Answering for: {message.text}
64 |
65 | {/if} 66 | {#if message.from === "bot"} 67 |
68 | 69 |
70 | {/if} 71 | {/each} 72 |
73 |
74 | 75 |
76 |
77 | 85 | 90 |
91 | 92 |
93 |
94 |
95 | 96 | {#if generationModalOpen} 97 | (generationModalOpen = false)} /> 98 | {/if} 99 | 100 | -------------------------------------------------------------------------------- /front-end/src/app.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | body { 6 | margin: 0; 7 | min-width: 320px; 8 | height: 100dvh; 9 | } 10 | 11 | #app { 12 | height: 100%; 13 | } 14 | 15 | pre { 16 | line-height: 1; 17 | background-color: rgb(241, 241, 241); 18 | padding: 4px 8px 8px; 19 | border: 1px solid #ccc; 20 | overflow-x: auto; 21 | margin: 0 4px; 22 | border-radius: 2px; 23 | } 24 | 25 | ol { 26 | padding: 1em; 27 | list-style: decimal; 28 | } 29 | -------------------------------------------------------------------------------- /front-end/src/assets/images/bot.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aniket-work/AI_Powered_Dev_Search_Engine/038d68f85bdbbcb267c4b0b066194367ba613623/front-end/src/assets/images/bot.jpeg -------------------------------------------------------------------------------- /front-end/src/assets/images/me.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aniket-work/AI_Powered_Dev_Search_Engine/038d68f85bdbbcb267c4b0b066194367ba613623/front-end/src/assets/images/me.jpeg -------------------------------------------------------------------------------- /front-end/src/assets/images/search_icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aniket-work/AI_Powered_Dev_Search_Engine/038d68f85bdbbcb267c4b0b066194367ba613623/front-end/src/assets/images/search_icon.jpg -------------------------------------------------------------------------------- /front-end/src/assets/svelte.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /front-end/src/lib/External.svelte: -------------------------------------------------------------------------------- 1 |
2 | 8 | 9 | 16 | 17 | 19 |
20 | 21 | 29 | -------------------------------------------------------------------------------- /front-end/src/lib/MdLink.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | {text} 8 | 9 | 15 | -------------------------------------------------------------------------------- /front-end/src/lib/Modal.svelte: -------------------------------------------------------------------------------- 1 | 20 | 21 | 25 |
26 |
27 |

Create new internal ticket

28 |
29 | 33 |
34 |
35 |