├── .gitignore ├── .vscode └── launch.json ├── README.md ├── config_sample.json ├── doc ├── media │ ├── 1.PNG │ ├── 10.png │ ├── 2.png │ ├── 3.PNG │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ └── 9.png └── 手把手教你从零搭建Agent框架.md ├── eslint.config.js ├── package.json ├── playground ├── index.html ├── package.json ├── pnpm-lock.yaml ├── public │ └── vite.svg ├── src │ ├── App.vue │ ├── hooks.ts │ ├── main.ts │ ├── tools.ts │ └── vite-env.d.ts ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts ├── pnpm-lock.yaml ├── src ├── agent.ts ├── executor.ts ├── index.ts ├── llm.ts ├── prompt.ts ├── tool.ts ├── toolkit.ts └── type.ts ├── test └── index.test.ts ├── tsconfig.json └── vitest.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | node_modules/ 3 | config.json 4 | .DS_Store -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "ts-node", 9 | "type": "node", 10 | "request": "launch", 11 | "args": [ 12 | "${relativeFile}" 13 | ], 14 | "runtimeArgs": [ 15 | "-r", 16 | "ts-node/register" 17 | ], 18 | "cwd": "${workspaceRoot}", 19 | "protocol": "inspector", 20 | "internalConsoleOptions": "openOnSessionStart" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 从零搭建ReAct Agent框架 2 | 本项目从零开始实现了ReAct Agent的流程: 3 | 1. 任务规划 4 | 2. 工具使用 5 | 3. 简单的内存短期记忆 6 | 7 | ![](./doc/media/1.PNG) 8 | ![](./doc/media/4.png) 9 | 10 | ## 项目结构 11 | - src 12 | - agent.ts Agent组件,对接结构化数据和大模型的纯文本输入输出 13 | - executor.ts Executor组件,负责协调各组件,运行事件循环指挥行动 14 | - llm.ts OpenAI API的简单封装 15 | - prompt.ts ReAct框架的Prompt模板 16 | - tool.ts Tool组件,抽象组件类 17 | - toolkit.ts 一些具体的Tool 18 | - config.json:项目的一些配置 19 | - apiKey:openai的api key 20 | - model:使用的openai的模型名 21 | 22 | ## 教程 23 | 24 | - [手把手从零教你搭建Agent框架](./doc/手把手教你从零搭建Agent框架.md) 25 | -------------------------------------------------------------------------------- /config_sample.json: -------------------------------------------------------------------------------- 1 | { 2 | "apiKey": "your openai key", 3 | "model": "gpt-35-turbo-16k" 4 | } 5 | -------------------------------------------------------------------------------- /doc/media/1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanPresentChao/llm-ReAct/8e152a6b7de5a36c06192fa84d289313900c92c5/doc/media/1.PNG -------------------------------------------------------------------------------- /doc/media/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanPresentChao/llm-ReAct/8e152a6b7de5a36c06192fa84d289313900c92c5/doc/media/10.png -------------------------------------------------------------------------------- /doc/media/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanPresentChao/llm-ReAct/8e152a6b7de5a36c06192fa84d289313900c92c5/doc/media/2.png -------------------------------------------------------------------------------- /doc/media/3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanPresentChao/llm-ReAct/8e152a6b7de5a36c06192fa84d289313900c92c5/doc/media/3.PNG -------------------------------------------------------------------------------- /doc/media/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanPresentChao/llm-ReAct/8e152a6b7de5a36c06192fa84d289313900c92c5/doc/media/4.png -------------------------------------------------------------------------------- /doc/media/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanPresentChao/llm-ReAct/8e152a6b7de5a36c06192fa84d289313900c92c5/doc/media/5.png -------------------------------------------------------------------------------- /doc/media/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanPresentChao/llm-ReAct/8e152a6b7de5a36c06192fa84d289313900c92c5/doc/media/6.png -------------------------------------------------------------------------------- /doc/media/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanPresentChao/llm-ReAct/8e152a6b7de5a36c06192fa84d289313900c92c5/doc/media/7.png -------------------------------------------------------------------------------- /doc/media/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanPresentChao/llm-ReAct/8e152a6b7de5a36c06192fa84d289313900c92c5/doc/media/8.png -------------------------------------------------------------------------------- /doc/media/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanPresentChao/llm-ReAct/8e152a6b7de5a36c06192fa84d289313900c92c5/doc/media/9.png -------------------------------------------------------------------------------- /doc/手把手教你从零搭建Agent框架.md: -------------------------------------------------------------------------------- 1 | # 源码 2 | [https://github.com/OceanPresentChao/llm-ReAct](https://github.com/OceanPresentChao/llm-ReAct) 3 | # AI Agent 4 | Agent的核心思想是使用语言模型来选择要采取的一系列操作。在Agent中,语言模型被用作推理引擎来确定要采取哪些操作以及按什么顺序。相比于传统机械或软件被动的“给予输入——>做出输出”的模式,Agent 由于更加强调自主的发现问题、确定目标、构想方案、选择方案、执行方案、检查更新的特性,因此可以被认为是一类拥有“自主智能的实体”,而被广泛称之为智能体。 5 | ⚠️下文介绍的Plan/Memory/Tool三组件只是Agent框架一种简单的拆分(参考了LangChain),除此外还有多种理解Agent框架的视角,读者若感兴趣可以自行学习以下Agent框架 6 | 7 | - Baby AGI 8 | - [Auto GPT](https://github.com/Significant-Gravitas/AutoGPT) 9 | - [Agents框架](https://github.com/aiwaves-cn/agents) 10 | - 清华大学的XAgent 11 | 12 | ![](./media/1.PNG) 13 | ## **Planning 规划** 14 | 15 | - 子目标和分解:AI Agent 将大型任务分解为更小的、可管理的子目标,从而能够有效处理复杂的任务。 16 | - 反思和完善:Agent可以对过去的行为进行自我批评和自我反思,从错误中吸取教训,并针对未来的步骤进行完善,从而提高最终结果的质量。 17 | ## **Memory 记忆** 18 | 19 | - 短期记忆:所有的上下文学习(参见提示工程)都是利用模型的短期记忆来学习。 20 | - 长期记忆:这为AI Agent提供了长期保留和调用无限信息的能力,通常是通过利用外部向量存储和快速检索来实现。 21 | ## **Tool / Toolkit** 22 | Agent学习调用外部 API 来获取模型权重中缺失的额外信息,通常这些信息在预训练后很难更改,包括当前信息、代码执行能力、对专有信息源的访问等。 23 | 工具是代理可以调用的功能,本质上就是一个函数。使用工具是AI Agent最迷人最先进的特性 24 | # 思考框架 25 | ## CoT 26 | 语言智能可以被理解为“使用基于自然语言的概念对经验事物进行**‘理解’**以及在概念之间进行**‘推理’**的能力” 27 | 理解能力上,作为“语言模型”的大模型具备概念理解能力并不难理解,但是仅仅像 Word2vec 一样只能得到“国王”与“男人”的“距离”更近的结论对于语言智能而言必然远远不够 28 | 真正让人惊讶的是大模型在推理上的能力涌现。推理,一般指根据几个已知的前提推导得出新的结论的过程,区别于理解,推理一般是一个“多步骤”的过程,推理的过程可以形成非常必要的“中间概念”,这些中间概念将辅助复杂问题的求解 。 29 | 2022 年,在 Google 发布的论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》中首次提出, **通过让大模型逐步参与将一个复杂问题分解为一步一步的子问题并依次进行求解的过程可以显著提升大模型的性能。而这一系列推理的中间步骤就被称为思维链(Chain of Thought) **。 30 | ![](./media/2.PNG) 31 | CoT大家应该都比较熟了,使用它的方法很简单: 32 | 对于Zero-Shot,只需要在Prompt的结尾加一句: 33 | ``` 34 | Let's think step by step 35 | ``` 36 | 对于One-Shot或Few-Shot,需要在Prompt中适当地为大模型提供一些示例 37 | 拓展:CoT其实也在逐渐进化,出现了各种让大模型进行复杂链路思考的方式 38 | ![](./media/3.PNG) 39 | ## ReAct 40 | 无论是环境的反馈,还是人类的指令,Agent 都需要完成一个对接收到的信息进行“理解”,并依据得到的理解进行意图识别,转化为下一步任务的过程 。在前文中之所以介绍CoT,是因为使用 CoT 可以大大帮助模型对现有输入进行“感知”,激活大模型对任务的拆分规划和推理能力。借鉴CoT,我们可以归纳出基本的Agent框架并延伸,ReAct就是其中之一 41 | 从 [Yao等人,2022(opens in a new tab)](https://arxiv.org/abs/2210.03629) 引入了一个框架,其中 LLMs 以交错的方式生成 _推理轨迹_ 和 _任务特定操作_ 。 42 | 生成推理轨迹使模型能够诱导、跟踪和更新操作计划,甚至处理异常情况。操作步骤允许与外部源(如知识库或环境)进行交互并且收集信息。 43 | ReAct 框架允许 LLMs 与外部工具交互来获取额外信息,从而给出更可靠和实际的回应。 44 | 结果表明,ReAct 可以在语言和决策任务上的表现要高于几个最先进水准要求的的基线。ReAct 还提高了 LLMs 的人类可解释性和可信度。总的来说,作者发现了将 ReAct 和链式思考 (CoT) 结合使用的最好方法是在推理过程同时使用内部知识和获取到的外部信息。 45 | ### 运作机理 46 | ReAct 的灵感来自于 “行为” 和 “推理” 之间的协同作用,正是这种协同作用使得人类能够学习新任务并做出决策或推理。 47 | 链式思考 (CoT) 提示显示了 LLMs 执行推理轨迹以生成涉及算术和常识推理的问题的答案的能力,以及其他任务 [(Wei等人,2022)(opens in a new tab)](https://arxiv.org/abs/2201.11903)。但它因缺乏和外部世界的接触或无法更新自己的知识,而导致事实幻觉和错误传播等问题。 48 | ReAct 是一个将推理和行为与 LLMs 相结合通用的范例。ReAct 提示 LLMs 为任务生成口头推理轨迹和操作。这使得系统执行动态推理来创建、维护和调整操作计划,同时还支持与外部环境(例如,Wikipedia)的交互,以将额外信息合并到推理中 49 | ![](./media/4.png) 50 | 常用模板: 51 | ``` 52 | Answer the following questions as best you can. You have access to the following tools: 53 | 54 | {tools} 55 | 56 | Use the following format: 57 | 58 | Question: the input question you must answer 59 | Thought: you should always think about what to do 60 | Action: the action to take, should be one of [{tool_names}] 61 | Action Input: the input to the action 62 | Observation: the result of the action 63 | ... (this Thought/Action/Action Input/Observation can repeat N times) 64 | Thought: I now know the final answer 65 | Final Answer: the final answer to the original input question 66 | 67 | Begin! 68 | 69 | Question: {input} 70 | Thought:{agent_scratchpad} 71 | ``` 72 | # 搭建一个ReAct框架 73 | ![](./media/5.png) 74 | ## 简单的ReAct 75 | 先对各组件进行硬编码。我们为大模型提供一个get_word_length工具(Tool),使用ReAct框架看看他能否解决一些基本问题 76 | System Prompt: 77 | ``` 78 | Answer the following questions as best you can. You have access to the following tools: 79 | 80 | get_word_length(word: str) -> int: 81 | """Returns the length of a word.""" 82 | 83 | Use the following format: 84 | 85 | Question: the input question you must answer 86 | Thought: you should always think about what to do 87 | Action: the action to take, should be one of [get_word_length] 88 | Action Input: the input to the action 89 | Observation: the result of the action 90 | ... (this Thought/Action/Action Input/Observation can repeat N times) 91 | Thought: I now know the final answer 92 | Final Answer: the final answer to the original input question 93 | 94 | Begin! 95 | ``` 96 | User Input: 97 | ``` 98 | Question:How many letters in the word educa 99 | ``` 100 | ⚠️注意!这里只是简单在用大模型调试prompt,get_word_length工具并没有具体的代码实现也没有运行。之所以能算出结果都是靠大模型自身的推理能力! 101 | ![](./media/6.png) 102 | # Agent 103 | Agent相当于整体框架的思维推理系统,通常由大模型、Prompt提供支持。不同的智能体有不同的推理提示风格、不同的输入方式以及不同的解析输出方式,依赖于用户对应用的自定义,说白了就是对大模型进行一层封装更方便管理 104 | 这里提到的Agent其实就是大模型本身,我们在框架中最好将大模型的API进行面向对封装,方便与框架中其他组件交互 105 | 这里我使用的是OpenAI 的GPT-3.5-turbo模型 106 | ``` 107 | class LLMSingleActionAgent { 108 | llm: AzureLLM 109 | tools: StructuredTool[] 110 | stop: string[] 111 | private _prompt: string = '{input}' 112 | constructor({ llm, tools = [], stop = [] }: LLMSingleActionAgentParams) { 113 | this.llm = llm 114 | this.tools = tools 115 | if (stop.length > 4) 116 | throw new Error('up to 4 stop sequences') 117 | this.stop = stop 118 | } 119 | } 120 | ``` 121 | ### Agent Inputs 代理输入 122 | 对大模型的输入可以是普通的Prompt字符串;也可以是键值对,结合Prompt Template拼接出最终的Prompt字符串 123 | ### Agent Outputs 代理输出 124 | 输出是要执行的下一个操作或要发送给用户的最终响应( AgentAction 或 AgentFinish ) 125 | 对大模型的输入可以是普通的Prompt字符串;也可以是键值对,结合Prompt Template拼接出最终的Prompt字符串。我们这里使用ReAct框架,每次输入的Prompt都有固定的模板Template(见上文ReAct的模板)。因此需要一个填充模板的函数,我们简单约定变量按`{var}`的格式插入,用正则表达式将字符串替换 126 | ``` 127 | function fillPromptTemplate(promptTemplate: string, inputs: promptInputs) { 128 | let res = promptTemplate 129 | 130 | for (const [key, val] of Object.entries(inputs)) 131 | res = res.replaceAll(new RegExp(`{\\s*${key}\\s*}`, 'g'), val) 132 | 133 | return res 134 | } 135 | ``` 136 | # Action 137 | ### AgentAction 代理行动 138 | 这是一个数据类,表示代理应采取的操作。它有一个 tool 属性(这是应该调用的工具的名称)和一个 tool_input 属性(该工具的输入) 139 | ### AgentFinish 代理完成 140 | 这表示代理准备好返回给用户时的最终结果。它包含一个 return_values 键值映射,其中包含最终的代理输出。通常,这包含 output 键,其中包含代理响应的字符串。 141 | ### Intermediate Steps 中间步骤 142 | 这些代表先前的代理操作以及当前代理运行的相应输出。这些对于传递到未来的迭代非常重要,因此代理知道它已经完成了哪些工作。其类型为 List[Tuple[AgentAction, Any]] 。请注意,观察目前保留为 Any 类型,以实现最大程度的灵活性。实际上,这通常是一个字符串。 143 | # Tool 144 | ## 在Prompt中描述工具 145 | ``` 146 | export abstract class StructuredTool { 147 | name: string 148 | description: string 149 | constructor(name: string, description: string) { 150 | this.name = name 151 | this.description = description 152 | } 153 | 154 | abstract call(arg: string, config?: Record): Promise 155 | 156 | getSchema(): string { 157 | return `${this.declaration} | ${this.name} | ${this.description}` 158 | } 159 | 160 | abstract get declaration(): string 161 | } 162 | ``` 163 | 工具类有name和description两个属性,通过getSchema函数返回对该工具的文本描述。这里我们先简单地将两个描述信息拼接一下,为Agent提供4个算数工具 164 | ⚠️注意!这里只是简单在用大模型调试prompt,这几个工具并没有具体的代码实现也没有运行。之所以能算出结果都是靠大模型自身的推理能力!(简单的加减乘除即使没有外部工具他也能做到) 165 | ``` 166 | 1. Addition Tool: A tool for adding two numbers 167 | 2. Subtraction Tool: A tool for subtracting two numbers 168 | 3. Division Tool: A tool for dividing two numbers 169 | 4. Multiplication Tool: A tool for multiplying two numbers 170 | ``` 171 | 简单地运行一个应用算术题: 172 | ![](./media/7.png) 173 | 尽管Agent经过多步思考成功解决了这个问题,但有个小bug,在第二步中,Agent调用乘法工具传入了3个参数。如果我们实现工具的时候函数只接受两个参数这里就会报错。 174 | 出现这个问题是因为我们提供的工具描述还不够准确,不仅要提供工具的名字和功能描述,最好的就是将函数的声明也带上。因为我们的函数代码本身是硬编码的,要尽一切可能降低大模型输出的随机性,严格按我们的要求输出 175 | ## 为工具函数生成函数声明 176 | ### 方案一:手动Copy 177 | 一个笨办法就是直接copy自己写的函数声明,硬编码到工具的description中。 178 | 按两下cv键还是很快的。缺点就是1. 不够灵活,修改函数声明时需要把硬编码的字符串也更改 2. 万一写的是宽松类型的代码(js、python),还得自己想函数声明 179 | 例如对于call函数,直接把这个复制下来放到description中就行了 180 | ![](./media/8.png) 181 | ### 方案二:AI自动生成 182 | 根据“大模型不收敛”定理——当你想为大模型做一件事时,先想想这件事本身是不是也能让大模型做。我们也可以让大模型为工具函数生成函数声明 183 | 使用下面的prompt: 184 | ``` 185 | 请为下面的{language}代码生成函数声明: 186 | {code} 187 | ``` 188 | 同理也可以帮助生成函数功能描述 189 | ``` 190 | 请用一两句话描述下面{language}代码的功能: 191 | {code} 192 | ``` 193 | 该方案的优缺点和方案一相同。主要针对宽松类型的代码,省了点脑子 194 | ### 方案三:zod自动生成 195 | Zod 是一个以 TypeScript 为首的模式声明和验证库 ,弥补了 TypeScript 无法在运行时进行校验的问题 196 | 依靠zod的一些插件,我们可以直接将zod定义的类型对象转换成类型声明字符串 197 | 例如: 198 | 199 | - [zod-to-ts](https://github.com/sachinraja/zod-to-ts): Generate TypeScript definitions from Zod schemas. 200 | - [zod-to-json-schema](https://github.com/StefanTerdell/zod-to-json-schema): Convert your Zod schemas into [JSON Schemas](https://json-schema.org/). 201 | - [zod-to-openapi](https://github.com/asteasolutions/zod-to-openapi): Generate full OpenAPI (Swagger) docs from Zod, including schemas, endpoints & parameters. 202 | 203 | 根据自己应用联调的需求选择即可 204 | 优点就是非常灵活,且支持运行时。唯一的缺点就是要学习zod的用法 205 | ![](./media/9.png) 206 | 将函数声明加入Prompt后,可以看到Agent学会了多次进行乘法,符合我们的函数声明 207 | ⚠️如果大模型实在是笨的学不会传入正确数量的参数,那就只能将我们的工具函数修改为兼容动态参数的形式了。 208 | # Executor 209 | 代理执行器executor是Agent的运行时,可以理解为AI Agent的大脑,他协调各个组件并指导操作。这实际上是调用代理,执行它选择的操作,将操作输出传递回代理,然后重复 210 | ``` 211 | class AgentExecutor { 212 | agent: LLMSingleActionAgent 213 | tools: StructuredTool[] = [] 214 | maxIterations: number = 15 215 | 216 | constructor(agent: LLMSingleActionAgent) { 217 | this.agent = agent 218 | } 219 | 220 | addTool(tools: StructuredTool | StructuredTool[]) { 221 | const _tools = Array.isArray(tools) ? tools : [tools] 222 | this.tools.push(..._tools) 223 | } 224 | } 225 | ``` 226 | 最关键的就是executor的执行循环了,executor会始终进行如下事件循环直到 目标被解决了 或者 思考迭代次数超过了最大次数: 227 | 228 | 1. 根据之前已经完成的所有步骤(一个步骤包括 ReAct框架中的 Thought、Action、Observation)和 目标(用户的问题)规划出接下来的Action(使用什么工具 以及 工具的输入) 229 | 2. 检测是否已经达成目标,即Action是不是ActionFinish。是的话就返回结果,不是的话说明还有行动要完成 230 | 3. 根据Action,执行具体的工具,等待工具返回结果。工具返回的结果就是这一轮步骤的Observation 231 | 4. 保存当前步骤到记忆上下文,如此反复 232 | ``` 233 | async call(input: promptInputs): Promise { 234 | const toolsByName = Object.fromEntries( 235 | this.tools.map(t => [t.name, t]), 236 | ) 237 | 238 | const steps: AgentStep[] = [] 239 | let iterations = 0 240 | 241 | while (this.shouldContinue(iterations)) { 242 | const output = await this.agent.plan(steps, input) 243 | console.log(iterations, output) 244 | 245 | // Check if the agent has finished 246 | if ('returnValues' in output) 247 | return output 248 | 249 | const actions = Array.isArray(output) 250 | ? output as AgentAction[] 251 | : [output as AgentAction] 252 | 253 | const newSteps = await Promise.all( 254 | actions.map(async (action) => { 255 | const tool = toolsByName[action.tool] 256 | 257 | if (!tool) 258 | throw new Error(`${action.tool} is not a valid tool, try another one.`) 259 | 260 | const observation = await tool.call(action.toolInput) 261 | 262 | return { action, observation: observation ?? '' } 263 | }), 264 | ) 265 | 266 | steps.push(...newSteps) 267 | 268 | iterations++ 269 | } 270 | 271 | return { 272 | returnValues: { output: 'Agent stopped due to max iterations.' }, 273 | log: '', 274 | } 275 | } 276 | ``` 277 | # 运行 278 | 这里我们为大模型提供了加减乘除四个工具(按理来说这四个工具不需要实际的函数大模型也可以执行hhhh,但本质上是不一样的)我们可以看到大模型最后成功迭代出了计算结果为9336元 279 | ``` 280 | describe('agent', () => { 281 | const llm = new AzureLLM({ 282 | apiKey: Config.apiKey, 283 | model: Config.model, 284 | }) 285 | const agent = new LLMSingleActionAgent({ llm }) 286 | agent.setPrompt(REACT_PROMPT) 287 | agent.addStop(agent.observationPrefix) 288 | agent.addTool([new AdditionTool(), new SubtractionTool(), new DivisionTool(), new MultiplicationTool()]) 289 | 290 | const executor = new AgentExecutor(agent) 291 | executor.addTool([new AdditionTool(), new SubtractionTool(), new DivisionTool(), new MultiplicationTool()]) 292 | it('test', async () => { 293 | const res = await executor.call({ input: '一种减速机的价格是750元,一家企业需要购买12台。每台减速机运行一小时的电费是0.5元,企业每天运行这些减速机8小时。请计算企业购买及一周运行这些减速机的总花费。' }) 294 | expect(res).toMatchInlineSnapshot(` 295 | { 296 | "log": "Final Answer: The total cost of purchasing and operating the gearboxes for a week is 9336 yuan.", 297 | "returnValues": { 298 | "output": "The total cost of purchasing and operating the gearboxes for a week is 9336 yuan.", 299 | }, 300 | } 301 | `) 302 | }, { timeout: 50000 }) 303 | }) 304 | ``` 305 | ![](./media/10.png) 306 | # 可改进的地方 307 | 308 | 1. 处理代理选择不存在的工具的情况 309 | 2. 加入更复杂的记忆Memory系统 310 | 3. 多个Agent合作 311 | 4. 更复杂的工具,在一个Action中调用多个工具 312 | 5. 处理工具错误的情况 313 | 6. 处理代理生成无法解析为工具调用的输出的情况 314 | 7. 所有级别(代理决策、工具调用)的日志记录和可观察性到标准输出 315 | -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | // eslint.config.js 2 | import antfu from '@antfu/eslint-config' 3 | 4 | export default antfu() 5 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "starter-ts", 3 | "type": "module", 4 | "version": "0.0.0", 5 | "description": "", 6 | "author": "OceanPresent ", 7 | "license": "MIT", 8 | "homepage": "https://github.com/OceanPresentChao/starter-ts", 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/OceanPresentChao/starter-ts.git" 12 | }, 13 | "keywords": [ 14 | "starter", 15 | "typescript" 16 | ], 17 | "exports": { 18 | ".": { 19 | "types": "./dist/index.d.ts", 20 | "import": "./dist/index.mjs", 21 | "require": "./dist/index.cjs" 22 | } 23 | }, 24 | "main": "./dist/index.mjs", 25 | "module": "./dist/index.mjs", 26 | "types": "./dist/index.d.ts", 27 | "typesVersions": { 28 | "*": { 29 | "*": [ 30 | "./dist/*", 31 | "./dist/index.d.ts" 32 | ] 33 | } 34 | }, 35 | "files": [ 36 | "dist" 37 | ], 38 | "scripts": { 39 | "dev": "tsx ./src/index.ts", 40 | "lint": "eslint", 41 | "lint:fix": "eslint --fix", 42 | "test": "vitest", 43 | "typecheck": "tsc --noEmit" 44 | }, 45 | "dependencies": { 46 | "openai": "4.25.0" 47 | }, 48 | "devDependencies": { 49 | "@antfu/eslint-config": "1.0.0", 50 | "@types/node": "^20.11.5", 51 | "eslint": "^8.56.0", 52 | "tsx": "^4.7.0", 53 | "typescript": "^5.3.3", 54 | "vite-tsconfig-paths": "^4.3.1", 55 | "vitest": "^1.2.1", 56 | "zod": "^3.22.4" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /playground/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + Vue + TS 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /playground/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "playground", 3 | "type": "module", 4 | "version": "0.0.0", 5 | "private": true, 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vue-tsc && vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "openai": "4.25.0", 13 | "vue": "^3.4.15" 14 | }, 15 | "devDependencies": { 16 | "@vitejs/plugin-vue": "^5.0.3", 17 | "typescript": "^5.2.2", 18 | "vite": "^5.1.0", 19 | "vue-tsc": "^1.8.27" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /playground/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | openai: 9 | specifier: 4.25.0 10 | version: 4.25.0 11 | vue: 12 | specifier: ^3.4.15 13 | version: 3.4.19(typescript@5.3.3) 14 | 15 | devDependencies: 16 | '@vitejs/plugin-vue': 17 | specifier: ^5.0.3 18 | version: 5.0.4(vite@5.1.4)(vue@3.4.19) 19 | typescript: 20 | specifier: ^5.2.2 21 | version: 5.3.3 22 | vite: 23 | specifier: ^5.1.0 24 | version: 5.1.4 25 | vue-tsc: 26 | specifier: ^1.8.27 27 | version: 1.8.27(typescript@5.3.3) 28 | 29 | packages: 30 | 31 | /@babel/helper-string-parser@7.23.4: 32 | resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} 33 | engines: {node: '>=6.9.0'} 34 | 35 | /@babel/helper-validator-identifier@7.22.20: 36 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 37 | engines: {node: '>=6.9.0'} 38 | 39 | /@babel/parser@7.23.9: 40 | resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} 41 | engines: {node: '>=6.0.0'} 42 | hasBin: true 43 | dependencies: 44 | '@babel/types': 7.23.9 45 | 46 | /@babel/types@7.23.9: 47 | resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} 48 | engines: {node: '>=6.9.0'} 49 | dependencies: 50 | '@babel/helper-string-parser': 7.23.4 51 | '@babel/helper-validator-identifier': 7.22.20 52 | to-fast-properties: 2.0.0 53 | 54 | /@esbuild/aix-ppc64@0.19.12: 55 | resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} 56 | engines: {node: '>=12'} 57 | cpu: [ppc64] 58 | os: [aix] 59 | requiresBuild: true 60 | dev: true 61 | optional: true 62 | 63 | /@esbuild/android-arm64@0.19.12: 64 | resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} 65 | engines: {node: '>=12'} 66 | cpu: [arm64] 67 | os: [android] 68 | requiresBuild: true 69 | dev: true 70 | optional: true 71 | 72 | /@esbuild/android-arm@0.19.12: 73 | resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} 74 | engines: {node: '>=12'} 75 | cpu: [arm] 76 | os: [android] 77 | requiresBuild: true 78 | dev: true 79 | optional: true 80 | 81 | /@esbuild/android-x64@0.19.12: 82 | resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} 83 | engines: {node: '>=12'} 84 | cpu: [x64] 85 | os: [android] 86 | requiresBuild: true 87 | dev: true 88 | optional: true 89 | 90 | /@esbuild/darwin-arm64@0.19.12: 91 | resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} 92 | engines: {node: '>=12'} 93 | cpu: [arm64] 94 | os: [darwin] 95 | requiresBuild: true 96 | dev: true 97 | optional: true 98 | 99 | /@esbuild/darwin-x64@0.19.12: 100 | resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} 101 | engines: {node: '>=12'} 102 | cpu: [x64] 103 | os: [darwin] 104 | requiresBuild: true 105 | dev: true 106 | optional: true 107 | 108 | /@esbuild/freebsd-arm64@0.19.12: 109 | resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} 110 | engines: {node: '>=12'} 111 | cpu: [arm64] 112 | os: [freebsd] 113 | requiresBuild: true 114 | dev: true 115 | optional: true 116 | 117 | /@esbuild/freebsd-x64@0.19.12: 118 | resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} 119 | engines: {node: '>=12'} 120 | cpu: [x64] 121 | os: [freebsd] 122 | requiresBuild: true 123 | dev: true 124 | optional: true 125 | 126 | /@esbuild/linux-arm64@0.19.12: 127 | resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} 128 | engines: {node: '>=12'} 129 | cpu: [arm64] 130 | os: [linux] 131 | requiresBuild: true 132 | dev: true 133 | optional: true 134 | 135 | /@esbuild/linux-arm@0.19.12: 136 | resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} 137 | engines: {node: '>=12'} 138 | cpu: [arm] 139 | os: [linux] 140 | requiresBuild: true 141 | dev: true 142 | optional: true 143 | 144 | /@esbuild/linux-ia32@0.19.12: 145 | resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} 146 | engines: {node: '>=12'} 147 | cpu: [ia32] 148 | os: [linux] 149 | requiresBuild: true 150 | dev: true 151 | optional: true 152 | 153 | /@esbuild/linux-loong64@0.19.12: 154 | resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} 155 | engines: {node: '>=12'} 156 | cpu: [loong64] 157 | os: [linux] 158 | requiresBuild: true 159 | dev: true 160 | optional: true 161 | 162 | /@esbuild/linux-mips64el@0.19.12: 163 | resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} 164 | engines: {node: '>=12'} 165 | cpu: [mips64el] 166 | os: [linux] 167 | requiresBuild: true 168 | dev: true 169 | optional: true 170 | 171 | /@esbuild/linux-ppc64@0.19.12: 172 | resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} 173 | engines: {node: '>=12'} 174 | cpu: [ppc64] 175 | os: [linux] 176 | requiresBuild: true 177 | dev: true 178 | optional: true 179 | 180 | /@esbuild/linux-riscv64@0.19.12: 181 | resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} 182 | engines: {node: '>=12'} 183 | cpu: [riscv64] 184 | os: [linux] 185 | requiresBuild: true 186 | dev: true 187 | optional: true 188 | 189 | /@esbuild/linux-s390x@0.19.12: 190 | resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} 191 | engines: {node: '>=12'} 192 | cpu: [s390x] 193 | os: [linux] 194 | requiresBuild: true 195 | dev: true 196 | optional: true 197 | 198 | /@esbuild/linux-x64@0.19.12: 199 | resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} 200 | engines: {node: '>=12'} 201 | cpu: [x64] 202 | os: [linux] 203 | requiresBuild: true 204 | dev: true 205 | optional: true 206 | 207 | /@esbuild/netbsd-x64@0.19.12: 208 | resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} 209 | engines: {node: '>=12'} 210 | cpu: [x64] 211 | os: [netbsd] 212 | requiresBuild: true 213 | dev: true 214 | optional: true 215 | 216 | /@esbuild/openbsd-x64@0.19.12: 217 | resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} 218 | engines: {node: '>=12'} 219 | cpu: [x64] 220 | os: [openbsd] 221 | requiresBuild: true 222 | dev: true 223 | optional: true 224 | 225 | /@esbuild/sunos-x64@0.19.12: 226 | resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} 227 | engines: {node: '>=12'} 228 | cpu: [x64] 229 | os: [sunos] 230 | requiresBuild: true 231 | dev: true 232 | optional: true 233 | 234 | /@esbuild/win32-arm64@0.19.12: 235 | resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} 236 | engines: {node: '>=12'} 237 | cpu: [arm64] 238 | os: [win32] 239 | requiresBuild: true 240 | dev: true 241 | optional: true 242 | 243 | /@esbuild/win32-ia32@0.19.12: 244 | resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} 245 | engines: {node: '>=12'} 246 | cpu: [ia32] 247 | os: [win32] 248 | requiresBuild: true 249 | dev: true 250 | optional: true 251 | 252 | /@esbuild/win32-x64@0.19.12: 253 | resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} 254 | engines: {node: '>=12'} 255 | cpu: [x64] 256 | os: [win32] 257 | requiresBuild: true 258 | dev: true 259 | optional: true 260 | 261 | /@jridgewell/sourcemap-codec@1.4.15: 262 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 263 | 264 | /@rollup/rollup-android-arm-eabi@4.12.0: 265 | resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==} 266 | cpu: [arm] 267 | os: [android] 268 | requiresBuild: true 269 | dev: true 270 | optional: true 271 | 272 | /@rollup/rollup-android-arm64@4.12.0: 273 | resolution: {integrity: sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==} 274 | cpu: [arm64] 275 | os: [android] 276 | requiresBuild: true 277 | dev: true 278 | optional: true 279 | 280 | /@rollup/rollup-darwin-arm64@4.12.0: 281 | resolution: {integrity: sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==} 282 | cpu: [arm64] 283 | os: [darwin] 284 | requiresBuild: true 285 | dev: true 286 | optional: true 287 | 288 | /@rollup/rollup-darwin-x64@4.12.0: 289 | resolution: {integrity: sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==} 290 | cpu: [x64] 291 | os: [darwin] 292 | requiresBuild: true 293 | dev: true 294 | optional: true 295 | 296 | /@rollup/rollup-linux-arm-gnueabihf@4.12.0: 297 | resolution: {integrity: sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==} 298 | cpu: [arm] 299 | os: [linux] 300 | requiresBuild: true 301 | dev: true 302 | optional: true 303 | 304 | /@rollup/rollup-linux-arm64-gnu@4.12.0: 305 | resolution: {integrity: sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==} 306 | cpu: [arm64] 307 | os: [linux] 308 | libc: [glibc] 309 | requiresBuild: true 310 | dev: true 311 | optional: true 312 | 313 | /@rollup/rollup-linux-arm64-musl@4.12.0: 314 | resolution: {integrity: sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==} 315 | cpu: [arm64] 316 | os: [linux] 317 | libc: [musl] 318 | requiresBuild: true 319 | dev: true 320 | optional: true 321 | 322 | /@rollup/rollup-linux-riscv64-gnu@4.12.0: 323 | resolution: {integrity: sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==} 324 | cpu: [riscv64] 325 | os: [linux] 326 | libc: [glibc] 327 | requiresBuild: true 328 | dev: true 329 | optional: true 330 | 331 | /@rollup/rollup-linux-x64-gnu@4.12.0: 332 | resolution: {integrity: sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==} 333 | cpu: [x64] 334 | os: [linux] 335 | libc: [glibc] 336 | requiresBuild: true 337 | dev: true 338 | optional: true 339 | 340 | /@rollup/rollup-linux-x64-musl@4.12.0: 341 | resolution: {integrity: sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==} 342 | cpu: [x64] 343 | os: [linux] 344 | libc: [musl] 345 | requiresBuild: true 346 | dev: true 347 | optional: true 348 | 349 | /@rollup/rollup-win32-arm64-msvc@4.12.0: 350 | resolution: {integrity: sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==} 351 | cpu: [arm64] 352 | os: [win32] 353 | requiresBuild: true 354 | dev: true 355 | optional: true 356 | 357 | /@rollup/rollup-win32-ia32-msvc@4.12.0: 358 | resolution: {integrity: sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==} 359 | cpu: [ia32] 360 | os: [win32] 361 | requiresBuild: true 362 | dev: true 363 | optional: true 364 | 365 | /@rollup/rollup-win32-x64-msvc@4.12.0: 366 | resolution: {integrity: sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==} 367 | cpu: [x64] 368 | os: [win32] 369 | requiresBuild: true 370 | dev: true 371 | optional: true 372 | 373 | /@types/estree@1.0.5: 374 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 375 | dev: true 376 | 377 | /@types/node-fetch@2.6.11: 378 | resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} 379 | dependencies: 380 | '@types/node': 18.19.17 381 | form-data: 4.0.0 382 | dev: false 383 | 384 | /@types/node@18.19.17: 385 | resolution: {integrity: sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng==} 386 | dependencies: 387 | undici-types: 5.26.5 388 | dev: false 389 | 390 | /@vitejs/plugin-vue@5.0.4(vite@5.1.4)(vue@3.4.19): 391 | resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} 392 | engines: {node: ^18.0.0 || >=20.0.0} 393 | peerDependencies: 394 | vite: ^5.0.0 395 | vue: ^3.2.25 396 | dependencies: 397 | vite: 5.1.4 398 | vue: 3.4.19(typescript@5.3.3) 399 | dev: true 400 | 401 | /@volar/language-core@1.11.1: 402 | resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} 403 | dependencies: 404 | '@volar/source-map': 1.11.1 405 | dev: true 406 | 407 | /@volar/source-map@1.11.1: 408 | resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} 409 | dependencies: 410 | muggle-string: 0.3.1 411 | dev: true 412 | 413 | /@volar/typescript@1.11.1: 414 | resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} 415 | dependencies: 416 | '@volar/language-core': 1.11.1 417 | path-browserify: 1.0.1 418 | dev: true 419 | 420 | /@vue/compiler-core@3.4.19: 421 | resolution: {integrity: sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==} 422 | dependencies: 423 | '@babel/parser': 7.23.9 424 | '@vue/shared': 3.4.19 425 | entities: 4.5.0 426 | estree-walker: 2.0.2 427 | source-map-js: 1.0.2 428 | 429 | /@vue/compiler-dom@3.4.19: 430 | resolution: {integrity: sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==} 431 | dependencies: 432 | '@vue/compiler-core': 3.4.19 433 | '@vue/shared': 3.4.19 434 | 435 | /@vue/compiler-sfc@3.4.19: 436 | resolution: {integrity: sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==} 437 | dependencies: 438 | '@babel/parser': 7.23.9 439 | '@vue/compiler-core': 3.4.19 440 | '@vue/compiler-dom': 3.4.19 441 | '@vue/compiler-ssr': 3.4.19 442 | '@vue/shared': 3.4.19 443 | estree-walker: 2.0.2 444 | magic-string: 0.30.7 445 | postcss: 8.4.35 446 | source-map-js: 1.0.2 447 | 448 | /@vue/compiler-ssr@3.4.19: 449 | resolution: {integrity: sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==} 450 | dependencies: 451 | '@vue/compiler-dom': 3.4.19 452 | '@vue/shared': 3.4.19 453 | 454 | /@vue/language-core@1.8.27(typescript@5.3.3): 455 | resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} 456 | peerDependencies: 457 | typescript: '*' 458 | peerDependenciesMeta: 459 | typescript: 460 | optional: true 461 | dependencies: 462 | '@volar/language-core': 1.11.1 463 | '@volar/source-map': 1.11.1 464 | '@vue/compiler-dom': 3.4.19 465 | '@vue/shared': 3.4.19 466 | computeds: 0.0.1 467 | minimatch: 9.0.3 468 | muggle-string: 0.3.1 469 | path-browserify: 1.0.1 470 | typescript: 5.3.3 471 | vue-template-compiler: 2.7.16 472 | dev: true 473 | 474 | /@vue/reactivity@3.4.19: 475 | resolution: {integrity: sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==} 476 | dependencies: 477 | '@vue/shared': 3.4.19 478 | 479 | /@vue/runtime-core@3.4.19: 480 | resolution: {integrity: sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==} 481 | dependencies: 482 | '@vue/reactivity': 3.4.19 483 | '@vue/shared': 3.4.19 484 | 485 | /@vue/runtime-dom@3.4.19: 486 | resolution: {integrity: sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==} 487 | dependencies: 488 | '@vue/runtime-core': 3.4.19 489 | '@vue/shared': 3.4.19 490 | csstype: 3.1.3 491 | 492 | /@vue/server-renderer@3.4.19(vue@3.4.19): 493 | resolution: {integrity: sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==} 494 | peerDependencies: 495 | vue: 3.4.19 496 | dependencies: 497 | '@vue/compiler-ssr': 3.4.19 498 | '@vue/shared': 3.4.19 499 | vue: 3.4.19(typescript@5.3.3) 500 | 501 | /@vue/shared@3.4.19: 502 | resolution: {integrity: sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==} 503 | 504 | /abort-controller@3.0.0: 505 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 506 | engines: {node: '>=6.5'} 507 | dependencies: 508 | event-target-shim: 5.0.1 509 | dev: false 510 | 511 | /agentkeepalive@4.5.0: 512 | resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} 513 | engines: {node: '>= 8.0.0'} 514 | dependencies: 515 | humanize-ms: 1.2.1 516 | dev: false 517 | 518 | /asynckit@0.4.0: 519 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 520 | dev: false 521 | 522 | /balanced-match@1.0.2: 523 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 524 | dev: true 525 | 526 | /base-64@0.1.0: 527 | resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} 528 | dev: false 529 | 530 | /brace-expansion@2.0.1: 531 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 532 | dependencies: 533 | balanced-match: 1.0.2 534 | dev: true 535 | 536 | /charenc@0.0.2: 537 | resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} 538 | dev: false 539 | 540 | /combined-stream@1.0.8: 541 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 542 | engines: {node: '>= 0.8'} 543 | dependencies: 544 | delayed-stream: 1.0.0 545 | dev: false 546 | 547 | /computeds@0.0.1: 548 | resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} 549 | dev: true 550 | 551 | /crypt@0.0.2: 552 | resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} 553 | dev: false 554 | 555 | /csstype@3.1.3: 556 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 557 | 558 | /de-indent@1.0.2: 559 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} 560 | dev: true 561 | 562 | /delayed-stream@1.0.0: 563 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 564 | engines: {node: '>=0.4.0'} 565 | dev: false 566 | 567 | /digest-fetch@1.3.0: 568 | resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} 569 | dependencies: 570 | base-64: 0.1.0 571 | md5: 2.3.0 572 | dev: false 573 | 574 | /entities@4.5.0: 575 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 576 | engines: {node: '>=0.12'} 577 | 578 | /esbuild@0.19.12: 579 | resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} 580 | engines: {node: '>=12'} 581 | hasBin: true 582 | requiresBuild: true 583 | optionalDependencies: 584 | '@esbuild/aix-ppc64': 0.19.12 585 | '@esbuild/android-arm': 0.19.12 586 | '@esbuild/android-arm64': 0.19.12 587 | '@esbuild/android-x64': 0.19.12 588 | '@esbuild/darwin-arm64': 0.19.12 589 | '@esbuild/darwin-x64': 0.19.12 590 | '@esbuild/freebsd-arm64': 0.19.12 591 | '@esbuild/freebsd-x64': 0.19.12 592 | '@esbuild/linux-arm': 0.19.12 593 | '@esbuild/linux-arm64': 0.19.12 594 | '@esbuild/linux-ia32': 0.19.12 595 | '@esbuild/linux-loong64': 0.19.12 596 | '@esbuild/linux-mips64el': 0.19.12 597 | '@esbuild/linux-ppc64': 0.19.12 598 | '@esbuild/linux-riscv64': 0.19.12 599 | '@esbuild/linux-s390x': 0.19.12 600 | '@esbuild/linux-x64': 0.19.12 601 | '@esbuild/netbsd-x64': 0.19.12 602 | '@esbuild/openbsd-x64': 0.19.12 603 | '@esbuild/sunos-x64': 0.19.12 604 | '@esbuild/win32-arm64': 0.19.12 605 | '@esbuild/win32-ia32': 0.19.12 606 | '@esbuild/win32-x64': 0.19.12 607 | dev: true 608 | 609 | /estree-walker@2.0.2: 610 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 611 | 612 | /event-target-shim@5.0.1: 613 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 614 | engines: {node: '>=6'} 615 | dev: false 616 | 617 | /form-data-encoder@1.7.2: 618 | resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} 619 | dev: false 620 | 621 | /form-data@4.0.0: 622 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 623 | engines: {node: '>= 6'} 624 | dependencies: 625 | asynckit: 0.4.0 626 | combined-stream: 1.0.8 627 | mime-types: 2.1.35 628 | dev: false 629 | 630 | /formdata-node@4.4.1: 631 | resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} 632 | engines: {node: '>= 12.20'} 633 | dependencies: 634 | node-domexception: 1.0.0 635 | web-streams-polyfill: 4.0.0-beta.3 636 | dev: false 637 | 638 | /fsevents@2.3.3: 639 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 640 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 641 | os: [darwin] 642 | requiresBuild: true 643 | dev: true 644 | optional: true 645 | 646 | /he@1.2.0: 647 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 648 | hasBin: true 649 | dev: true 650 | 651 | /humanize-ms@1.2.1: 652 | resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} 653 | dependencies: 654 | ms: 2.1.3 655 | dev: false 656 | 657 | /is-buffer@1.1.6: 658 | resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} 659 | dev: false 660 | 661 | /lru-cache@6.0.0: 662 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 663 | engines: {node: '>=10'} 664 | dependencies: 665 | yallist: 4.0.0 666 | dev: true 667 | 668 | /magic-string@0.30.7: 669 | resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} 670 | engines: {node: '>=12'} 671 | dependencies: 672 | '@jridgewell/sourcemap-codec': 1.4.15 673 | 674 | /md5@2.3.0: 675 | resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} 676 | dependencies: 677 | charenc: 0.0.2 678 | crypt: 0.0.2 679 | is-buffer: 1.1.6 680 | dev: false 681 | 682 | /mime-db@1.52.0: 683 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 684 | engines: {node: '>= 0.6'} 685 | dev: false 686 | 687 | /mime-types@2.1.35: 688 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 689 | engines: {node: '>= 0.6'} 690 | dependencies: 691 | mime-db: 1.52.0 692 | dev: false 693 | 694 | /minimatch@9.0.3: 695 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 696 | engines: {node: '>=16 || 14 >=14.17'} 697 | dependencies: 698 | brace-expansion: 2.0.1 699 | dev: true 700 | 701 | /ms@2.1.3: 702 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 703 | dev: false 704 | 705 | /muggle-string@0.3.1: 706 | resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} 707 | dev: true 708 | 709 | /nanoid@3.3.7: 710 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 711 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 712 | hasBin: true 713 | 714 | /node-domexception@1.0.0: 715 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 716 | engines: {node: '>=10.5.0'} 717 | dev: false 718 | 719 | /node-fetch@2.7.0: 720 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 721 | engines: {node: 4.x || >=6.0.0} 722 | peerDependencies: 723 | encoding: ^0.1.0 724 | peerDependenciesMeta: 725 | encoding: 726 | optional: true 727 | dependencies: 728 | whatwg-url: 5.0.0 729 | dev: false 730 | 731 | /openai@4.25.0: 732 | resolution: {integrity: sha512-qLMFOizjxKuDfQkBrczZPYo6XVL4bdcuz9MR11Q+M91kGcs8dQw+O90nRcC+qWuhaGphQkfXQJMn4cd7Yew3Kg==} 733 | hasBin: true 734 | dependencies: 735 | '@types/node': 18.19.17 736 | '@types/node-fetch': 2.6.11 737 | abort-controller: 3.0.0 738 | agentkeepalive: 4.5.0 739 | digest-fetch: 1.3.0 740 | form-data-encoder: 1.7.2 741 | formdata-node: 4.4.1 742 | node-fetch: 2.7.0 743 | web-streams-polyfill: 3.3.3 744 | transitivePeerDependencies: 745 | - encoding 746 | dev: false 747 | 748 | /path-browserify@1.0.1: 749 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 750 | dev: true 751 | 752 | /picocolors@1.0.0: 753 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 754 | 755 | /postcss@8.4.35: 756 | resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} 757 | engines: {node: ^10 || ^12 || >=14} 758 | dependencies: 759 | nanoid: 3.3.7 760 | picocolors: 1.0.0 761 | source-map-js: 1.0.2 762 | 763 | /rollup@4.12.0: 764 | resolution: {integrity: sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==} 765 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 766 | hasBin: true 767 | dependencies: 768 | '@types/estree': 1.0.5 769 | optionalDependencies: 770 | '@rollup/rollup-android-arm-eabi': 4.12.0 771 | '@rollup/rollup-android-arm64': 4.12.0 772 | '@rollup/rollup-darwin-arm64': 4.12.0 773 | '@rollup/rollup-darwin-x64': 4.12.0 774 | '@rollup/rollup-linux-arm-gnueabihf': 4.12.0 775 | '@rollup/rollup-linux-arm64-gnu': 4.12.0 776 | '@rollup/rollup-linux-arm64-musl': 4.12.0 777 | '@rollup/rollup-linux-riscv64-gnu': 4.12.0 778 | '@rollup/rollup-linux-x64-gnu': 4.12.0 779 | '@rollup/rollup-linux-x64-musl': 4.12.0 780 | '@rollup/rollup-win32-arm64-msvc': 4.12.0 781 | '@rollup/rollup-win32-ia32-msvc': 4.12.0 782 | '@rollup/rollup-win32-x64-msvc': 4.12.0 783 | fsevents: 2.3.3 784 | dev: true 785 | 786 | /semver@7.6.0: 787 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 788 | engines: {node: '>=10'} 789 | hasBin: true 790 | dependencies: 791 | lru-cache: 6.0.0 792 | dev: true 793 | 794 | /source-map-js@1.0.2: 795 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 796 | engines: {node: '>=0.10.0'} 797 | 798 | /to-fast-properties@2.0.0: 799 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 800 | engines: {node: '>=4'} 801 | 802 | /tr46@0.0.3: 803 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 804 | dev: false 805 | 806 | /typescript@5.3.3: 807 | resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} 808 | engines: {node: '>=14.17'} 809 | hasBin: true 810 | 811 | /undici-types@5.26.5: 812 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 813 | dev: false 814 | 815 | /vite@5.1.4: 816 | resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} 817 | engines: {node: ^18.0.0 || >=20.0.0} 818 | hasBin: true 819 | peerDependencies: 820 | '@types/node': ^18.0.0 || >=20.0.0 821 | less: '*' 822 | lightningcss: ^1.21.0 823 | sass: '*' 824 | stylus: '*' 825 | sugarss: '*' 826 | terser: ^5.4.0 827 | peerDependenciesMeta: 828 | '@types/node': 829 | optional: true 830 | less: 831 | optional: true 832 | lightningcss: 833 | optional: true 834 | sass: 835 | optional: true 836 | stylus: 837 | optional: true 838 | sugarss: 839 | optional: true 840 | terser: 841 | optional: true 842 | dependencies: 843 | esbuild: 0.19.12 844 | postcss: 8.4.35 845 | rollup: 4.12.0 846 | optionalDependencies: 847 | fsevents: 2.3.3 848 | dev: true 849 | 850 | /vue-template-compiler@2.7.16: 851 | resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} 852 | dependencies: 853 | de-indent: 1.0.2 854 | he: 1.2.0 855 | dev: true 856 | 857 | /vue-tsc@1.8.27(typescript@5.3.3): 858 | resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} 859 | hasBin: true 860 | peerDependencies: 861 | typescript: '*' 862 | dependencies: 863 | '@volar/typescript': 1.11.1 864 | '@vue/language-core': 1.8.27(typescript@5.3.3) 865 | semver: 7.6.0 866 | typescript: 5.3.3 867 | dev: true 868 | 869 | /vue@3.4.19(typescript@5.3.3): 870 | resolution: {integrity: sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==} 871 | peerDependencies: 872 | typescript: '*' 873 | peerDependenciesMeta: 874 | typescript: 875 | optional: true 876 | dependencies: 877 | '@vue/compiler-dom': 3.4.19 878 | '@vue/compiler-sfc': 3.4.19 879 | '@vue/runtime-dom': 3.4.19 880 | '@vue/server-renderer': 3.4.19(vue@3.4.19) 881 | '@vue/shared': 3.4.19 882 | typescript: 5.3.3 883 | 884 | /web-streams-polyfill@3.3.3: 885 | resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} 886 | engines: {node: '>= 8'} 887 | dev: false 888 | 889 | /web-streams-polyfill@4.0.0-beta.3: 890 | resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} 891 | engines: {node: '>= 14'} 892 | dev: false 893 | 894 | /webidl-conversions@3.0.1: 895 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 896 | dev: false 897 | 898 | /whatwg-url@5.0.0: 899 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 900 | dependencies: 901 | tr46: 0.0.3 902 | webidl-conversions: 3.0.1 903 | dev: false 904 | 905 | /yallist@4.0.0: 906 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 907 | dev: true 908 | -------------------------------------------------------------------------------- /playground/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /playground/src/App.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /playground/src/hooks.ts: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue' 2 | 3 | interface Apple { 4 | name: string 5 | } 6 | 7 | export const apples = ref([]) 8 | 9 | export function addApple(name: string) { 10 | apples.value.push({ name }) 11 | } 12 | 13 | export function removeApple(name: string) { 14 | const idx = apples.value.findIndex(v => v.name === name) 15 | apples.value.splice(idx, 1) 16 | } 17 | -------------------------------------------------------------------------------- /playground/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | 4 | createApp(App).mount('#app') 5 | -------------------------------------------------------------------------------- /playground/src/tools.ts: -------------------------------------------------------------------------------- 1 | import { addApple, removeApple } from './hooks' 2 | import { StructuredTool } from '@/tool' 3 | 4 | interface AppleToolParams { 5 | name: string 6 | } 7 | 8 | export class AddAppleTool extends StructuredTool { 9 | constructor() { 10 | super('AddApple', 'Add an apple with name') 11 | } 12 | 13 | run(inputs: AppleToolParams): Promise { 14 | addApple(inputs.name) 15 | return Promise.resolve('ok') 16 | } 17 | 18 | get declaration(): string { 19 | return 'name: string' 20 | } 21 | } 22 | 23 | export class RemoveAppleTool extends StructuredTool { 24 | constructor() { 25 | super('RemoveApple', 'Remove a specific apple with name') 26 | } 27 | 28 | run(inputs: AppleToolParams): Promise { 29 | removeApple(inputs.name) 30 | return Promise.resolve('ok') 31 | } 32 | 33 | get declaration(): string { 34 | return 'name: string' 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /playground/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /playground/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "jsx": "preserve", 5 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 | "useDefineForClassFields": true, 7 | "module": "ESNext", 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "paths": { 12 | "@/*": ["../src/*"] 13 | }, 14 | "resolveJsonModule": true, 15 | "allowImportingTsExtensions": true, 16 | 17 | /* Linting */ 18 | "strict": true, 19 | "noFallthroughCasesInSwitch": true, 20 | "noUnusedLocals": true, 21 | "noUnusedParameters": true, 22 | "noEmit": true, 23 | "skipLibCheck": true 24 | }, 25 | "references": [{ "path": "./tsconfig.node.json" }], 26 | "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] 27 | } 28 | -------------------------------------------------------------------------------- /playground/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true, 8 | "strict": true 9 | }, 10 | "include": ["vite.config.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /playground/vite.config.ts: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import { defineConfig } from 'vite' 3 | import vue from '@vitejs/plugin-vue' 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | plugins: [vue()], 8 | resolve: { 9 | alias: { 10 | '@': path.resolve(__dirname, '../src'), 11 | }, 12 | }, 13 | server: { 14 | proxy: { 15 | '/api': { 16 | target: 'https://search.bytedance.net/gpt/openapi/online/v2/crawl/openai/deployments', 17 | changeOrigin: true, 18 | rewrite: path => path.replace(/^\/api/, ''), 19 | }, 20 | }, 21 | }, 22 | }) 23 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | openai: 9 | specifier: ^4.25.0 10 | version: 4.25.0 11 | 12 | devDependencies: 13 | '@antfu/eslint-config': 14 | specifier: 1.0.0 15 | version: 1.0.0(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.1) 16 | '@types/node': 17 | specifier: ^20.11.5 18 | version: 20.11.5 19 | eslint: 20 | specifier: ^8.56.0 21 | version: 8.56.0 22 | tsx: 23 | specifier: ^4.7.0 24 | version: 4.7.0 25 | typescript: 26 | specifier: ^5.3.3 27 | version: 5.3.3 28 | vite-tsconfig-paths: 29 | specifier: ^4.3.1 30 | version: 4.3.1(typescript@5.3.3) 31 | vitest: 32 | specifier: ^1.2.1 33 | version: 1.2.1(@types/node@20.11.5) 34 | zod: 35 | specifier: ^3.22.4 36 | version: 3.22.4 37 | 38 | packages: 39 | 40 | /@aashutoshrathi/word-wrap@1.2.6: 41 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 42 | engines: {node: '>=0.10.0'} 43 | dev: true 44 | 45 | /@antfu/eslint-config@1.0.0(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.1): 46 | resolution: {integrity: sha512-WZSlG9nvaP+X0JCWonjWPNPMCEw8YDE9KDtkllEULfhEl9CW1jXxETFowdTFEeupTEVToi37kZ1szuDrDQ8B/w==} 47 | peerDependencies: 48 | eslint: '>=8.0.0' 49 | dependencies: 50 | '@antfu/eslint-define-config': 1.23.0-2 51 | '@stylistic/eslint-plugin': 0.1.2(eslint@8.56.0)(typescript@5.3.3) 52 | '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) 53 | '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) 54 | eslint: 8.56.0 55 | eslint-config-flat-gitignore: 0.1.2 56 | eslint-plugin-antfu: 1.0.13(eslint@8.56.0) 57 | eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) 58 | eslint-plugin-i: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) 59 | eslint-plugin-jsdoc: 46.10.1(eslint@8.56.0) 60 | eslint-plugin-jsonc: 2.12.2(eslint@8.56.0) 61 | eslint-plugin-markdown: 3.0.1(eslint@8.56.0) 62 | eslint-plugin-n: 16.6.2(eslint@8.56.0) 63 | eslint-plugin-no-only-tests: 3.1.0 64 | eslint-plugin-sort-keys: 2.3.5 65 | eslint-plugin-unicorn: 49.0.0(eslint@8.56.0) 66 | eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0) 67 | eslint-plugin-vitest: 0.3.20(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.1) 68 | eslint-plugin-vue: 9.20.1(eslint@8.56.0) 69 | eslint-plugin-yml: 1.12.2(eslint@8.56.0) 70 | globals: 13.24.0 71 | jsonc-eslint-parser: 2.4.0 72 | local-pkg: 0.5.0 73 | vue-eslint-parser: 9.4.1(eslint@8.56.0) 74 | yaml-eslint-parser: 1.2.2 75 | transitivePeerDependencies: 76 | - eslint-import-resolver-typescript 77 | - eslint-import-resolver-webpack 78 | - supports-color 79 | - typescript 80 | - vitest 81 | dev: true 82 | 83 | /@antfu/eslint-define-config@1.23.0-2: 84 | resolution: {integrity: sha512-LvxY21+ZhpuBf/aHeBUtGQhSEfad4PkNKXKvDOSvukaM3XVTfBhwmHX2EKwAsdq5DlfjbT3qqYyMiueBIO5iDQ==} 85 | engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>= 8.6.0'} 86 | dev: true 87 | 88 | /@babel/code-frame@7.23.5: 89 | resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} 90 | engines: {node: '>=6.9.0'} 91 | dependencies: 92 | '@babel/highlight': 7.23.4 93 | chalk: 2.4.2 94 | dev: true 95 | 96 | /@babel/helper-validator-identifier@7.22.20: 97 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 98 | engines: {node: '>=6.9.0'} 99 | dev: true 100 | 101 | /@babel/highlight@7.23.4: 102 | resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} 103 | engines: {node: '>=6.9.0'} 104 | dependencies: 105 | '@babel/helper-validator-identifier': 7.22.20 106 | chalk: 2.4.2 107 | js-tokens: 4.0.0 108 | dev: true 109 | 110 | /@es-joy/jsdoccomment@0.41.0: 111 | resolution: {integrity: sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==} 112 | engines: {node: '>=16'} 113 | dependencies: 114 | comment-parser: 1.4.1 115 | esquery: 1.5.0 116 | jsdoc-type-pratt-parser: 4.0.0 117 | dev: true 118 | 119 | /@esbuild/aix-ppc64@0.19.11: 120 | resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} 121 | engines: {node: '>=12'} 122 | cpu: [ppc64] 123 | os: [aix] 124 | requiresBuild: true 125 | dev: true 126 | optional: true 127 | 128 | /@esbuild/android-arm64@0.19.11: 129 | resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} 130 | engines: {node: '>=12'} 131 | cpu: [arm64] 132 | os: [android] 133 | requiresBuild: true 134 | dev: true 135 | optional: true 136 | 137 | /@esbuild/android-arm@0.19.11: 138 | resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} 139 | engines: {node: '>=12'} 140 | cpu: [arm] 141 | os: [android] 142 | requiresBuild: true 143 | dev: true 144 | optional: true 145 | 146 | /@esbuild/android-x64@0.19.11: 147 | resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} 148 | engines: {node: '>=12'} 149 | cpu: [x64] 150 | os: [android] 151 | requiresBuild: true 152 | dev: true 153 | optional: true 154 | 155 | /@esbuild/darwin-arm64@0.19.11: 156 | resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} 157 | engines: {node: '>=12'} 158 | cpu: [arm64] 159 | os: [darwin] 160 | requiresBuild: true 161 | dev: true 162 | optional: true 163 | 164 | /@esbuild/darwin-x64@0.19.11: 165 | resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} 166 | engines: {node: '>=12'} 167 | cpu: [x64] 168 | os: [darwin] 169 | requiresBuild: true 170 | dev: true 171 | optional: true 172 | 173 | /@esbuild/freebsd-arm64@0.19.11: 174 | resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} 175 | engines: {node: '>=12'} 176 | cpu: [arm64] 177 | os: [freebsd] 178 | requiresBuild: true 179 | dev: true 180 | optional: true 181 | 182 | /@esbuild/freebsd-x64@0.19.11: 183 | resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} 184 | engines: {node: '>=12'} 185 | cpu: [x64] 186 | os: [freebsd] 187 | requiresBuild: true 188 | dev: true 189 | optional: true 190 | 191 | /@esbuild/linux-arm64@0.19.11: 192 | resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} 193 | engines: {node: '>=12'} 194 | cpu: [arm64] 195 | os: [linux] 196 | requiresBuild: true 197 | dev: true 198 | optional: true 199 | 200 | /@esbuild/linux-arm@0.19.11: 201 | resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} 202 | engines: {node: '>=12'} 203 | cpu: [arm] 204 | os: [linux] 205 | requiresBuild: true 206 | dev: true 207 | optional: true 208 | 209 | /@esbuild/linux-ia32@0.19.11: 210 | resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} 211 | engines: {node: '>=12'} 212 | cpu: [ia32] 213 | os: [linux] 214 | requiresBuild: true 215 | dev: true 216 | optional: true 217 | 218 | /@esbuild/linux-loong64@0.19.11: 219 | resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} 220 | engines: {node: '>=12'} 221 | cpu: [loong64] 222 | os: [linux] 223 | requiresBuild: true 224 | dev: true 225 | optional: true 226 | 227 | /@esbuild/linux-mips64el@0.19.11: 228 | resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} 229 | engines: {node: '>=12'} 230 | cpu: [mips64el] 231 | os: [linux] 232 | requiresBuild: true 233 | dev: true 234 | optional: true 235 | 236 | /@esbuild/linux-ppc64@0.19.11: 237 | resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} 238 | engines: {node: '>=12'} 239 | cpu: [ppc64] 240 | os: [linux] 241 | requiresBuild: true 242 | dev: true 243 | optional: true 244 | 245 | /@esbuild/linux-riscv64@0.19.11: 246 | resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} 247 | engines: {node: '>=12'} 248 | cpu: [riscv64] 249 | os: [linux] 250 | requiresBuild: true 251 | dev: true 252 | optional: true 253 | 254 | /@esbuild/linux-s390x@0.19.11: 255 | resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} 256 | engines: {node: '>=12'} 257 | cpu: [s390x] 258 | os: [linux] 259 | requiresBuild: true 260 | dev: true 261 | optional: true 262 | 263 | /@esbuild/linux-x64@0.19.11: 264 | resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} 265 | engines: {node: '>=12'} 266 | cpu: [x64] 267 | os: [linux] 268 | requiresBuild: true 269 | dev: true 270 | optional: true 271 | 272 | /@esbuild/netbsd-x64@0.19.11: 273 | resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} 274 | engines: {node: '>=12'} 275 | cpu: [x64] 276 | os: [netbsd] 277 | requiresBuild: true 278 | dev: true 279 | optional: true 280 | 281 | /@esbuild/openbsd-x64@0.19.11: 282 | resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} 283 | engines: {node: '>=12'} 284 | cpu: [x64] 285 | os: [openbsd] 286 | requiresBuild: true 287 | dev: true 288 | optional: true 289 | 290 | /@esbuild/sunos-x64@0.19.11: 291 | resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} 292 | engines: {node: '>=12'} 293 | cpu: [x64] 294 | os: [sunos] 295 | requiresBuild: true 296 | dev: true 297 | optional: true 298 | 299 | /@esbuild/win32-arm64@0.19.11: 300 | resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} 301 | engines: {node: '>=12'} 302 | cpu: [arm64] 303 | os: [win32] 304 | requiresBuild: true 305 | dev: true 306 | optional: true 307 | 308 | /@esbuild/win32-ia32@0.19.11: 309 | resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} 310 | engines: {node: '>=12'} 311 | cpu: [ia32] 312 | os: [win32] 313 | requiresBuild: true 314 | dev: true 315 | optional: true 316 | 317 | /@esbuild/win32-x64@0.19.11: 318 | resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} 319 | engines: {node: '>=12'} 320 | cpu: [x64] 321 | os: [win32] 322 | requiresBuild: true 323 | dev: true 324 | optional: true 325 | 326 | /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): 327 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 328 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 329 | peerDependencies: 330 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 331 | dependencies: 332 | eslint: 8.56.0 333 | eslint-visitor-keys: 3.4.3 334 | dev: true 335 | 336 | /@eslint-community/regexpp@4.10.0: 337 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 338 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 339 | dev: true 340 | 341 | /@eslint/eslintrc@2.1.4: 342 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 343 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 344 | dependencies: 345 | ajv: 6.12.6 346 | debug: 4.3.4 347 | espree: 9.6.1 348 | globals: 13.24.0 349 | ignore: 5.3.0 350 | import-fresh: 3.3.0 351 | js-yaml: 4.1.0 352 | minimatch: 3.1.2 353 | strip-json-comments: 3.1.1 354 | transitivePeerDependencies: 355 | - supports-color 356 | dev: true 357 | 358 | /@eslint/js@8.56.0: 359 | resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} 360 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 361 | dev: true 362 | 363 | /@humanwhocodes/config-array@0.11.14: 364 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 365 | engines: {node: '>=10.10.0'} 366 | dependencies: 367 | '@humanwhocodes/object-schema': 2.0.2 368 | debug: 4.3.4 369 | minimatch: 3.1.2 370 | transitivePeerDependencies: 371 | - supports-color 372 | dev: true 373 | 374 | /@humanwhocodes/module-importer@1.0.1: 375 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 376 | engines: {node: '>=12.22'} 377 | dev: true 378 | 379 | /@humanwhocodes/object-schema@2.0.2: 380 | resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} 381 | dev: true 382 | 383 | /@jest/schemas@29.6.3: 384 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 385 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 386 | dependencies: 387 | '@sinclair/typebox': 0.27.8 388 | dev: true 389 | 390 | /@jridgewell/sourcemap-codec@1.4.15: 391 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 392 | dev: true 393 | 394 | /@nodelib/fs.scandir@2.1.5: 395 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 396 | engines: {node: '>= 8'} 397 | dependencies: 398 | '@nodelib/fs.stat': 2.0.5 399 | run-parallel: 1.2.0 400 | dev: true 401 | 402 | /@nodelib/fs.stat@2.0.5: 403 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 404 | engines: {node: '>= 8'} 405 | dev: true 406 | 407 | /@nodelib/fs.walk@1.2.8: 408 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 409 | engines: {node: '>= 8'} 410 | dependencies: 411 | '@nodelib/fs.scandir': 2.1.5 412 | fastq: 1.16.0 413 | dev: true 414 | 415 | /@rollup/rollup-android-arm-eabi@4.9.6: 416 | resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} 417 | cpu: [arm] 418 | os: [android] 419 | requiresBuild: true 420 | dev: true 421 | optional: true 422 | 423 | /@rollup/rollup-android-arm64@4.9.6: 424 | resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==} 425 | cpu: [arm64] 426 | os: [android] 427 | requiresBuild: true 428 | dev: true 429 | optional: true 430 | 431 | /@rollup/rollup-darwin-arm64@4.9.6: 432 | resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==} 433 | cpu: [arm64] 434 | os: [darwin] 435 | requiresBuild: true 436 | dev: true 437 | optional: true 438 | 439 | /@rollup/rollup-darwin-x64@4.9.6: 440 | resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==} 441 | cpu: [x64] 442 | os: [darwin] 443 | requiresBuild: true 444 | dev: true 445 | optional: true 446 | 447 | /@rollup/rollup-linux-arm-gnueabihf@4.9.6: 448 | resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==} 449 | cpu: [arm] 450 | os: [linux] 451 | requiresBuild: true 452 | dev: true 453 | optional: true 454 | 455 | /@rollup/rollup-linux-arm64-gnu@4.9.6: 456 | resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==} 457 | cpu: [arm64] 458 | os: [linux] 459 | libc: [glibc] 460 | requiresBuild: true 461 | dev: true 462 | optional: true 463 | 464 | /@rollup/rollup-linux-arm64-musl@4.9.6: 465 | resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==} 466 | cpu: [arm64] 467 | os: [linux] 468 | libc: [musl] 469 | requiresBuild: true 470 | dev: true 471 | optional: true 472 | 473 | /@rollup/rollup-linux-riscv64-gnu@4.9.6: 474 | resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==} 475 | cpu: [riscv64] 476 | os: [linux] 477 | libc: [glibc] 478 | requiresBuild: true 479 | dev: true 480 | optional: true 481 | 482 | /@rollup/rollup-linux-x64-gnu@4.9.6: 483 | resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==} 484 | cpu: [x64] 485 | os: [linux] 486 | libc: [glibc] 487 | requiresBuild: true 488 | dev: true 489 | optional: true 490 | 491 | /@rollup/rollup-linux-x64-musl@4.9.6: 492 | resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==} 493 | cpu: [x64] 494 | os: [linux] 495 | libc: [musl] 496 | requiresBuild: true 497 | dev: true 498 | optional: true 499 | 500 | /@rollup/rollup-win32-arm64-msvc@4.9.6: 501 | resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==} 502 | cpu: [arm64] 503 | os: [win32] 504 | requiresBuild: true 505 | dev: true 506 | optional: true 507 | 508 | /@rollup/rollup-win32-ia32-msvc@4.9.6: 509 | resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==} 510 | cpu: [ia32] 511 | os: [win32] 512 | requiresBuild: true 513 | dev: true 514 | optional: true 515 | 516 | /@rollup/rollup-win32-x64-msvc@4.9.6: 517 | resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==} 518 | cpu: [x64] 519 | os: [win32] 520 | requiresBuild: true 521 | dev: true 522 | optional: true 523 | 524 | /@sinclair/typebox@0.27.8: 525 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 526 | dev: true 527 | 528 | /@stylistic/eslint-plugin-js@0.1.2(eslint@8.56.0): 529 | resolution: {integrity: sha512-s0BdSiAd8SIInpBN4aFl17vQhZMEFokennZ64gWGyPvdrO68gJxHgD9Rox5srVXWEPaBw/YIIRA/2JhpNoElCA==} 530 | dependencies: 531 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 532 | acorn: 8.11.3 533 | escape-string-regexp: 4.0.0 534 | eslint-visitor-keys: 3.4.3 535 | espree: 9.6.1 536 | esutils: 2.0.3 537 | graphemer: 1.4.0 538 | transitivePeerDependencies: 539 | - eslint 540 | dev: true 541 | 542 | /@stylistic/eslint-plugin-jsx@0.1.2(eslint@8.56.0): 543 | resolution: {integrity: sha512-zq6od8bWuTr2MhJGohyjhQGTzHp38UvfzZo5e0uJvFr+E09EOcgQ7MAez68Zh00Fim57CLtHQt0F+geLdtC2vg==} 544 | dependencies: 545 | '@stylistic/eslint-plugin-js': 0.1.2(eslint@8.56.0) 546 | estraverse: 5.3.0 547 | jsx-ast-utils: 3.3.5 548 | transitivePeerDependencies: 549 | - eslint 550 | dev: true 551 | 552 | /@stylistic/eslint-plugin-ts@0.1.2(eslint@8.56.0)(typescript@5.3.3): 553 | resolution: {integrity: sha512-Kc/YjiLBtZ09yPubCOqn6zHnqClB2D8fy+CPRM/kmV0bkY04Sj1W2MXcYHg5iHrZ/ZXbbUVuVAEaO4j8D+Ol+Q==} 554 | peerDependencies: 555 | eslint: '*' 556 | dependencies: 557 | '@stylistic/eslint-plugin-js': 0.1.2(eslint@8.56.0) 558 | '@typescript-eslint/scope-manager': 6.19.0 559 | '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) 560 | '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) 561 | eslint: 8.56.0 562 | graphemer: 1.4.0 563 | transitivePeerDependencies: 564 | - supports-color 565 | - typescript 566 | dev: true 567 | 568 | /@stylistic/eslint-plugin@0.1.2(eslint@8.56.0)(typescript@5.3.3): 569 | resolution: {integrity: sha512-ZDnFeIdMbh+K1psdqtbB25KTo9dfR4r92rHELsiZw6poCZPfQxDexx8u+AuhGDI5UUbuSnonvSF8U7vZilPmvg==} 570 | peerDependencies: 571 | eslint: '*' 572 | dependencies: 573 | '@stylistic/eslint-plugin-js': 0.1.2(eslint@8.56.0) 574 | '@stylistic/eslint-plugin-jsx': 0.1.2(eslint@8.56.0) 575 | '@stylistic/eslint-plugin-ts': 0.1.2(eslint@8.56.0)(typescript@5.3.3) 576 | eslint: 8.56.0 577 | transitivePeerDependencies: 578 | - supports-color 579 | - typescript 580 | dev: true 581 | 582 | /@types/estree@1.0.5: 583 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 584 | dev: true 585 | 586 | /@types/json-schema@7.0.15: 587 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 588 | dev: true 589 | 590 | /@types/mdast@3.0.15: 591 | resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} 592 | dependencies: 593 | '@types/unist': 2.0.10 594 | dev: true 595 | 596 | /@types/node-fetch@2.6.11: 597 | resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} 598 | dependencies: 599 | '@types/node': 20.11.5 600 | form-data: 4.0.0 601 | dev: false 602 | 603 | /@types/node@18.19.8: 604 | resolution: {integrity: sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==} 605 | dependencies: 606 | undici-types: 5.26.5 607 | dev: false 608 | 609 | /@types/node@20.11.5: 610 | resolution: {integrity: sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==} 611 | dependencies: 612 | undici-types: 5.26.5 613 | 614 | /@types/normalize-package-data@2.4.4: 615 | resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} 616 | dev: true 617 | 618 | /@types/semver@7.5.6: 619 | resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} 620 | dev: true 621 | 622 | /@types/unist@2.0.10: 623 | resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} 624 | dev: true 625 | 626 | /@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3): 627 | resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==} 628 | engines: {node: ^16.0.0 || >=18.0.0} 629 | peerDependencies: 630 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha 631 | eslint: ^7.0.0 || ^8.0.0 632 | typescript: '*' 633 | peerDependenciesMeta: 634 | typescript: 635 | optional: true 636 | dependencies: 637 | '@eslint-community/regexpp': 4.10.0 638 | '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) 639 | '@typescript-eslint/scope-manager': 6.19.0 640 | '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) 641 | '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) 642 | '@typescript-eslint/visitor-keys': 6.19.0 643 | debug: 4.3.4 644 | eslint: 8.56.0 645 | graphemer: 1.4.0 646 | ignore: 5.3.0 647 | natural-compare: 1.4.0 648 | semver: 7.5.4 649 | ts-api-utils: 1.0.3(typescript@5.3.3) 650 | typescript: 5.3.3 651 | transitivePeerDependencies: 652 | - supports-color 653 | dev: true 654 | 655 | /@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3): 656 | resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==} 657 | engines: {node: ^16.0.0 || >=18.0.0} 658 | peerDependencies: 659 | eslint: ^7.0.0 || ^8.0.0 660 | typescript: '*' 661 | peerDependenciesMeta: 662 | typescript: 663 | optional: true 664 | dependencies: 665 | '@typescript-eslint/scope-manager': 6.19.0 666 | '@typescript-eslint/types': 6.19.0 667 | '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) 668 | '@typescript-eslint/visitor-keys': 6.19.0 669 | debug: 4.3.4 670 | eslint: 8.56.0 671 | typescript: 5.3.3 672 | transitivePeerDependencies: 673 | - supports-color 674 | dev: true 675 | 676 | /@typescript-eslint/scope-manager@6.19.0: 677 | resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==} 678 | engines: {node: ^16.0.0 || >=18.0.0} 679 | dependencies: 680 | '@typescript-eslint/types': 6.19.0 681 | '@typescript-eslint/visitor-keys': 6.19.0 682 | dev: true 683 | 684 | /@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): 685 | resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==} 686 | engines: {node: ^16.0.0 || >=18.0.0} 687 | peerDependencies: 688 | eslint: ^7.0.0 || ^8.0.0 689 | typescript: '*' 690 | peerDependenciesMeta: 691 | typescript: 692 | optional: true 693 | dependencies: 694 | '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) 695 | '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) 696 | debug: 4.3.4 697 | eslint: 8.56.0 698 | ts-api-utils: 1.0.3(typescript@5.3.3) 699 | typescript: 5.3.3 700 | transitivePeerDependencies: 701 | - supports-color 702 | dev: true 703 | 704 | /@typescript-eslint/types@6.19.0: 705 | resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==} 706 | engines: {node: ^16.0.0 || >=18.0.0} 707 | dev: true 708 | 709 | /@typescript-eslint/typescript-estree@6.19.0(typescript@5.3.3): 710 | resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==} 711 | engines: {node: ^16.0.0 || >=18.0.0} 712 | peerDependencies: 713 | typescript: '*' 714 | peerDependenciesMeta: 715 | typescript: 716 | optional: true 717 | dependencies: 718 | '@typescript-eslint/types': 6.19.0 719 | '@typescript-eslint/visitor-keys': 6.19.0 720 | debug: 4.3.4 721 | globby: 11.1.0 722 | is-glob: 4.0.3 723 | minimatch: 9.0.3 724 | semver: 7.5.4 725 | ts-api-utils: 1.0.3(typescript@5.3.3) 726 | typescript: 5.3.3 727 | transitivePeerDependencies: 728 | - supports-color 729 | dev: true 730 | 731 | /@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): 732 | resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==} 733 | engines: {node: ^16.0.0 || >=18.0.0} 734 | peerDependencies: 735 | eslint: ^7.0.0 || ^8.0.0 736 | dependencies: 737 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 738 | '@types/json-schema': 7.0.15 739 | '@types/semver': 7.5.6 740 | '@typescript-eslint/scope-manager': 6.19.0 741 | '@typescript-eslint/types': 6.19.0 742 | '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) 743 | eslint: 8.56.0 744 | semver: 7.5.4 745 | transitivePeerDependencies: 746 | - supports-color 747 | - typescript 748 | dev: true 749 | 750 | /@typescript-eslint/visitor-keys@6.19.0: 751 | resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==} 752 | engines: {node: ^16.0.0 || >=18.0.0} 753 | dependencies: 754 | '@typescript-eslint/types': 6.19.0 755 | eslint-visitor-keys: 3.4.3 756 | dev: true 757 | 758 | /@ungap/structured-clone@1.2.0: 759 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 760 | dev: true 761 | 762 | /@vitest/expect@1.2.1: 763 | resolution: {integrity: sha512-/bqGXcHfyKgFWYwIgFr1QYDaR9e64pRKxgBNWNXPefPFRhgm+K3+a/dS0cUGEreWngets3dlr8w8SBRw2fCfFQ==} 764 | dependencies: 765 | '@vitest/spy': 1.2.1 766 | '@vitest/utils': 1.2.1 767 | chai: 4.4.1 768 | dev: true 769 | 770 | /@vitest/runner@1.2.1: 771 | resolution: {integrity: sha512-zc2dP5LQpzNzbpaBt7OeYAvmIsRS1KpZQw4G3WM/yqSV1cQKNKwLGmnm79GyZZjMhQGlRcSFMImLjZaUQvNVZQ==} 772 | dependencies: 773 | '@vitest/utils': 1.2.1 774 | p-limit: 5.0.0 775 | pathe: 1.1.2 776 | dev: true 777 | 778 | /@vitest/snapshot@1.2.1: 779 | resolution: {integrity: sha512-Tmp/IcYEemKaqAYCS08sh0vORLJkMr0NRV76Gl8sHGxXT5151cITJCET20063wk0Yr/1koQ6dnmP6eEqezmd/Q==} 780 | dependencies: 781 | magic-string: 0.30.5 782 | pathe: 1.1.2 783 | pretty-format: 29.7.0 784 | dev: true 785 | 786 | /@vitest/spy@1.2.1: 787 | resolution: {integrity: sha512-vG3a/b7INKH7L49Lbp0IWrG6sw9j4waWAucwnksPB1r1FTJgV7nkBByd9ufzu6VWya/QTvQW4V9FShZbZIB2UQ==} 788 | dependencies: 789 | tinyspy: 2.2.0 790 | dev: true 791 | 792 | /@vitest/utils@1.2.1: 793 | resolution: {integrity: sha512-bsH6WVZYe/J2v3+81M5LDU8kW76xWObKIURpPrOXm2pjBniBu2MERI/XP60GpS4PHU3jyK50LUutOwrx4CyHUg==} 794 | dependencies: 795 | diff-sequences: 29.6.3 796 | estree-walker: 3.0.3 797 | loupe: 2.3.7 798 | pretty-format: 29.7.0 799 | dev: true 800 | 801 | /abort-controller@3.0.0: 802 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 803 | engines: {node: '>=6.5'} 804 | dependencies: 805 | event-target-shim: 5.0.1 806 | dev: false 807 | 808 | /acorn-jsx@5.3.2(acorn@8.11.3): 809 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 810 | peerDependencies: 811 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 812 | dependencies: 813 | acorn: 8.11.3 814 | dev: true 815 | 816 | /acorn-walk@8.3.2: 817 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} 818 | engines: {node: '>=0.4.0'} 819 | dev: true 820 | 821 | /acorn@8.11.3: 822 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 823 | engines: {node: '>=0.4.0'} 824 | hasBin: true 825 | dev: true 826 | 827 | /agentkeepalive@4.5.0: 828 | resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} 829 | engines: {node: '>= 8.0.0'} 830 | dependencies: 831 | humanize-ms: 1.2.1 832 | dev: false 833 | 834 | /ajv@6.12.6: 835 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 836 | dependencies: 837 | fast-deep-equal: 3.1.3 838 | fast-json-stable-stringify: 2.1.0 839 | json-schema-traverse: 0.4.1 840 | uri-js: 4.4.1 841 | dev: true 842 | 843 | /ansi-regex@5.0.1: 844 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 845 | engines: {node: '>=8'} 846 | dev: true 847 | 848 | /ansi-styles@3.2.1: 849 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 850 | engines: {node: '>=4'} 851 | dependencies: 852 | color-convert: 1.9.3 853 | dev: true 854 | 855 | /ansi-styles@4.3.0: 856 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 857 | engines: {node: '>=8'} 858 | dependencies: 859 | color-convert: 2.0.1 860 | dev: true 861 | 862 | /ansi-styles@5.2.0: 863 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 864 | engines: {node: '>=10'} 865 | dev: true 866 | 867 | /are-docs-informative@0.0.2: 868 | resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} 869 | engines: {node: '>=14'} 870 | dev: true 871 | 872 | /argparse@2.0.1: 873 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 874 | dev: true 875 | 876 | /array-buffer-byte-length@1.0.0: 877 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 878 | dependencies: 879 | call-bind: 1.0.5 880 | is-array-buffer: 3.0.2 881 | dev: true 882 | 883 | /array-includes@3.1.7: 884 | resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} 885 | engines: {node: '>= 0.4'} 886 | dependencies: 887 | call-bind: 1.0.5 888 | define-properties: 1.2.1 889 | es-abstract: 1.22.3 890 | get-intrinsic: 1.2.2 891 | is-string: 1.0.7 892 | dev: true 893 | 894 | /array-union@2.1.0: 895 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 896 | engines: {node: '>=8'} 897 | dev: true 898 | 899 | /array.prototype.flat@1.3.2: 900 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} 901 | engines: {node: '>= 0.4'} 902 | dependencies: 903 | call-bind: 1.0.5 904 | define-properties: 1.2.1 905 | es-abstract: 1.22.3 906 | es-shim-unscopables: 1.0.2 907 | dev: true 908 | 909 | /arraybuffer.prototype.slice@1.0.2: 910 | resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} 911 | engines: {node: '>= 0.4'} 912 | dependencies: 913 | array-buffer-byte-length: 1.0.0 914 | call-bind: 1.0.5 915 | define-properties: 1.2.1 916 | es-abstract: 1.22.3 917 | get-intrinsic: 1.2.2 918 | is-array-buffer: 3.0.2 919 | is-shared-array-buffer: 1.0.2 920 | dev: true 921 | 922 | /assertion-error@1.1.0: 923 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 924 | dev: true 925 | 926 | /asynckit@0.4.0: 927 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 928 | dev: false 929 | 930 | /available-typed-arrays@1.0.5: 931 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 932 | engines: {node: '>= 0.4'} 933 | dev: true 934 | 935 | /balanced-match@1.0.2: 936 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 937 | dev: true 938 | 939 | /base-64@0.1.0: 940 | resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} 941 | dev: false 942 | 943 | /boolbase@1.0.0: 944 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 945 | dev: true 946 | 947 | /brace-expansion@1.1.11: 948 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 949 | dependencies: 950 | balanced-match: 1.0.2 951 | concat-map: 0.0.1 952 | dev: true 953 | 954 | /brace-expansion@2.0.1: 955 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 956 | dependencies: 957 | balanced-match: 1.0.2 958 | dev: true 959 | 960 | /braces@3.0.2: 961 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 962 | engines: {node: '>=8'} 963 | dependencies: 964 | fill-range: 7.0.1 965 | dev: true 966 | 967 | /builtin-modules@3.3.0: 968 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 969 | engines: {node: '>=6'} 970 | dev: true 971 | 972 | /builtins@5.0.1: 973 | resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} 974 | dependencies: 975 | semver: 7.5.4 976 | dev: true 977 | 978 | /cac@6.7.14: 979 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 980 | engines: {node: '>=8'} 981 | dev: true 982 | 983 | /call-bind@1.0.5: 984 | resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} 985 | dependencies: 986 | function-bind: 1.1.2 987 | get-intrinsic: 1.2.2 988 | set-function-length: 1.2.0 989 | dev: true 990 | 991 | /callsites@3.1.0: 992 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 993 | engines: {node: '>=6'} 994 | dev: true 995 | 996 | /chai@4.4.1: 997 | resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} 998 | engines: {node: '>=4'} 999 | dependencies: 1000 | assertion-error: 1.1.0 1001 | check-error: 1.0.3 1002 | deep-eql: 4.1.3 1003 | get-func-name: 2.0.2 1004 | loupe: 2.3.7 1005 | pathval: 1.1.1 1006 | type-detect: 4.0.8 1007 | dev: true 1008 | 1009 | /chalk@2.4.2: 1010 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 1011 | engines: {node: '>=4'} 1012 | dependencies: 1013 | ansi-styles: 3.2.1 1014 | escape-string-regexp: 1.0.5 1015 | supports-color: 5.5.0 1016 | dev: true 1017 | 1018 | /chalk@4.1.2: 1019 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1020 | engines: {node: '>=10'} 1021 | dependencies: 1022 | ansi-styles: 4.3.0 1023 | supports-color: 7.2.0 1024 | dev: true 1025 | 1026 | /character-entities-legacy@1.1.4: 1027 | resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} 1028 | dev: true 1029 | 1030 | /character-entities@1.2.4: 1031 | resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} 1032 | dev: true 1033 | 1034 | /character-reference-invalid@1.1.4: 1035 | resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} 1036 | dev: true 1037 | 1038 | /charenc@0.0.2: 1039 | resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} 1040 | dev: false 1041 | 1042 | /check-error@1.0.3: 1043 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 1044 | dependencies: 1045 | get-func-name: 2.0.2 1046 | dev: true 1047 | 1048 | /ci-info@3.9.0: 1049 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 1050 | engines: {node: '>=8'} 1051 | dev: true 1052 | 1053 | /clean-regexp@1.0.0: 1054 | resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} 1055 | engines: {node: '>=4'} 1056 | dependencies: 1057 | escape-string-regexp: 1.0.5 1058 | dev: true 1059 | 1060 | /color-convert@1.9.3: 1061 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 1062 | dependencies: 1063 | color-name: 1.1.3 1064 | dev: true 1065 | 1066 | /color-convert@2.0.1: 1067 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1068 | engines: {node: '>=7.0.0'} 1069 | dependencies: 1070 | color-name: 1.1.4 1071 | dev: true 1072 | 1073 | /color-name@1.1.3: 1074 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 1075 | dev: true 1076 | 1077 | /color-name@1.1.4: 1078 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1079 | dev: true 1080 | 1081 | /combined-stream@1.0.8: 1082 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 1083 | engines: {node: '>= 0.8'} 1084 | dependencies: 1085 | delayed-stream: 1.0.0 1086 | dev: false 1087 | 1088 | /comment-parser@1.4.1: 1089 | resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} 1090 | engines: {node: '>= 12.0.0'} 1091 | dev: true 1092 | 1093 | /concat-map@0.0.1: 1094 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1095 | dev: true 1096 | 1097 | /cross-spawn@7.0.3: 1098 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1099 | engines: {node: '>= 8'} 1100 | dependencies: 1101 | path-key: 3.1.1 1102 | shebang-command: 2.0.0 1103 | which: 2.0.2 1104 | dev: true 1105 | 1106 | /crypt@0.0.2: 1107 | resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} 1108 | dev: false 1109 | 1110 | /cssesc@3.0.0: 1111 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1112 | engines: {node: '>=4'} 1113 | hasBin: true 1114 | dev: true 1115 | 1116 | /debug@3.2.7: 1117 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 1118 | peerDependencies: 1119 | supports-color: '*' 1120 | peerDependenciesMeta: 1121 | supports-color: 1122 | optional: true 1123 | dependencies: 1124 | ms: 2.1.3 1125 | dev: true 1126 | 1127 | /debug@4.3.4: 1128 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1129 | engines: {node: '>=6.0'} 1130 | peerDependencies: 1131 | supports-color: '*' 1132 | peerDependenciesMeta: 1133 | supports-color: 1134 | optional: true 1135 | dependencies: 1136 | ms: 2.1.2 1137 | dev: true 1138 | 1139 | /deep-eql@4.1.3: 1140 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 1141 | engines: {node: '>=6'} 1142 | dependencies: 1143 | type-detect: 4.0.8 1144 | dev: true 1145 | 1146 | /deep-is@0.1.4: 1147 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1148 | dev: true 1149 | 1150 | /define-data-property@1.1.1: 1151 | resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} 1152 | engines: {node: '>= 0.4'} 1153 | dependencies: 1154 | get-intrinsic: 1.2.2 1155 | gopd: 1.0.1 1156 | has-property-descriptors: 1.0.1 1157 | dev: true 1158 | 1159 | /define-properties@1.2.1: 1160 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 1161 | engines: {node: '>= 0.4'} 1162 | dependencies: 1163 | define-data-property: 1.1.1 1164 | has-property-descriptors: 1.0.1 1165 | object-keys: 1.1.1 1166 | dev: true 1167 | 1168 | /delayed-stream@1.0.0: 1169 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1170 | engines: {node: '>=0.4.0'} 1171 | dev: false 1172 | 1173 | /diff-sequences@29.6.3: 1174 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 1175 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1176 | dev: true 1177 | 1178 | /digest-fetch@1.3.0: 1179 | resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} 1180 | dependencies: 1181 | base-64: 0.1.0 1182 | md5: 2.3.0 1183 | dev: false 1184 | 1185 | /dir-glob@3.0.1: 1186 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1187 | engines: {node: '>=8'} 1188 | dependencies: 1189 | path-type: 4.0.0 1190 | dev: true 1191 | 1192 | /doctrine@3.0.0: 1193 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1194 | engines: {node: '>=6.0.0'} 1195 | dependencies: 1196 | esutils: 2.0.3 1197 | dev: true 1198 | 1199 | /error-ex@1.3.2: 1200 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1201 | dependencies: 1202 | is-arrayish: 0.2.1 1203 | dev: true 1204 | 1205 | /es-abstract@1.22.3: 1206 | resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} 1207 | engines: {node: '>= 0.4'} 1208 | dependencies: 1209 | array-buffer-byte-length: 1.0.0 1210 | arraybuffer.prototype.slice: 1.0.2 1211 | available-typed-arrays: 1.0.5 1212 | call-bind: 1.0.5 1213 | es-set-tostringtag: 2.0.2 1214 | es-to-primitive: 1.2.1 1215 | function.prototype.name: 1.1.6 1216 | get-intrinsic: 1.2.2 1217 | get-symbol-description: 1.0.0 1218 | globalthis: 1.0.3 1219 | gopd: 1.0.1 1220 | has-property-descriptors: 1.0.1 1221 | has-proto: 1.0.1 1222 | has-symbols: 1.0.3 1223 | hasown: 2.0.0 1224 | internal-slot: 1.0.6 1225 | is-array-buffer: 3.0.2 1226 | is-callable: 1.2.7 1227 | is-negative-zero: 2.0.2 1228 | is-regex: 1.1.4 1229 | is-shared-array-buffer: 1.0.2 1230 | is-string: 1.0.7 1231 | is-typed-array: 1.1.12 1232 | is-weakref: 1.0.2 1233 | object-inspect: 1.13.1 1234 | object-keys: 1.1.1 1235 | object.assign: 4.1.5 1236 | regexp.prototype.flags: 1.5.1 1237 | safe-array-concat: 1.1.0 1238 | safe-regex-test: 1.0.2 1239 | string.prototype.trim: 1.2.8 1240 | string.prototype.trimend: 1.0.7 1241 | string.prototype.trimstart: 1.0.7 1242 | typed-array-buffer: 1.0.0 1243 | typed-array-byte-length: 1.0.0 1244 | typed-array-byte-offset: 1.0.0 1245 | typed-array-length: 1.0.4 1246 | unbox-primitive: 1.0.2 1247 | which-typed-array: 1.1.13 1248 | dev: true 1249 | 1250 | /es-set-tostringtag@2.0.2: 1251 | resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} 1252 | engines: {node: '>= 0.4'} 1253 | dependencies: 1254 | get-intrinsic: 1.2.2 1255 | has-tostringtag: 1.0.0 1256 | hasown: 2.0.0 1257 | dev: true 1258 | 1259 | /es-shim-unscopables@1.0.2: 1260 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 1261 | dependencies: 1262 | hasown: 2.0.0 1263 | dev: true 1264 | 1265 | /es-to-primitive@1.2.1: 1266 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1267 | engines: {node: '>= 0.4'} 1268 | dependencies: 1269 | is-callable: 1.2.7 1270 | is-date-object: 1.0.5 1271 | is-symbol: 1.0.4 1272 | dev: true 1273 | 1274 | /esbuild@0.19.11: 1275 | resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} 1276 | engines: {node: '>=12'} 1277 | hasBin: true 1278 | requiresBuild: true 1279 | optionalDependencies: 1280 | '@esbuild/aix-ppc64': 0.19.11 1281 | '@esbuild/android-arm': 0.19.11 1282 | '@esbuild/android-arm64': 0.19.11 1283 | '@esbuild/android-x64': 0.19.11 1284 | '@esbuild/darwin-arm64': 0.19.11 1285 | '@esbuild/darwin-x64': 0.19.11 1286 | '@esbuild/freebsd-arm64': 0.19.11 1287 | '@esbuild/freebsd-x64': 0.19.11 1288 | '@esbuild/linux-arm': 0.19.11 1289 | '@esbuild/linux-arm64': 0.19.11 1290 | '@esbuild/linux-ia32': 0.19.11 1291 | '@esbuild/linux-loong64': 0.19.11 1292 | '@esbuild/linux-mips64el': 0.19.11 1293 | '@esbuild/linux-ppc64': 0.19.11 1294 | '@esbuild/linux-riscv64': 0.19.11 1295 | '@esbuild/linux-s390x': 0.19.11 1296 | '@esbuild/linux-x64': 0.19.11 1297 | '@esbuild/netbsd-x64': 0.19.11 1298 | '@esbuild/openbsd-x64': 0.19.11 1299 | '@esbuild/sunos-x64': 0.19.11 1300 | '@esbuild/win32-arm64': 0.19.11 1301 | '@esbuild/win32-ia32': 0.19.11 1302 | '@esbuild/win32-x64': 0.19.11 1303 | dev: true 1304 | 1305 | /escape-string-regexp@1.0.5: 1306 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1307 | engines: {node: '>=0.8.0'} 1308 | dev: true 1309 | 1310 | /escape-string-regexp@4.0.0: 1311 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1312 | engines: {node: '>=10'} 1313 | dev: true 1314 | 1315 | /eslint-compat-utils@0.1.2(eslint@8.56.0): 1316 | resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} 1317 | engines: {node: '>=12'} 1318 | peerDependencies: 1319 | eslint: '>=6.0.0' 1320 | dependencies: 1321 | eslint: 8.56.0 1322 | dev: true 1323 | 1324 | /eslint-compat-utils@0.4.1(eslint@8.56.0): 1325 | resolution: {integrity: sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg==} 1326 | engines: {node: '>=12'} 1327 | peerDependencies: 1328 | eslint: '>=6.0.0' 1329 | dependencies: 1330 | eslint: 8.56.0 1331 | semver: 7.5.4 1332 | dev: true 1333 | 1334 | /eslint-config-flat-gitignore@0.1.2: 1335 | resolution: {integrity: sha512-PcBsqtd5QHEZH4ROvpnRN4EP0qcHh9voCCHgtyHxnJZHGspJREcZn7oPqRG/GfWt9m3C0fkC2l5CuBtMig2wXQ==} 1336 | dependencies: 1337 | parse-gitignore: 2.0.0 1338 | dev: true 1339 | 1340 | /eslint-import-resolver-node@0.3.9: 1341 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 1342 | dependencies: 1343 | debug: 3.2.7 1344 | is-core-module: 2.13.1 1345 | resolve: 1.22.8 1346 | transitivePeerDependencies: 1347 | - supports-color 1348 | dev: true 1349 | 1350 | /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): 1351 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} 1352 | engines: {node: '>=4'} 1353 | peerDependencies: 1354 | '@typescript-eslint/parser': '*' 1355 | eslint: '*' 1356 | eslint-import-resolver-node: '*' 1357 | eslint-import-resolver-typescript: '*' 1358 | eslint-import-resolver-webpack: '*' 1359 | peerDependenciesMeta: 1360 | '@typescript-eslint/parser': 1361 | optional: true 1362 | eslint: 1363 | optional: true 1364 | eslint-import-resolver-node: 1365 | optional: true 1366 | eslint-import-resolver-typescript: 1367 | optional: true 1368 | eslint-import-resolver-webpack: 1369 | optional: true 1370 | dependencies: 1371 | '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) 1372 | debug: 3.2.7 1373 | eslint: 8.56.0 1374 | eslint-import-resolver-node: 0.3.9 1375 | transitivePeerDependencies: 1376 | - supports-color 1377 | dev: true 1378 | 1379 | /eslint-plugin-antfu@1.0.13(eslint@8.56.0): 1380 | resolution: {integrity: sha512-JzWEzNWZcNK4Q4Tz4VaNELhu3VgCv3obSYxUbK1UhbDBmr2v0a7H9n9xGv5GTS4LkEo905/2Gq6y0dcoBq5FZA==} 1381 | peerDependencies: 1382 | eslint: '*' 1383 | dependencies: 1384 | eslint: 8.56.0 1385 | dev: true 1386 | 1387 | /eslint-plugin-es-x@7.5.0(eslint@8.56.0): 1388 | resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} 1389 | engines: {node: ^14.18.0 || >=16.0.0} 1390 | peerDependencies: 1391 | eslint: '>=8' 1392 | dependencies: 1393 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 1394 | '@eslint-community/regexpp': 4.10.0 1395 | eslint: 8.56.0 1396 | eslint-compat-utils: 0.1.2(eslint@8.56.0) 1397 | dev: true 1398 | 1399 | /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): 1400 | resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} 1401 | engines: {node: '>=6.5.0'} 1402 | peerDependencies: 1403 | eslint: '>=4.19.1' 1404 | dependencies: 1405 | escape-string-regexp: 1.0.5 1406 | eslint: 8.56.0 1407 | ignore: 5.3.0 1408 | dev: true 1409 | 1410 | /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0): 1411 | resolution: {integrity: sha512-ORizX37MelIWLbMyqI7hi8VJMf7A0CskMmYkB+lkCX3aF4pkGV7kwx5bSEb4qx7Yce2rAf9s34HqDRPjGRZPNQ==} 1412 | engines: {node: '>=12'} 1413 | peerDependencies: 1414 | eslint: ^7.2.0 || ^8 1415 | dependencies: 1416 | debug: 4.3.4 1417 | doctrine: 3.0.0 1418 | eslint: 8.56.0 1419 | eslint-import-resolver-node: 0.3.9 1420 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) 1421 | get-tsconfig: 4.7.2 1422 | is-glob: 4.0.3 1423 | minimatch: 3.1.2 1424 | semver: 7.5.4 1425 | transitivePeerDependencies: 1426 | - '@typescript-eslint/parser' 1427 | - eslint-import-resolver-typescript 1428 | - eslint-import-resolver-webpack 1429 | - supports-color 1430 | dev: true 1431 | 1432 | /eslint-plugin-jsdoc@46.10.1(eslint@8.56.0): 1433 | resolution: {integrity: sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==} 1434 | engines: {node: '>=16'} 1435 | peerDependencies: 1436 | eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 1437 | dependencies: 1438 | '@es-joy/jsdoccomment': 0.41.0 1439 | are-docs-informative: 0.0.2 1440 | comment-parser: 1.4.1 1441 | debug: 4.3.4 1442 | escape-string-regexp: 4.0.0 1443 | eslint: 8.56.0 1444 | esquery: 1.5.0 1445 | is-builtin-module: 3.2.1 1446 | semver: 7.5.4 1447 | spdx-expression-parse: 4.0.0 1448 | transitivePeerDependencies: 1449 | - supports-color 1450 | dev: true 1451 | 1452 | /eslint-plugin-jsonc@2.12.2(eslint@8.56.0): 1453 | resolution: {integrity: sha512-iv2BLi1bqkSxCPEvDOY6xiBXzAFi5iS2gTOU8fnXGfKxkC6MvC5Tw2XAgbP6R6WRlqV7AtFItx4Xb7mCONtmmw==} 1454 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1455 | peerDependencies: 1456 | eslint: '>=6.0.0' 1457 | dependencies: 1458 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 1459 | eslint: 8.56.0 1460 | eslint-compat-utils: 0.4.1(eslint@8.56.0) 1461 | espree: 9.6.1 1462 | graphemer: 1.4.0 1463 | jsonc-eslint-parser: 2.4.0 1464 | natural-compare: 1.4.0 1465 | dev: true 1466 | 1467 | /eslint-plugin-markdown@3.0.1(eslint@8.56.0): 1468 | resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==} 1469 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1470 | peerDependencies: 1471 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1472 | dependencies: 1473 | eslint: 8.56.0 1474 | mdast-util-from-markdown: 0.8.5 1475 | transitivePeerDependencies: 1476 | - supports-color 1477 | dev: true 1478 | 1479 | /eslint-plugin-n@16.6.2(eslint@8.56.0): 1480 | resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} 1481 | engines: {node: '>=16.0.0'} 1482 | peerDependencies: 1483 | eslint: '>=7.0.0' 1484 | dependencies: 1485 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 1486 | builtins: 5.0.1 1487 | eslint: 8.56.0 1488 | eslint-plugin-es-x: 7.5.0(eslint@8.56.0) 1489 | get-tsconfig: 4.7.2 1490 | globals: 13.24.0 1491 | ignore: 5.3.0 1492 | is-builtin-module: 3.2.1 1493 | is-core-module: 2.13.1 1494 | minimatch: 3.1.2 1495 | resolve: 1.22.8 1496 | semver: 7.5.4 1497 | dev: true 1498 | 1499 | /eslint-plugin-no-only-tests@3.1.0: 1500 | resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==} 1501 | engines: {node: '>=5.0.0'} 1502 | dev: true 1503 | 1504 | /eslint-plugin-sort-keys@2.3.5: 1505 | resolution: {integrity: sha512-2j/XKQ9sNJwK8kIp/U0EvuF6stS6/8aIc53/NskE4C5NRNh4dt3xzbZyOdrVC11cTH6Zo59/pdzA0Kb+2fQGWg==} 1506 | dependencies: 1507 | natural-compare: 1.4.0 1508 | dev: true 1509 | 1510 | /eslint-plugin-unicorn@49.0.0(eslint@8.56.0): 1511 | resolution: {integrity: sha512-0fHEa/8Pih5cmzFW5L7xMEfUTvI9WKeQtjmKpTUmY+BiFCDxkxrTdnURJOHKykhtwIeyYsxnecbGvDCml++z4Q==} 1512 | engines: {node: '>=16'} 1513 | peerDependencies: 1514 | eslint: '>=8.52.0' 1515 | dependencies: 1516 | '@babel/helper-validator-identifier': 7.22.20 1517 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 1518 | ci-info: 3.9.0 1519 | clean-regexp: 1.0.0 1520 | eslint: 8.56.0 1521 | esquery: 1.5.0 1522 | indent-string: 4.0.0 1523 | is-builtin-module: 3.2.1 1524 | jsesc: 3.0.2 1525 | pluralize: 8.0.0 1526 | read-pkg-up: 7.0.1 1527 | regexp-tree: 0.1.27 1528 | regjsparser: 0.10.0 1529 | semver: 7.5.4 1530 | strip-indent: 3.0.0 1531 | dev: true 1532 | 1533 | /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0): 1534 | resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} 1535 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1536 | peerDependencies: 1537 | '@typescript-eslint/eslint-plugin': ^6.0.0 1538 | eslint: ^8.0.0 1539 | peerDependenciesMeta: 1540 | '@typescript-eslint/eslint-plugin': 1541 | optional: true 1542 | dependencies: 1543 | '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) 1544 | eslint: 8.56.0 1545 | eslint-rule-composer: 0.3.0 1546 | dev: true 1547 | 1548 | /eslint-plugin-vitest@0.3.20(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.1): 1549 | resolution: {integrity: sha512-O05k4j9TGMOkkghj9dRgpeLDyOSiVIxQWgNDPfhYPm5ioJsehcYV/zkRLekQs+c8+RBCVXucSED3fYOyy2EoWA==} 1550 | engines: {node: ^18.0.0 || >= 20.0.0} 1551 | peerDependencies: 1552 | '@typescript-eslint/eslint-plugin': '*' 1553 | eslint: '>=8.0.0' 1554 | vitest: '*' 1555 | peerDependenciesMeta: 1556 | '@typescript-eslint/eslint-plugin': 1557 | optional: true 1558 | vitest: 1559 | optional: true 1560 | dependencies: 1561 | '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) 1562 | '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) 1563 | eslint: 8.56.0 1564 | vitest: 1.2.1(@types/node@20.11.5) 1565 | transitivePeerDependencies: 1566 | - supports-color 1567 | - typescript 1568 | dev: true 1569 | 1570 | /eslint-plugin-vue@9.20.1(eslint@8.56.0): 1571 | resolution: {integrity: sha512-GyCs8K3lkEvoyC1VV97GJhP1SvqsKCiWGHnbn0gVUYiUhaH2+nB+Dv1uekv1THFMPbBfYxukrzQdltw950k+LQ==} 1572 | engines: {node: ^14.17.0 || >=16.0.0} 1573 | peerDependencies: 1574 | eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 1575 | dependencies: 1576 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 1577 | eslint: 8.56.0 1578 | natural-compare: 1.4.0 1579 | nth-check: 2.1.1 1580 | postcss-selector-parser: 6.0.15 1581 | semver: 7.5.4 1582 | vue-eslint-parser: 9.4.1(eslint@8.56.0) 1583 | xml-name-validator: 4.0.0 1584 | transitivePeerDependencies: 1585 | - supports-color 1586 | dev: true 1587 | 1588 | /eslint-plugin-yml@1.12.2(eslint@8.56.0): 1589 | resolution: {integrity: sha512-hvS9p08FhPT7i/ynwl7/Wt7ke7Rf4P2D6fT8lZlL43peZDTsHtH2A0SIFQ7Kt7+mJ6if6P+FX3iJhMkdnxQwpg==} 1590 | engines: {node: ^14.17.0 || >=16.0.0} 1591 | peerDependencies: 1592 | eslint: '>=6.0.0' 1593 | dependencies: 1594 | debug: 4.3.4 1595 | eslint: 8.56.0 1596 | eslint-compat-utils: 0.4.1(eslint@8.56.0) 1597 | lodash: 4.17.21 1598 | natural-compare: 1.4.0 1599 | yaml-eslint-parser: 1.2.2 1600 | transitivePeerDependencies: 1601 | - supports-color 1602 | dev: true 1603 | 1604 | /eslint-rule-composer@0.3.0: 1605 | resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} 1606 | engines: {node: '>=4.0.0'} 1607 | dev: true 1608 | 1609 | /eslint-scope@7.2.2: 1610 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1611 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1612 | dependencies: 1613 | esrecurse: 4.3.0 1614 | estraverse: 5.3.0 1615 | dev: true 1616 | 1617 | /eslint-visitor-keys@3.4.3: 1618 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1619 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1620 | dev: true 1621 | 1622 | /eslint@8.56.0: 1623 | resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} 1624 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1625 | hasBin: true 1626 | dependencies: 1627 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 1628 | '@eslint-community/regexpp': 4.10.0 1629 | '@eslint/eslintrc': 2.1.4 1630 | '@eslint/js': 8.56.0 1631 | '@humanwhocodes/config-array': 0.11.14 1632 | '@humanwhocodes/module-importer': 1.0.1 1633 | '@nodelib/fs.walk': 1.2.8 1634 | '@ungap/structured-clone': 1.2.0 1635 | ajv: 6.12.6 1636 | chalk: 4.1.2 1637 | cross-spawn: 7.0.3 1638 | debug: 4.3.4 1639 | doctrine: 3.0.0 1640 | escape-string-regexp: 4.0.0 1641 | eslint-scope: 7.2.2 1642 | eslint-visitor-keys: 3.4.3 1643 | espree: 9.6.1 1644 | esquery: 1.5.0 1645 | esutils: 2.0.3 1646 | fast-deep-equal: 3.1.3 1647 | file-entry-cache: 6.0.1 1648 | find-up: 5.0.0 1649 | glob-parent: 6.0.2 1650 | globals: 13.24.0 1651 | graphemer: 1.4.0 1652 | ignore: 5.3.0 1653 | imurmurhash: 0.1.4 1654 | is-glob: 4.0.3 1655 | is-path-inside: 3.0.3 1656 | js-yaml: 4.1.0 1657 | json-stable-stringify-without-jsonify: 1.0.1 1658 | levn: 0.4.1 1659 | lodash.merge: 4.6.2 1660 | minimatch: 3.1.2 1661 | natural-compare: 1.4.0 1662 | optionator: 0.9.3 1663 | strip-ansi: 6.0.1 1664 | text-table: 0.2.0 1665 | transitivePeerDependencies: 1666 | - supports-color 1667 | dev: true 1668 | 1669 | /espree@9.6.1: 1670 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1671 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1672 | dependencies: 1673 | acorn: 8.11.3 1674 | acorn-jsx: 5.3.2(acorn@8.11.3) 1675 | eslint-visitor-keys: 3.4.3 1676 | dev: true 1677 | 1678 | /esquery@1.5.0: 1679 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1680 | engines: {node: '>=0.10'} 1681 | dependencies: 1682 | estraverse: 5.3.0 1683 | dev: true 1684 | 1685 | /esrecurse@4.3.0: 1686 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1687 | engines: {node: '>=4.0'} 1688 | dependencies: 1689 | estraverse: 5.3.0 1690 | dev: true 1691 | 1692 | /estraverse@5.3.0: 1693 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1694 | engines: {node: '>=4.0'} 1695 | dev: true 1696 | 1697 | /estree-walker@3.0.3: 1698 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1699 | dependencies: 1700 | '@types/estree': 1.0.5 1701 | dev: true 1702 | 1703 | /esutils@2.0.3: 1704 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1705 | engines: {node: '>=0.10.0'} 1706 | dev: true 1707 | 1708 | /event-target-shim@5.0.1: 1709 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 1710 | engines: {node: '>=6'} 1711 | dev: false 1712 | 1713 | /execa@8.0.1: 1714 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 1715 | engines: {node: '>=16.17'} 1716 | dependencies: 1717 | cross-spawn: 7.0.3 1718 | get-stream: 8.0.1 1719 | human-signals: 5.0.0 1720 | is-stream: 3.0.0 1721 | merge-stream: 2.0.0 1722 | npm-run-path: 5.2.0 1723 | onetime: 6.0.0 1724 | signal-exit: 4.1.0 1725 | strip-final-newline: 3.0.0 1726 | dev: true 1727 | 1728 | /fast-deep-equal@3.1.3: 1729 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1730 | dev: true 1731 | 1732 | /fast-glob@3.3.2: 1733 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1734 | engines: {node: '>=8.6.0'} 1735 | dependencies: 1736 | '@nodelib/fs.stat': 2.0.5 1737 | '@nodelib/fs.walk': 1.2.8 1738 | glob-parent: 5.1.2 1739 | merge2: 1.4.1 1740 | micromatch: 4.0.5 1741 | dev: true 1742 | 1743 | /fast-json-stable-stringify@2.1.0: 1744 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1745 | dev: true 1746 | 1747 | /fast-levenshtein@2.0.6: 1748 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1749 | dev: true 1750 | 1751 | /fastq@1.16.0: 1752 | resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} 1753 | dependencies: 1754 | reusify: 1.0.4 1755 | dev: true 1756 | 1757 | /file-entry-cache@6.0.1: 1758 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1759 | engines: {node: ^10.12.0 || >=12.0.0} 1760 | dependencies: 1761 | flat-cache: 3.2.0 1762 | dev: true 1763 | 1764 | /fill-range@7.0.1: 1765 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1766 | engines: {node: '>=8'} 1767 | dependencies: 1768 | to-regex-range: 5.0.1 1769 | dev: true 1770 | 1771 | /find-up@4.1.0: 1772 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1773 | engines: {node: '>=8'} 1774 | dependencies: 1775 | locate-path: 5.0.0 1776 | path-exists: 4.0.0 1777 | dev: true 1778 | 1779 | /find-up@5.0.0: 1780 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1781 | engines: {node: '>=10'} 1782 | dependencies: 1783 | locate-path: 6.0.0 1784 | path-exists: 4.0.0 1785 | dev: true 1786 | 1787 | /flat-cache@3.2.0: 1788 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1789 | engines: {node: ^10.12.0 || >=12.0.0} 1790 | dependencies: 1791 | flatted: 3.2.9 1792 | keyv: 4.5.4 1793 | rimraf: 3.0.2 1794 | dev: true 1795 | 1796 | /flatted@3.2.9: 1797 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 1798 | dev: true 1799 | 1800 | /for-each@0.3.3: 1801 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1802 | dependencies: 1803 | is-callable: 1.2.7 1804 | dev: true 1805 | 1806 | /form-data-encoder@1.7.2: 1807 | resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} 1808 | dev: false 1809 | 1810 | /form-data@4.0.0: 1811 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 1812 | engines: {node: '>= 6'} 1813 | dependencies: 1814 | asynckit: 0.4.0 1815 | combined-stream: 1.0.8 1816 | mime-types: 2.1.35 1817 | dev: false 1818 | 1819 | /formdata-node@4.4.1: 1820 | resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} 1821 | engines: {node: '>= 12.20'} 1822 | dependencies: 1823 | node-domexception: 1.0.0 1824 | web-streams-polyfill: 4.0.0-beta.3 1825 | dev: false 1826 | 1827 | /fs.realpath@1.0.0: 1828 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1829 | dev: true 1830 | 1831 | /fsevents@2.3.3: 1832 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1833 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1834 | os: [darwin] 1835 | requiresBuild: true 1836 | dev: true 1837 | optional: true 1838 | 1839 | /function-bind@1.1.2: 1840 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1841 | dev: true 1842 | 1843 | /function.prototype.name@1.1.6: 1844 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 1845 | engines: {node: '>= 0.4'} 1846 | dependencies: 1847 | call-bind: 1.0.5 1848 | define-properties: 1.2.1 1849 | es-abstract: 1.22.3 1850 | functions-have-names: 1.2.3 1851 | dev: true 1852 | 1853 | /functions-have-names@1.2.3: 1854 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1855 | dev: true 1856 | 1857 | /get-func-name@2.0.2: 1858 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 1859 | dev: true 1860 | 1861 | /get-intrinsic@1.2.2: 1862 | resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} 1863 | dependencies: 1864 | function-bind: 1.1.2 1865 | has-proto: 1.0.1 1866 | has-symbols: 1.0.3 1867 | hasown: 2.0.0 1868 | dev: true 1869 | 1870 | /get-stream@8.0.1: 1871 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 1872 | engines: {node: '>=16'} 1873 | dev: true 1874 | 1875 | /get-symbol-description@1.0.0: 1876 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1877 | engines: {node: '>= 0.4'} 1878 | dependencies: 1879 | call-bind: 1.0.5 1880 | get-intrinsic: 1.2.2 1881 | dev: true 1882 | 1883 | /get-tsconfig@4.7.2: 1884 | resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} 1885 | dependencies: 1886 | resolve-pkg-maps: 1.0.0 1887 | dev: true 1888 | 1889 | /glob-parent@5.1.2: 1890 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1891 | engines: {node: '>= 6'} 1892 | dependencies: 1893 | is-glob: 4.0.3 1894 | dev: true 1895 | 1896 | /glob-parent@6.0.2: 1897 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1898 | engines: {node: '>=10.13.0'} 1899 | dependencies: 1900 | is-glob: 4.0.3 1901 | dev: true 1902 | 1903 | /glob@7.2.3: 1904 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1905 | dependencies: 1906 | fs.realpath: 1.0.0 1907 | inflight: 1.0.6 1908 | inherits: 2.0.4 1909 | minimatch: 3.1.2 1910 | once: 1.4.0 1911 | path-is-absolute: 1.0.1 1912 | dev: true 1913 | 1914 | /globals@13.24.0: 1915 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1916 | engines: {node: '>=8'} 1917 | dependencies: 1918 | type-fest: 0.20.2 1919 | dev: true 1920 | 1921 | /globalthis@1.0.3: 1922 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1923 | engines: {node: '>= 0.4'} 1924 | dependencies: 1925 | define-properties: 1.2.1 1926 | dev: true 1927 | 1928 | /globby@11.1.0: 1929 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1930 | engines: {node: '>=10'} 1931 | dependencies: 1932 | array-union: 2.1.0 1933 | dir-glob: 3.0.1 1934 | fast-glob: 3.3.2 1935 | ignore: 5.3.0 1936 | merge2: 1.4.1 1937 | slash: 3.0.0 1938 | dev: true 1939 | 1940 | /globrex@0.1.2: 1941 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1942 | dev: true 1943 | 1944 | /gopd@1.0.1: 1945 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1946 | dependencies: 1947 | get-intrinsic: 1.2.2 1948 | dev: true 1949 | 1950 | /graphemer@1.4.0: 1951 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1952 | dev: true 1953 | 1954 | /has-bigints@1.0.2: 1955 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1956 | dev: true 1957 | 1958 | /has-flag@3.0.0: 1959 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1960 | engines: {node: '>=4'} 1961 | dev: true 1962 | 1963 | /has-flag@4.0.0: 1964 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1965 | engines: {node: '>=8'} 1966 | dev: true 1967 | 1968 | /has-property-descriptors@1.0.1: 1969 | resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} 1970 | dependencies: 1971 | get-intrinsic: 1.2.2 1972 | dev: true 1973 | 1974 | /has-proto@1.0.1: 1975 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1976 | engines: {node: '>= 0.4'} 1977 | dev: true 1978 | 1979 | /has-symbols@1.0.3: 1980 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1981 | engines: {node: '>= 0.4'} 1982 | dev: true 1983 | 1984 | /has-tostringtag@1.0.0: 1985 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1986 | engines: {node: '>= 0.4'} 1987 | dependencies: 1988 | has-symbols: 1.0.3 1989 | dev: true 1990 | 1991 | /hasown@2.0.0: 1992 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 1993 | engines: {node: '>= 0.4'} 1994 | dependencies: 1995 | function-bind: 1.1.2 1996 | dev: true 1997 | 1998 | /hosted-git-info@2.8.9: 1999 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 2000 | dev: true 2001 | 2002 | /human-signals@5.0.0: 2003 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 2004 | engines: {node: '>=16.17.0'} 2005 | dev: true 2006 | 2007 | /humanize-ms@1.2.1: 2008 | resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} 2009 | dependencies: 2010 | ms: 2.1.3 2011 | dev: false 2012 | 2013 | /ignore@5.3.0: 2014 | resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} 2015 | engines: {node: '>= 4'} 2016 | dev: true 2017 | 2018 | /import-fresh@3.3.0: 2019 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 2020 | engines: {node: '>=6'} 2021 | dependencies: 2022 | parent-module: 1.0.1 2023 | resolve-from: 4.0.0 2024 | dev: true 2025 | 2026 | /imurmurhash@0.1.4: 2027 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 2028 | engines: {node: '>=0.8.19'} 2029 | dev: true 2030 | 2031 | /indent-string@4.0.0: 2032 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 2033 | engines: {node: '>=8'} 2034 | dev: true 2035 | 2036 | /inflight@1.0.6: 2037 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 2038 | dependencies: 2039 | once: 1.4.0 2040 | wrappy: 1.0.2 2041 | dev: true 2042 | 2043 | /inherits@2.0.4: 2044 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 2045 | dev: true 2046 | 2047 | /internal-slot@1.0.6: 2048 | resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} 2049 | engines: {node: '>= 0.4'} 2050 | dependencies: 2051 | get-intrinsic: 1.2.2 2052 | hasown: 2.0.0 2053 | side-channel: 1.0.4 2054 | dev: true 2055 | 2056 | /is-alphabetical@1.0.4: 2057 | resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} 2058 | dev: true 2059 | 2060 | /is-alphanumerical@1.0.4: 2061 | resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} 2062 | dependencies: 2063 | is-alphabetical: 1.0.4 2064 | is-decimal: 1.0.4 2065 | dev: true 2066 | 2067 | /is-array-buffer@3.0.2: 2068 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 2069 | dependencies: 2070 | call-bind: 1.0.5 2071 | get-intrinsic: 1.2.2 2072 | is-typed-array: 1.1.12 2073 | dev: true 2074 | 2075 | /is-arrayish@0.2.1: 2076 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 2077 | dev: true 2078 | 2079 | /is-bigint@1.0.4: 2080 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 2081 | dependencies: 2082 | has-bigints: 1.0.2 2083 | dev: true 2084 | 2085 | /is-boolean-object@1.1.2: 2086 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 2087 | engines: {node: '>= 0.4'} 2088 | dependencies: 2089 | call-bind: 1.0.5 2090 | has-tostringtag: 1.0.0 2091 | dev: true 2092 | 2093 | /is-buffer@1.1.6: 2094 | resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} 2095 | dev: false 2096 | 2097 | /is-builtin-module@3.2.1: 2098 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 2099 | engines: {node: '>=6'} 2100 | dependencies: 2101 | builtin-modules: 3.3.0 2102 | dev: true 2103 | 2104 | /is-callable@1.2.7: 2105 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 2106 | engines: {node: '>= 0.4'} 2107 | dev: true 2108 | 2109 | /is-core-module@2.13.1: 2110 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 2111 | dependencies: 2112 | hasown: 2.0.0 2113 | dev: true 2114 | 2115 | /is-date-object@1.0.5: 2116 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 2117 | engines: {node: '>= 0.4'} 2118 | dependencies: 2119 | has-tostringtag: 1.0.0 2120 | dev: true 2121 | 2122 | /is-decimal@1.0.4: 2123 | resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} 2124 | dev: true 2125 | 2126 | /is-extglob@2.1.1: 2127 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 2128 | engines: {node: '>=0.10.0'} 2129 | dev: true 2130 | 2131 | /is-glob@4.0.3: 2132 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2133 | engines: {node: '>=0.10.0'} 2134 | dependencies: 2135 | is-extglob: 2.1.1 2136 | dev: true 2137 | 2138 | /is-hexadecimal@1.0.4: 2139 | resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} 2140 | dev: true 2141 | 2142 | /is-negative-zero@2.0.2: 2143 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 2144 | engines: {node: '>= 0.4'} 2145 | dev: true 2146 | 2147 | /is-number-object@1.0.7: 2148 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 2149 | engines: {node: '>= 0.4'} 2150 | dependencies: 2151 | has-tostringtag: 1.0.0 2152 | dev: true 2153 | 2154 | /is-number@7.0.0: 2155 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 2156 | engines: {node: '>=0.12.0'} 2157 | dev: true 2158 | 2159 | /is-path-inside@3.0.3: 2160 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 2161 | engines: {node: '>=8'} 2162 | dev: true 2163 | 2164 | /is-regex@1.1.4: 2165 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 2166 | engines: {node: '>= 0.4'} 2167 | dependencies: 2168 | call-bind: 1.0.5 2169 | has-tostringtag: 1.0.0 2170 | dev: true 2171 | 2172 | /is-shared-array-buffer@1.0.2: 2173 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 2174 | dependencies: 2175 | call-bind: 1.0.5 2176 | dev: true 2177 | 2178 | /is-stream@3.0.0: 2179 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 2180 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2181 | dev: true 2182 | 2183 | /is-string@1.0.7: 2184 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 2185 | engines: {node: '>= 0.4'} 2186 | dependencies: 2187 | has-tostringtag: 1.0.0 2188 | dev: true 2189 | 2190 | /is-symbol@1.0.4: 2191 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 2192 | engines: {node: '>= 0.4'} 2193 | dependencies: 2194 | has-symbols: 1.0.3 2195 | dev: true 2196 | 2197 | /is-typed-array@1.1.12: 2198 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} 2199 | engines: {node: '>= 0.4'} 2200 | dependencies: 2201 | which-typed-array: 1.1.13 2202 | dev: true 2203 | 2204 | /is-weakref@1.0.2: 2205 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 2206 | dependencies: 2207 | call-bind: 1.0.5 2208 | dev: true 2209 | 2210 | /isarray@2.0.5: 2211 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 2212 | dev: true 2213 | 2214 | /isexe@2.0.0: 2215 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 2216 | dev: true 2217 | 2218 | /js-tokens@4.0.0: 2219 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 2220 | dev: true 2221 | 2222 | /js-yaml@4.1.0: 2223 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 2224 | hasBin: true 2225 | dependencies: 2226 | argparse: 2.0.1 2227 | dev: true 2228 | 2229 | /jsdoc-type-pratt-parser@4.0.0: 2230 | resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} 2231 | engines: {node: '>=12.0.0'} 2232 | dev: true 2233 | 2234 | /jsesc@0.5.0: 2235 | resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 2236 | hasBin: true 2237 | dev: true 2238 | 2239 | /jsesc@3.0.2: 2240 | resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} 2241 | engines: {node: '>=6'} 2242 | hasBin: true 2243 | dev: true 2244 | 2245 | /json-buffer@3.0.1: 2246 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 2247 | dev: true 2248 | 2249 | /json-parse-even-better-errors@2.3.1: 2250 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 2251 | dev: true 2252 | 2253 | /json-schema-traverse@0.4.1: 2254 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 2255 | dev: true 2256 | 2257 | /json-stable-stringify-without-jsonify@1.0.1: 2258 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 2259 | dev: true 2260 | 2261 | /jsonc-eslint-parser@2.4.0: 2262 | resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} 2263 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2264 | dependencies: 2265 | acorn: 8.11.3 2266 | eslint-visitor-keys: 3.4.3 2267 | espree: 9.6.1 2268 | semver: 7.5.4 2269 | dev: true 2270 | 2271 | /jsonc-parser@3.2.0: 2272 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 2273 | dev: true 2274 | 2275 | /jsx-ast-utils@3.3.5: 2276 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 2277 | engines: {node: '>=4.0'} 2278 | dependencies: 2279 | array-includes: 3.1.7 2280 | array.prototype.flat: 1.3.2 2281 | object.assign: 4.1.5 2282 | object.values: 1.1.7 2283 | dev: true 2284 | 2285 | /keyv@4.5.4: 2286 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 2287 | dependencies: 2288 | json-buffer: 3.0.1 2289 | dev: true 2290 | 2291 | /levn@0.4.1: 2292 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 2293 | engines: {node: '>= 0.8.0'} 2294 | dependencies: 2295 | prelude-ls: 1.2.1 2296 | type-check: 0.4.0 2297 | dev: true 2298 | 2299 | /lines-and-columns@1.2.4: 2300 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 2301 | dev: true 2302 | 2303 | /local-pkg@0.5.0: 2304 | resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} 2305 | engines: {node: '>=14'} 2306 | dependencies: 2307 | mlly: 1.5.0 2308 | pkg-types: 1.0.3 2309 | dev: true 2310 | 2311 | /locate-path@5.0.0: 2312 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 2313 | engines: {node: '>=8'} 2314 | dependencies: 2315 | p-locate: 4.1.0 2316 | dev: true 2317 | 2318 | /locate-path@6.0.0: 2319 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 2320 | engines: {node: '>=10'} 2321 | dependencies: 2322 | p-locate: 5.0.0 2323 | dev: true 2324 | 2325 | /lodash.merge@4.6.2: 2326 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 2327 | dev: true 2328 | 2329 | /lodash@4.17.21: 2330 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 2331 | dev: true 2332 | 2333 | /loupe@2.3.7: 2334 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 2335 | dependencies: 2336 | get-func-name: 2.0.2 2337 | dev: true 2338 | 2339 | /lru-cache@6.0.0: 2340 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 2341 | engines: {node: '>=10'} 2342 | dependencies: 2343 | yallist: 4.0.0 2344 | dev: true 2345 | 2346 | /magic-string@0.30.5: 2347 | resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} 2348 | engines: {node: '>=12'} 2349 | dependencies: 2350 | '@jridgewell/sourcemap-codec': 1.4.15 2351 | dev: true 2352 | 2353 | /md5@2.3.0: 2354 | resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} 2355 | dependencies: 2356 | charenc: 0.0.2 2357 | crypt: 0.0.2 2358 | is-buffer: 1.1.6 2359 | dev: false 2360 | 2361 | /mdast-util-from-markdown@0.8.5: 2362 | resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} 2363 | dependencies: 2364 | '@types/mdast': 3.0.15 2365 | mdast-util-to-string: 2.0.0 2366 | micromark: 2.11.4 2367 | parse-entities: 2.0.0 2368 | unist-util-stringify-position: 2.0.3 2369 | transitivePeerDependencies: 2370 | - supports-color 2371 | dev: true 2372 | 2373 | /mdast-util-to-string@2.0.0: 2374 | resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} 2375 | dev: true 2376 | 2377 | /merge-stream@2.0.0: 2378 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 2379 | dev: true 2380 | 2381 | /merge2@1.4.1: 2382 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 2383 | engines: {node: '>= 8'} 2384 | dev: true 2385 | 2386 | /micromark@2.11.4: 2387 | resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} 2388 | dependencies: 2389 | debug: 4.3.4 2390 | parse-entities: 2.0.0 2391 | transitivePeerDependencies: 2392 | - supports-color 2393 | dev: true 2394 | 2395 | /micromatch@4.0.5: 2396 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2397 | engines: {node: '>=8.6'} 2398 | dependencies: 2399 | braces: 3.0.2 2400 | picomatch: 2.3.1 2401 | dev: true 2402 | 2403 | /mime-db@1.52.0: 2404 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 2405 | engines: {node: '>= 0.6'} 2406 | dev: false 2407 | 2408 | /mime-types@2.1.35: 2409 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 2410 | engines: {node: '>= 0.6'} 2411 | dependencies: 2412 | mime-db: 1.52.0 2413 | dev: false 2414 | 2415 | /mimic-fn@4.0.0: 2416 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 2417 | engines: {node: '>=12'} 2418 | dev: true 2419 | 2420 | /min-indent@1.0.1: 2421 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 2422 | engines: {node: '>=4'} 2423 | dev: true 2424 | 2425 | /minimatch@3.1.2: 2426 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2427 | dependencies: 2428 | brace-expansion: 1.1.11 2429 | dev: true 2430 | 2431 | /minimatch@9.0.3: 2432 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 2433 | engines: {node: '>=16 || 14 >=14.17'} 2434 | dependencies: 2435 | brace-expansion: 2.0.1 2436 | dev: true 2437 | 2438 | /mlly@1.5.0: 2439 | resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} 2440 | dependencies: 2441 | acorn: 8.11.3 2442 | pathe: 1.1.2 2443 | pkg-types: 1.0.3 2444 | ufo: 1.3.2 2445 | dev: true 2446 | 2447 | /ms@2.1.2: 2448 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2449 | dev: true 2450 | 2451 | /ms@2.1.3: 2452 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2453 | 2454 | /nanoid@3.3.7: 2455 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 2456 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2457 | hasBin: true 2458 | dev: true 2459 | 2460 | /natural-compare@1.4.0: 2461 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2462 | dev: true 2463 | 2464 | /node-domexception@1.0.0: 2465 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 2466 | engines: {node: '>=10.5.0'} 2467 | dev: false 2468 | 2469 | /node-fetch@2.7.0: 2470 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 2471 | engines: {node: 4.x || >=6.0.0} 2472 | peerDependencies: 2473 | encoding: ^0.1.0 2474 | peerDependenciesMeta: 2475 | encoding: 2476 | optional: true 2477 | dependencies: 2478 | whatwg-url: 5.0.0 2479 | dev: false 2480 | 2481 | /normalize-package-data@2.5.0: 2482 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 2483 | dependencies: 2484 | hosted-git-info: 2.8.9 2485 | resolve: 1.22.8 2486 | semver: 5.7.2 2487 | validate-npm-package-license: 3.0.4 2488 | dev: true 2489 | 2490 | /npm-run-path@5.2.0: 2491 | resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} 2492 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 2493 | dependencies: 2494 | path-key: 4.0.0 2495 | dev: true 2496 | 2497 | /nth-check@2.1.1: 2498 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 2499 | dependencies: 2500 | boolbase: 1.0.0 2501 | dev: true 2502 | 2503 | /object-inspect@1.13.1: 2504 | resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} 2505 | dev: true 2506 | 2507 | /object-keys@1.1.1: 2508 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 2509 | engines: {node: '>= 0.4'} 2510 | dev: true 2511 | 2512 | /object.assign@4.1.5: 2513 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 2514 | engines: {node: '>= 0.4'} 2515 | dependencies: 2516 | call-bind: 1.0.5 2517 | define-properties: 1.2.1 2518 | has-symbols: 1.0.3 2519 | object-keys: 1.1.1 2520 | dev: true 2521 | 2522 | /object.values@1.1.7: 2523 | resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} 2524 | engines: {node: '>= 0.4'} 2525 | dependencies: 2526 | call-bind: 1.0.5 2527 | define-properties: 1.2.1 2528 | es-abstract: 1.22.3 2529 | dev: true 2530 | 2531 | /once@1.4.0: 2532 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2533 | dependencies: 2534 | wrappy: 1.0.2 2535 | dev: true 2536 | 2537 | /onetime@6.0.0: 2538 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 2539 | engines: {node: '>=12'} 2540 | dependencies: 2541 | mimic-fn: 4.0.0 2542 | dev: true 2543 | 2544 | /openai@4.25.0: 2545 | resolution: {integrity: sha512-qLMFOizjxKuDfQkBrczZPYo6XVL4bdcuz9MR11Q+M91kGcs8dQw+O90nRcC+qWuhaGphQkfXQJMn4cd7Yew3Kg==} 2546 | hasBin: true 2547 | dependencies: 2548 | '@types/node': 18.19.8 2549 | '@types/node-fetch': 2.6.11 2550 | abort-controller: 3.0.0 2551 | agentkeepalive: 4.5.0 2552 | digest-fetch: 1.3.0 2553 | form-data-encoder: 1.7.2 2554 | formdata-node: 4.4.1 2555 | node-fetch: 2.7.0 2556 | web-streams-polyfill: 3.3.2 2557 | transitivePeerDependencies: 2558 | - encoding 2559 | dev: false 2560 | 2561 | /optionator@0.9.3: 2562 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 2563 | engines: {node: '>= 0.8.0'} 2564 | dependencies: 2565 | '@aashutoshrathi/word-wrap': 1.2.6 2566 | deep-is: 0.1.4 2567 | fast-levenshtein: 2.0.6 2568 | levn: 0.4.1 2569 | prelude-ls: 1.2.1 2570 | type-check: 0.4.0 2571 | dev: true 2572 | 2573 | /p-limit@2.3.0: 2574 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 2575 | engines: {node: '>=6'} 2576 | dependencies: 2577 | p-try: 2.2.0 2578 | dev: true 2579 | 2580 | /p-limit@3.1.0: 2581 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2582 | engines: {node: '>=10'} 2583 | dependencies: 2584 | yocto-queue: 0.1.0 2585 | dev: true 2586 | 2587 | /p-limit@5.0.0: 2588 | resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} 2589 | engines: {node: '>=18'} 2590 | dependencies: 2591 | yocto-queue: 1.0.0 2592 | dev: true 2593 | 2594 | /p-locate@4.1.0: 2595 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 2596 | engines: {node: '>=8'} 2597 | dependencies: 2598 | p-limit: 2.3.0 2599 | dev: true 2600 | 2601 | /p-locate@5.0.0: 2602 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2603 | engines: {node: '>=10'} 2604 | dependencies: 2605 | p-limit: 3.1.0 2606 | dev: true 2607 | 2608 | /p-try@2.2.0: 2609 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 2610 | engines: {node: '>=6'} 2611 | dev: true 2612 | 2613 | /parent-module@1.0.1: 2614 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2615 | engines: {node: '>=6'} 2616 | dependencies: 2617 | callsites: 3.1.0 2618 | dev: true 2619 | 2620 | /parse-entities@2.0.0: 2621 | resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} 2622 | dependencies: 2623 | character-entities: 1.2.4 2624 | character-entities-legacy: 1.1.4 2625 | character-reference-invalid: 1.1.4 2626 | is-alphanumerical: 1.0.4 2627 | is-decimal: 1.0.4 2628 | is-hexadecimal: 1.0.4 2629 | dev: true 2630 | 2631 | /parse-gitignore@2.0.0: 2632 | resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} 2633 | engines: {node: '>=14'} 2634 | dev: true 2635 | 2636 | /parse-json@5.2.0: 2637 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 2638 | engines: {node: '>=8'} 2639 | dependencies: 2640 | '@babel/code-frame': 7.23.5 2641 | error-ex: 1.3.2 2642 | json-parse-even-better-errors: 2.3.1 2643 | lines-and-columns: 1.2.4 2644 | dev: true 2645 | 2646 | /path-exists@4.0.0: 2647 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2648 | engines: {node: '>=8'} 2649 | dev: true 2650 | 2651 | /path-is-absolute@1.0.1: 2652 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2653 | engines: {node: '>=0.10.0'} 2654 | dev: true 2655 | 2656 | /path-key@3.1.1: 2657 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2658 | engines: {node: '>=8'} 2659 | dev: true 2660 | 2661 | /path-key@4.0.0: 2662 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 2663 | engines: {node: '>=12'} 2664 | dev: true 2665 | 2666 | /path-parse@1.0.7: 2667 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2668 | dev: true 2669 | 2670 | /path-type@4.0.0: 2671 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 2672 | engines: {node: '>=8'} 2673 | dev: true 2674 | 2675 | /pathe@1.1.2: 2676 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 2677 | dev: true 2678 | 2679 | /pathval@1.1.1: 2680 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 2681 | dev: true 2682 | 2683 | /picocolors@1.0.0: 2684 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2685 | dev: true 2686 | 2687 | /picomatch@2.3.1: 2688 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2689 | engines: {node: '>=8.6'} 2690 | dev: true 2691 | 2692 | /pkg-types@1.0.3: 2693 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 2694 | dependencies: 2695 | jsonc-parser: 3.2.0 2696 | mlly: 1.5.0 2697 | pathe: 1.1.2 2698 | dev: true 2699 | 2700 | /pluralize@8.0.0: 2701 | resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 2702 | engines: {node: '>=4'} 2703 | dev: true 2704 | 2705 | /postcss-selector-parser@6.0.15: 2706 | resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} 2707 | engines: {node: '>=4'} 2708 | dependencies: 2709 | cssesc: 3.0.0 2710 | util-deprecate: 1.0.2 2711 | dev: true 2712 | 2713 | /postcss@8.4.33: 2714 | resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} 2715 | engines: {node: ^10 || ^12 || >=14} 2716 | dependencies: 2717 | nanoid: 3.3.7 2718 | picocolors: 1.0.0 2719 | source-map-js: 1.0.2 2720 | dev: true 2721 | 2722 | /prelude-ls@1.2.1: 2723 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2724 | engines: {node: '>= 0.8.0'} 2725 | dev: true 2726 | 2727 | /pretty-format@29.7.0: 2728 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 2729 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2730 | dependencies: 2731 | '@jest/schemas': 29.6.3 2732 | ansi-styles: 5.2.0 2733 | react-is: 18.2.0 2734 | dev: true 2735 | 2736 | /punycode@2.3.1: 2737 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 2738 | engines: {node: '>=6'} 2739 | dev: true 2740 | 2741 | /queue-microtask@1.2.3: 2742 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2743 | dev: true 2744 | 2745 | /react-is@18.2.0: 2746 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 2747 | dev: true 2748 | 2749 | /read-pkg-up@7.0.1: 2750 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 2751 | engines: {node: '>=8'} 2752 | dependencies: 2753 | find-up: 4.1.0 2754 | read-pkg: 5.2.0 2755 | type-fest: 0.8.1 2756 | dev: true 2757 | 2758 | /read-pkg@5.2.0: 2759 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 2760 | engines: {node: '>=8'} 2761 | dependencies: 2762 | '@types/normalize-package-data': 2.4.4 2763 | normalize-package-data: 2.5.0 2764 | parse-json: 5.2.0 2765 | type-fest: 0.6.0 2766 | dev: true 2767 | 2768 | /regexp-tree@0.1.27: 2769 | resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} 2770 | hasBin: true 2771 | dev: true 2772 | 2773 | /regexp.prototype.flags@1.5.1: 2774 | resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} 2775 | engines: {node: '>= 0.4'} 2776 | dependencies: 2777 | call-bind: 1.0.5 2778 | define-properties: 1.2.1 2779 | set-function-name: 2.0.1 2780 | dev: true 2781 | 2782 | /regjsparser@0.10.0: 2783 | resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} 2784 | hasBin: true 2785 | dependencies: 2786 | jsesc: 0.5.0 2787 | dev: true 2788 | 2789 | /resolve-from@4.0.0: 2790 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2791 | engines: {node: '>=4'} 2792 | dev: true 2793 | 2794 | /resolve-pkg-maps@1.0.0: 2795 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 2796 | dev: true 2797 | 2798 | /resolve@1.22.8: 2799 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 2800 | hasBin: true 2801 | dependencies: 2802 | is-core-module: 2.13.1 2803 | path-parse: 1.0.7 2804 | supports-preserve-symlinks-flag: 1.0.0 2805 | dev: true 2806 | 2807 | /reusify@1.0.4: 2808 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2809 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2810 | dev: true 2811 | 2812 | /rimraf@3.0.2: 2813 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2814 | hasBin: true 2815 | dependencies: 2816 | glob: 7.2.3 2817 | dev: true 2818 | 2819 | /rollup@4.9.6: 2820 | resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} 2821 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 2822 | hasBin: true 2823 | dependencies: 2824 | '@types/estree': 1.0.5 2825 | optionalDependencies: 2826 | '@rollup/rollup-android-arm-eabi': 4.9.6 2827 | '@rollup/rollup-android-arm64': 4.9.6 2828 | '@rollup/rollup-darwin-arm64': 4.9.6 2829 | '@rollup/rollup-darwin-x64': 4.9.6 2830 | '@rollup/rollup-linux-arm-gnueabihf': 4.9.6 2831 | '@rollup/rollup-linux-arm64-gnu': 4.9.6 2832 | '@rollup/rollup-linux-arm64-musl': 4.9.6 2833 | '@rollup/rollup-linux-riscv64-gnu': 4.9.6 2834 | '@rollup/rollup-linux-x64-gnu': 4.9.6 2835 | '@rollup/rollup-linux-x64-musl': 4.9.6 2836 | '@rollup/rollup-win32-arm64-msvc': 4.9.6 2837 | '@rollup/rollup-win32-ia32-msvc': 4.9.6 2838 | '@rollup/rollup-win32-x64-msvc': 4.9.6 2839 | fsevents: 2.3.3 2840 | dev: true 2841 | 2842 | /run-parallel@1.2.0: 2843 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2844 | dependencies: 2845 | queue-microtask: 1.2.3 2846 | dev: true 2847 | 2848 | /safe-array-concat@1.1.0: 2849 | resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} 2850 | engines: {node: '>=0.4'} 2851 | dependencies: 2852 | call-bind: 1.0.5 2853 | get-intrinsic: 1.2.2 2854 | has-symbols: 1.0.3 2855 | isarray: 2.0.5 2856 | dev: true 2857 | 2858 | /safe-regex-test@1.0.2: 2859 | resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} 2860 | engines: {node: '>= 0.4'} 2861 | dependencies: 2862 | call-bind: 1.0.5 2863 | get-intrinsic: 1.2.2 2864 | is-regex: 1.1.4 2865 | dev: true 2866 | 2867 | /semver@5.7.2: 2868 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 2869 | hasBin: true 2870 | dev: true 2871 | 2872 | /semver@7.5.4: 2873 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2874 | engines: {node: '>=10'} 2875 | hasBin: true 2876 | dependencies: 2877 | lru-cache: 6.0.0 2878 | dev: true 2879 | 2880 | /set-function-length@1.2.0: 2881 | resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} 2882 | engines: {node: '>= 0.4'} 2883 | dependencies: 2884 | define-data-property: 1.1.1 2885 | function-bind: 1.1.2 2886 | get-intrinsic: 1.2.2 2887 | gopd: 1.0.1 2888 | has-property-descriptors: 1.0.1 2889 | dev: true 2890 | 2891 | /set-function-name@2.0.1: 2892 | resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} 2893 | engines: {node: '>= 0.4'} 2894 | dependencies: 2895 | define-data-property: 1.1.1 2896 | functions-have-names: 1.2.3 2897 | has-property-descriptors: 1.0.1 2898 | dev: true 2899 | 2900 | /shebang-command@2.0.0: 2901 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2902 | engines: {node: '>=8'} 2903 | dependencies: 2904 | shebang-regex: 3.0.0 2905 | dev: true 2906 | 2907 | /shebang-regex@3.0.0: 2908 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2909 | engines: {node: '>=8'} 2910 | dev: true 2911 | 2912 | /side-channel@1.0.4: 2913 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 2914 | dependencies: 2915 | call-bind: 1.0.5 2916 | get-intrinsic: 1.2.2 2917 | object-inspect: 1.13.1 2918 | dev: true 2919 | 2920 | /siginfo@2.0.0: 2921 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 2922 | dev: true 2923 | 2924 | /signal-exit@4.1.0: 2925 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 2926 | engines: {node: '>=14'} 2927 | dev: true 2928 | 2929 | /slash@3.0.0: 2930 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2931 | engines: {node: '>=8'} 2932 | dev: true 2933 | 2934 | /source-map-js@1.0.2: 2935 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2936 | engines: {node: '>=0.10.0'} 2937 | dev: true 2938 | 2939 | /spdx-correct@3.2.0: 2940 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 2941 | dependencies: 2942 | spdx-expression-parse: 3.0.1 2943 | spdx-license-ids: 3.0.16 2944 | dev: true 2945 | 2946 | /spdx-exceptions@2.3.0: 2947 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 2948 | dev: true 2949 | 2950 | /spdx-expression-parse@3.0.1: 2951 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 2952 | dependencies: 2953 | spdx-exceptions: 2.3.0 2954 | spdx-license-ids: 3.0.16 2955 | dev: true 2956 | 2957 | /spdx-expression-parse@4.0.0: 2958 | resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} 2959 | dependencies: 2960 | spdx-exceptions: 2.3.0 2961 | spdx-license-ids: 3.0.16 2962 | dev: true 2963 | 2964 | /spdx-license-ids@3.0.16: 2965 | resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} 2966 | dev: true 2967 | 2968 | /stackback@0.0.2: 2969 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 2970 | dev: true 2971 | 2972 | /std-env@3.7.0: 2973 | resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} 2974 | dev: true 2975 | 2976 | /string.prototype.trim@1.2.8: 2977 | resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} 2978 | engines: {node: '>= 0.4'} 2979 | dependencies: 2980 | call-bind: 1.0.5 2981 | define-properties: 1.2.1 2982 | es-abstract: 1.22.3 2983 | dev: true 2984 | 2985 | /string.prototype.trimend@1.0.7: 2986 | resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} 2987 | dependencies: 2988 | call-bind: 1.0.5 2989 | define-properties: 1.2.1 2990 | es-abstract: 1.22.3 2991 | dev: true 2992 | 2993 | /string.prototype.trimstart@1.0.7: 2994 | resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} 2995 | dependencies: 2996 | call-bind: 1.0.5 2997 | define-properties: 1.2.1 2998 | es-abstract: 1.22.3 2999 | dev: true 3000 | 3001 | /strip-ansi@6.0.1: 3002 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 3003 | engines: {node: '>=8'} 3004 | dependencies: 3005 | ansi-regex: 5.0.1 3006 | dev: true 3007 | 3008 | /strip-final-newline@3.0.0: 3009 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 3010 | engines: {node: '>=12'} 3011 | dev: true 3012 | 3013 | /strip-indent@3.0.0: 3014 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 3015 | engines: {node: '>=8'} 3016 | dependencies: 3017 | min-indent: 1.0.1 3018 | dev: true 3019 | 3020 | /strip-json-comments@3.1.1: 3021 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 3022 | engines: {node: '>=8'} 3023 | dev: true 3024 | 3025 | /strip-literal@1.3.0: 3026 | resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} 3027 | dependencies: 3028 | acorn: 8.11.3 3029 | dev: true 3030 | 3031 | /supports-color@5.5.0: 3032 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 3033 | engines: {node: '>=4'} 3034 | dependencies: 3035 | has-flag: 3.0.0 3036 | dev: true 3037 | 3038 | /supports-color@7.2.0: 3039 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 3040 | engines: {node: '>=8'} 3041 | dependencies: 3042 | has-flag: 4.0.0 3043 | dev: true 3044 | 3045 | /supports-preserve-symlinks-flag@1.0.0: 3046 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 3047 | engines: {node: '>= 0.4'} 3048 | dev: true 3049 | 3050 | /text-table@0.2.0: 3051 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 3052 | dev: true 3053 | 3054 | /tinybench@2.6.0: 3055 | resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} 3056 | dev: true 3057 | 3058 | /tinypool@0.8.2: 3059 | resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} 3060 | engines: {node: '>=14.0.0'} 3061 | dev: true 3062 | 3063 | /tinyspy@2.2.0: 3064 | resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} 3065 | engines: {node: '>=14.0.0'} 3066 | dev: true 3067 | 3068 | /to-regex-range@5.0.1: 3069 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 3070 | engines: {node: '>=8.0'} 3071 | dependencies: 3072 | is-number: 7.0.0 3073 | dev: true 3074 | 3075 | /tr46@0.0.3: 3076 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 3077 | dev: false 3078 | 3079 | /ts-api-utils@1.0.3(typescript@5.3.3): 3080 | resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} 3081 | engines: {node: '>=16.13.0'} 3082 | peerDependencies: 3083 | typescript: '>=4.2.0' 3084 | dependencies: 3085 | typescript: 5.3.3 3086 | dev: true 3087 | 3088 | /tsconfck@3.0.1(typescript@5.3.3): 3089 | resolution: {integrity: sha512-7ppiBlF3UEddCLeI1JRx5m2Ryq+xk4JrZuq4EuYXykipebaq1dV0Fhgr1hb7CkmHt32QSgOZlcqVLEtHBG4/mg==} 3090 | engines: {node: ^18 || >=20} 3091 | hasBin: true 3092 | peerDependencies: 3093 | typescript: ^5.0.0 3094 | peerDependenciesMeta: 3095 | typescript: 3096 | optional: true 3097 | dependencies: 3098 | typescript: 5.3.3 3099 | dev: true 3100 | 3101 | /tsx@4.7.0: 3102 | resolution: {integrity: sha512-I+t79RYPlEYlHn9a+KzwrvEwhJg35h/1zHsLC2JXvhC2mdynMv6Zxzvhv5EMV6VF5qJlLlkSnMVvdZV3PSIGcg==} 3103 | engines: {node: '>=18.0.0'} 3104 | hasBin: true 3105 | dependencies: 3106 | esbuild: 0.19.11 3107 | get-tsconfig: 4.7.2 3108 | optionalDependencies: 3109 | fsevents: 2.3.3 3110 | dev: true 3111 | 3112 | /type-check@0.4.0: 3113 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 3114 | engines: {node: '>= 0.8.0'} 3115 | dependencies: 3116 | prelude-ls: 1.2.1 3117 | dev: true 3118 | 3119 | /type-detect@4.0.8: 3120 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 3121 | engines: {node: '>=4'} 3122 | dev: true 3123 | 3124 | /type-fest@0.20.2: 3125 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 3126 | engines: {node: '>=10'} 3127 | dev: true 3128 | 3129 | /type-fest@0.6.0: 3130 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 3131 | engines: {node: '>=8'} 3132 | dev: true 3133 | 3134 | /type-fest@0.8.1: 3135 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 3136 | engines: {node: '>=8'} 3137 | dev: true 3138 | 3139 | /typed-array-buffer@1.0.0: 3140 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} 3141 | engines: {node: '>= 0.4'} 3142 | dependencies: 3143 | call-bind: 1.0.5 3144 | get-intrinsic: 1.2.2 3145 | is-typed-array: 1.1.12 3146 | dev: true 3147 | 3148 | /typed-array-byte-length@1.0.0: 3149 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} 3150 | engines: {node: '>= 0.4'} 3151 | dependencies: 3152 | call-bind: 1.0.5 3153 | for-each: 0.3.3 3154 | has-proto: 1.0.1 3155 | is-typed-array: 1.1.12 3156 | dev: true 3157 | 3158 | /typed-array-byte-offset@1.0.0: 3159 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} 3160 | engines: {node: '>= 0.4'} 3161 | dependencies: 3162 | available-typed-arrays: 1.0.5 3163 | call-bind: 1.0.5 3164 | for-each: 0.3.3 3165 | has-proto: 1.0.1 3166 | is-typed-array: 1.1.12 3167 | dev: true 3168 | 3169 | /typed-array-length@1.0.4: 3170 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 3171 | dependencies: 3172 | call-bind: 1.0.5 3173 | for-each: 0.3.3 3174 | is-typed-array: 1.1.12 3175 | dev: true 3176 | 3177 | /typescript@5.3.3: 3178 | resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} 3179 | engines: {node: '>=14.17'} 3180 | hasBin: true 3181 | dev: true 3182 | 3183 | /ufo@1.3.2: 3184 | resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} 3185 | dev: true 3186 | 3187 | /unbox-primitive@1.0.2: 3188 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 3189 | dependencies: 3190 | call-bind: 1.0.5 3191 | has-bigints: 1.0.2 3192 | has-symbols: 1.0.3 3193 | which-boxed-primitive: 1.0.2 3194 | dev: true 3195 | 3196 | /undici-types@5.26.5: 3197 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 3198 | 3199 | /unist-util-stringify-position@2.0.3: 3200 | resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} 3201 | dependencies: 3202 | '@types/unist': 2.0.10 3203 | dev: true 3204 | 3205 | /uri-js@4.4.1: 3206 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 3207 | dependencies: 3208 | punycode: 2.3.1 3209 | dev: true 3210 | 3211 | /util-deprecate@1.0.2: 3212 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 3213 | dev: true 3214 | 3215 | /validate-npm-package-license@3.0.4: 3216 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 3217 | dependencies: 3218 | spdx-correct: 3.2.0 3219 | spdx-expression-parse: 3.0.1 3220 | dev: true 3221 | 3222 | /vite-node@1.2.1(@types/node@20.11.5): 3223 | resolution: {integrity: sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==} 3224 | engines: {node: ^18.0.0 || >=20.0.0} 3225 | hasBin: true 3226 | dependencies: 3227 | cac: 6.7.14 3228 | debug: 4.3.4 3229 | pathe: 1.1.2 3230 | picocolors: 1.0.0 3231 | vite: 5.0.12(@types/node@20.11.5) 3232 | transitivePeerDependencies: 3233 | - '@types/node' 3234 | - less 3235 | - lightningcss 3236 | - sass 3237 | - stylus 3238 | - sugarss 3239 | - supports-color 3240 | - terser 3241 | dev: true 3242 | 3243 | /vite-tsconfig-paths@4.3.1(typescript@5.3.3): 3244 | resolution: {integrity: sha512-cfgJwcGOsIxXOLU/nELPny2/LUD/lcf1IbfyeKTv2bsupVbTH/xpFtdQlBmIP1GEK2CjjLxYhFfB+QODFAx5aw==} 3245 | peerDependencies: 3246 | vite: '*' 3247 | peerDependenciesMeta: 3248 | vite: 3249 | optional: true 3250 | dependencies: 3251 | debug: 4.3.4 3252 | globrex: 0.1.2 3253 | tsconfck: 3.0.1(typescript@5.3.3) 3254 | transitivePeerDependencies: 3255 | - supports-color 3256 | - typescript 3257 | dev: true 3258 | 3259 | /vite@5.0.12(@types/node@20.11.5): 3260 | resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} 3261 | engines: {node: ^18.0.0 || >=20.0.0} 3262 | hasBin: true 3263 | peerDependencies: 3264 | '@types/node': ^18.0.0 || >=20.0.0 3265 | less: '*' 3266 | lightningcss: ^1.21.0 3267 | sass: '*' 3268 | stylus: '*' 3269 | sugarss: '*' 3270 | terser: ^5.4.0 3271 | peerDependenciesMeta: 3272 | '@types/node': 3273 | optional: true 3274 | less: 3275 | optional: true 3276 | lightningcss: 3277 | optional: true 3278 | sass: 3279 | optional: true 3280 | stylus: 3281 | optional: true 3282 | sugarss: 3283 | optional: true 3284 | terser: 3285 | optional: true 3286 | dependencies: 3287 | '@types/node': 20.11.5 3288 | esbuild: 0.19.11 3289 | postcss: 8.4.33 3290 | rollup: 4.9.6 3291 | optionalDependencies: 3292 | fsevents: 2.3.3 3293 | dev: true 3294 | 3295 | /vitest@1.2.1(@types/node@20.11.5): 3296 | resolution: {integrity: sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==} 3297 | engines: {node: ^18.0.0 || >=20.0.0} 3298 | hasBin: true 3299 | peerDependencies: 3300 | '@edge-runtime/vm': '*' 3301 | '@types/node': ^18.0.0 || >=20.0.0 3302 | '@vitest/browser': ^1.0.0 3303 | '@vitest/ui': ^1.0.0 3304 | happy-dom: '*' 3305 | jsdom: '*' 3306 | peerDependenciesMeta: 3307 | '@edge-runtime/vm': 3308 | optional: true 3309 | '@types/node': 3310 | optional: true 3311 | '@vitest/browser': 3312 | optional: true 3313 | '@vitest/ui': 3314 | optional: true 3315 | happy-dom: 3316 | optional: true 3317 | jsdom: 3318 | optional: true 3319 | dependencies: 3320 | '@types/node': 20.11.5 3321 | '@vitest/expect': 1.2.1 3322 | '@vitest/runner': 1.2.1 3323 | '@vitest/snapshot': 1.2.1 3324 | '@vitest/spy': 1.2.1 3325 | '@vitest/utils': 1.2.1 3326 | acorn-walk: 8.3.2 3327 | cac: 6.7.14 3328 | chai: 4.4.1 3329 | debug: 4.3.4 3330 | execa: 8.0.1 3331 | local-pkg: 0.5.0 3332 | magic-string: 0.30.5 3333 | pathe: 1.1.2 3334 | picocolors: 1.0.0 3335 | std-env: 3.7.0 3336 | strip-literal: 1.3.0 3337 | tinybench: 2.6.0 3338 | tinypool: 0.8.2 3339 | vite: 5.0.12(@types/node@20.11.5) 3340 | vite-node: 1.2.1(@types/node@20.11.5) 3341 | why-is-node-running: 2.2.2 3342 | transitivePeerDependencies: 3343 | - less 3344 | - lightningcss 3345 | - sass 3346 | - stylus 3347 | - sugarss 3348 | - supports-color 3349 | - terser 3350 | dev: true 3351 | 3352 | /vue-eslint-parser@9.4.1(eslint@8.56.0): 3353 | resolution: {integrity: sha512-EmIbJ5cCI/E06SlI8K5sldVZ+Ef5vy26Ck0lNALxgY7FEAMOjNR32qcsVM3FUJUbvVWTBEiOy5lQvbhPK/ynBw==} 3354 | engines: {node: ^14.17.0 || >=16.0.0} 3355 | peerDependencies: 3356 | eslint: '>=6.0.0' 3357 | dependencies: 3358 | debug: 4.3.4 3359 | eslint: 8.56.0 3360 | eslint-scope: 7.2.2 3361 | eslint-visitor-keys: 3.4.3 3362 | espree: 9.6.1 3363 | esquery: 1.5.0 3364 | lodash: 4.17.21 3365 | semver: 7.5.4 3366 | transitivePeerDependencies: 3367 | - supports-color 3368 | dev: true 3369 | 3370 | /web-streams-polyfill@3.3.2: 3371 | resolution: {integrity: sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==} 3372 | engines: {node: '>= 8'} 3373 | dev: false 3374 | 3375 | /web-streams-polyfill@4.0.0-beta.3: 3376 | resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} 3377 | engines: {node: '>= 14'} 3378 | dev: false 3379 | 3380 | /webidl-conversions@3.0.1: 3381 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 3382 | dev: false 3383 | 3384 | /whatwg-url@5.0.0: 3385 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 3386 | dependencies: 3387 | tr46: 0.0.3 3388 | webidl-conversions: 3.0.1 3389 | dev: false 3390 | 3391 | /which-boxed-primitive@1.0.2: 3392 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 3393 | dependencies: 3394 | is-bigint: 1.0.4 3395 | is-boolean-object: 1.1.2 3396 | is-number-object: 1.0.7 3397 | is-string: 1.0.7 3398 | is-symbol: 1.0.4 3399 | dev: true 3400 | 3401 | /which-typed-array@1.1.13: 3402 | resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} 3403 | engines: {node: '>= 0.4'} 3404 | dependencies: 3405 | available-typed-arrays: 1.0.5 3406 | call-bind: 1.0.5 3407 | for-each: 0.3.3 3408 | gopd: 1.0.1 3409 | has-tostringtag: 1.0.0 3410 | dev: true 3411 | 3412 | /which@2.0.2: 3413 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3414 | engines: {node: '>= 8'} 3415 | hasBin: true 3416 | dependencies: 3417 | isexe: 2.0.0 3418 | dev: true 3419 | 3420 | /why-is-node-running@2.2.2: 3421 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 3422 | engines: {node: '>=8'} 3423 | hasBin: true 3424 | dependencies: 3425 | siginfo: 2.0.0 3426 | stackback: 0.0.2 3427 | dev: true 3428 | 3429 | /wrappy@1.0.2: 3430 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3431 | dev: true 3432 | 3433 | /xml-name-validator@4.0.0: 3434 | resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} 3435 | engines: {node: '>=12'} 3436 | dev: true 3437 | 3438 | /yallist@4.0.0: 3439 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 3440 | dev: true 3441 | 3442 | /yaml-eslint-parser@1.2.2: 3443 | resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==} 3444 | engines: {node: ^14.17.0 || >=16.0.0} 3445 | dependencies: 3446 | eslint-visitor-keys: 3.4.3 3447 | lodash: 4.17.21 3448 | yaml: 2.3.4 3449 | dev: true 3450 | 3451 | /yaml@2.3.4: 3452 | resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} 3453 | engines: {node: '>= 14'} 3454 | dev: true 3455 | 3456 | /yocto-queue@0.1.0: 3457 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3458 | engines: {node: '>=10'} 3459 | dev: true 3460 | 3461 | /yocto-queue@1.0.0: 3462 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 3463 | engines: {node: '>=12.20'} 3464 | dev: true 3465 | 3466 | /zod@3.22.4: 3467 | resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} 3468 | dev: true 3469 | -------------------------------------------------------------------------------- /src/agent.ts: -------------------------------------------------------------------------------- 1 | import type { AzureLLM } from './llm' 2 | import type { StructuredTool } from './tool' 3 | import type { AgentAction, AgentFinish, AgentStep, promptInputs } from './type' 4 | 5 | interface LLMSingleActionAgentParams { 6 | llm: AzureLLM 7 | stop?: string[] 8 | } 9 | 10 | export class LLMSingleActionAgent { 11 | llm: AzureLLM 12 | stop: string[] 13 | private _prompt: string = '{input}' 14 | constructor({ llm, stop = [] }: LLMSingleActionAgentParams) { 15 | this.llm = llm 16 | if (stop.length > 4) 17 | throw new Error('up to 4 stop sequences') 18 | this.stop = stop 19 | } 20 | 21 | get agentActionType(): string { 22 | return 'single' 23 | } 24 | 25 | get prompt() { 26 | return this._prompt 27 | } 28 | 29 | setPrompt(prompt: string) { 30 | this._prompt = prompt 31 | } 32 | 33 | /** 34 | * Prefix to append the observation with. 35 | */ 36 | get observationPrefix(): string { 37 | return 'Observation: ' 38 | } 39 | 40 | addStop(stop: string | string[]) { 41 | const _stops = Array.isArray(stop) ? stop : [stop] 42 | this.stop.push(..._stops) 43 | } 44 | 45 | async plan(steps: AgentStep[], inputs: promptInputs): Promise { 46 | const thoughts = this.constructScratchPad(steps) 47 | 48 | const newInputs = { 49 | ...inputs, 50 | agent_scratchpad: thoughts, 51 | } 52 | const output = await this.llm.completeWithPrompt(this._prompt, newInputs, this.stop) 53 | 54 | return this.transOutput2Action(output.choices[0].message.content!) 55 | } 56 | 57 | transOutput2Action(text: string): AgentAction | AgentFinish { 58 | const FINAL_ANSWER_ACTION = 'Final Answer:' 59 | const includesAnswer = text.includes(FINAL_ANSWER_ACTION) 60 | const regex 61 | = /Action\s*\d*\s*:[\s]*(.*?)[\s]*Action\s*\d*\s*Input\s*\d*\s*:[\s]*(.*)/ 62 | const actionMatch = text.match(regex) 63 | if (actionMatch) { 64 | const action = actionMatch[1] 65 | const actionInput = actionMatch[2] 66 | const toolInput = actionInput.trim() 67 | return { 68 | tool: action, 69 | toolInput, 70 | log: text, 71 | } 72 | } 73 | if (includesAnswer) { 74 | const finalAnswerText = text.split(FINAL_ANSWER_ACTION)[1].trim() 75 | return { 76 | returnValues: { 77 | output: finalAnswerText, 78 | }, 79 | log: text, 80 | } 81 | } 82 | 83 | throw new Error(`Could not parse LLM output: ${text}`) 84 | } 85 | 86 | /** 87 | * Construct a scratchpad to let the agent continue its thought process 88 | */ 89 | constructScratchPad( 90 | steps: AgentStep[], 91 | ): string | string[] { 92 | return steps.reduce( 93 | (thoughts, { action, observation }) => 94 | `${thoughts}\n${action.log}${this.observationPrefix}${observation}\n`, 95 | '', 96 | ) 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/executor.ts: -------------------------------------------------------------------------------- 1 | import type { LLMSingleActionAgent } from './agent' 2 | import type { StructuredTool } from './tool' 3 | import type { AgentAction, AgentFinish, AgentStep, promptInputs } from './type' 4 | 5 | interface AgentExecutorOptions { 6 | callback?: { 7 | nextPlan?: (plan: string, iteration: number) => void 8 | } 9 | } 10 | export class AgentExecutor { 11 | agent: LLMSingleActionAgent 12 | tools: StructuredTool[] = [] 13 | maxIterations: number = 15 14 | 15 | constructor(agent: LLMSingleActionAgent) { 16 | this.agent = agent 17 | } 18 | 19 | addTool(tools: StructuredTool | StructuredTool[]) { 20 | const _tools = Array.isArray(tools) ? tools : [tools] 21 | this.tools.push(..._tools) 22 | } 23 | 24 | /** 25 | * Construct tools description for prompt template 26 | */ 27 | constructTools(): string { 28 | return this.tools.reduce((pre, cur, idx) => `${pre}${idx + 1}. ${cur.getSchema()}\n`, '') 29 | } 30 | 31 | constructToolNames(): string { 32 | return this.tools.map(val => val.name).join(',') 33 | } 34 | 35 | private shouldContinue(iterations: number): boolean { 36 | return iterations < this.maxIterations 37 | } 38 | 39 | async call(inputs: promptInputs, options?: AgentExecutorOptions): Promise { 40 | return new Promise((resolve) => { 41 | const { callback } = options || {} 42 | const toolsByName = Object.fromEntries( 43 | this.tools.map(t => [t.name, t]), 44 | ) 45 | 46 | const steps: AgentStep[] = [] 47 | let iterations = 0 48 | 49 | const oneStep = async () => { 50 | if (this.shouldContinue(iterations)) { 51 | iterations++ 52 | 53 | const tools = this.constructTools() 54 | const toolNames = this.constructToolNames() 55 | const output = await this.agent.plan(steps, { 56 | tools, 57 | tool_names: toolNames, 58 | ...inputs, 59 | }) 60 | 61 | callback?.nextPlan && callback.nextPlan(output.log, iterations) 62 | 63 | // Check if the agent has finished 64 | if ('returnValues' in output) { 65 | resolve(output) 66 | return 67 | } 68 | 69 | const actions = Array.isArray(output) 70 | ? output as AgentAction[] 71 | : [output as AgentAction] 72 | 73 | const newSteps = await Promise.all( 74 | actions.map(async (action) => { 75 | const tool = toolsByName[action.tool] 76 | 77 | if (!tool) 78 | throw new Error(`${action.tool} is not a valid tool, try another one.`) 79 | 80 | const observation = await tool.call(action.toolInput) 81 | 82 | return { action, observation: observation ?? '' } 83 | }), 84 | ) 85 | 86 | steps.push(...newSteps) 87 | 88 | setTimeout(oneStep, 3000) 89 | } 90 | else { 91 | resolve({ 92 | returnValues: { output: 'Agent stopped due to max iterations.' }, 93 | log: '', 94 | }) 95 | } 96 | } 97 | 98 | setTimeout(oneStep, 0) 99 | }) 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { readFileSync } from 'node:fs' 2 | import { fileURLToPath } from 'node:url' 3 | import { dirname, resolve } from 'node:path' 4 | 5 | const __filename = fileURLToPath(import.meta.url) 6 | const __dirname = dirname(__filename) 7 | const rawConfig = readFileSync(resolve(__dirname, '../config.json'), { encoding: 'utf8', flag: 'r' }) 8 | 9 | export const Config = JSON.parse(rawConfig) 10 | -------------------------------------------------------------------------------- /src/llm.ts: -------------------------------------------------------------------------------- 1 | import { OpenAI } from 'openai' 2 | import type { ChatCompletionMessageParam } from 'openai/resources' 3 | import type { promptInputs } from './type' 4 | 5 | interface AzureLLMParams { 6 | apiKey: string 7 | modelName: string 8 | model?: OpenAI 9 | } 10 | 11 | export class AzureLLM { 12 | private _model: OpenAI 13 | private _modelName: string 14 | constructor(options: AzureLLMParams) { 15 | const { apiKey, model, modelName } = options 16 | this._modelName = modelName 17 | this._model = model || new OpenAI({ 18 | apiKey, 19 | baseURL: 'https://search.bytedance.net/gpt/openapi/online/v2/crawl/openai/deployments', 20 | defaultQuery: { 'api-version': '2023-03-15-preview' }, 21 | defaultHeaders: { 'api-key': apiKey }, 22 | }) 23 | } 24 | 25 | get modelName() { 26 | return this._modelName 27 | } 28 | 29 | async complete(messages: ChatCompletionMessageParam[], stop?: string[]) { 30 | const result = await this._model.chat.completions.create({ 31 | model: this.modelName, 32 | temperature: 0, 33 | messages, 34 | stop, 35 | }) 36 | return result 37 | } 38 | 39 | async completeWithPrompt(prompt: string, inputs: promptInputs, stop?: string[]) { 40 | const _prompt = fillPromptTemplate(prompt, inputs) 41 | console.log('prompt', _prompt) 42 | return this.complete([{ role: 'user', content: _prompt }], stop) 43 | } 44 | } 45 | 46 | export function fillPromptTemplate(promptTemplate: string, inputs: promptInputs) { 47 | let res = promptTemplate 48 | 49 | for (const [key, val] of Object.entries(inputs)) 50 | res = res.replaceAll(new RegExp(`{\\s*${key}\\s*}`, 'g'), val) 51 | 52 | return res 53 | } 54 | -------------------------------------------------------------------------------- /src/prompt.ts: -------------------------------------------------------------------------------- 1 | export const REACT_PROMPT = `Answer the following questions or complete the task as best you can. You have access to the following tools 2 | name | description | params 3 | {tools} 4 | 5 | Use the following format: 6 | 7 | Question: the input question you must answer 8 | Thought: you should always think about what to do 9 | Action: the action to take, should be one of [{tool_names}] 10 | Action Input: the correct input according to the params of used Action Tool to the action. format: json object schema 11 | Observation: the result of the action 12 | ... (this Thought/Action/Action Input/Observation can repeat N times) 13 | Thought: Output "I now know the final answer" if you solve the problem or "I have done the task" if you done the task 14 | Final Answer: the final answer to the original input question 15 | 16 | Begin! Let's think step by step! 17 | 18 | Question: {input} 19 | Thought:{agent_scratchpad}` 20 | -------------------------------------------------------------------------------- /src/tool.ts: -------------------------------------------------------------------------------- 1 | export abstract class StructuredTool = Record> { 2 | name: string 3 | description: string 4 | constructor(name: string, description: string) { 5 | this.name = name 6 | this.description = description 7 | } 8 | 9 | abstract run(inputs: T): Promise 10 | 11 | call(input: string): Promise { 12 | try { 13 | const inputs = JSON.parse(input) 14 | return this.run(inputs) 15 | } 16 | catch (e) { 17 | throw new Error(`${input} can not be parsed as JSON`) 18 | } 19 | } 20 | 21 | getSchema(): string { 22 | return `${this.name} | ${this.description} | ${this.declaration}` 23 | } 24 | 25 | abstract get declaration(): string 26 | } 27 | -------------------------------------------------------------------------------- /src/toolkit.ts: -------------------------------------------------------------------------------- 1 | import { StructuredTool } from './tool' 2 | 3 | interface MathToolParams { 4 | a: number 5 | b: number 6 | } 7 | 8 | export class AdditionTool extends StructuredTool { 9 | constructor() { 10 | super('Addition', 'A tool for adding numbers') 11 | } 12 | 13 | run(inputs: MathToolParams): Promise { 14 | return Promise.resolve(String(inputs.a + inputs.b)) 15 | } 16 | 17 | get declaration(): string { 18 | return 'a: number, b: number' 19 | } 20 | } 21 | 22 | export class SubtractionTool extends StructuredTool { 23 | constructor() { 24 | super('Subtraction', 'A tool for subtracting numbers') 25 | } 26 | 27 | run(inputs: MathToolParams): Promise { 28 | return Promise.resolve(String(inputs.a - inputs.b)) 29 | } 30 | 31 | get declaration(): string { 32 | return 'a: number, b: number' 33 | } 34 | } 35 | 36 | export class MultiplicationTool extends StructuredTool { 37 | constructor() { 38 | super('Multiplication', 'A tool for multiplying numbers') 39 | } 40 | 41 | run(inputs: MathToolParams): Promise { 42 | return Promise.resolve(String(inputs.a * inputs.b)) 43 | } 44 | 45 | get declaration(): string { 46 | return 'a: number, b: number' 47 | } 48 | } 49 | 50 | export class DivisionTool extends StructuredTool { 51 | constructor() { 52 | super('Division', 'A tool for dividing numbers') 53 | } 54 | 55 | run(inputs: MathToolParams): Promise { 56 | return Promise.resolve(String(inputs.a / inputs.b)) 57 | } 58 | 59 | get declaration(): string { 60 | return 'a: number, b: number' 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/type.ts: -------------------------------------------------------------------------------- 1 | export interface AgentAction { 2 | tool: string 3 | toolInput: string 4 | log: string 5 | } 6 | 7 | export interface AgentFinish { 8 | returnValues: Record 9 | log: string 10 | } 11 | 12 | export interface AgentStep { 13 | action: AgentAction 14 | observation: string 15 | } 16 | 17 | export type promptInputs = Record & { 18 | input: string 19 | tools?: string 20 | tool_names?: string 21 | } 22 | -------------------------------------------------------------------------------- /test/index.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { AzureLLM, fillPromptTemplate } from '@/llm' 3 | import { LLMSingleActionAgent } from '@/agent' 4 | import { AgentExecutor } from '@/executor' 5 | import { AdditionTool, DivisionTool, MultiplicationTool, SubtractionTool } from '@/toolkit' 6 | import { REACT_PROMPT } from '@/prompt' 7 | import { Config } from '@/index' 8 | 9 | describe('llm', () => { 10 | const llm = new AzureLLM({ 11 | apiKey: Config.apiKey, 12 | modelName: Config.model, 13 | }) 14 | const agent = new LLMSingleActionAgent({ llm }) 15 | agent.setPrompt(REACT_PROMPT) 16 | 17 | it('prompt gen', () => { 18 | expect(agent.constructScratchPad([{ 19 | action: { 20 | tool: 'get_word_length', 21 | toolInput: 'educa', 22 | log: 'How many letters in the word educa', 23 | }, 24 | observation: '4', 25 | }])).toMatchInlineSnapshot(` 26 | " 27 | How many letters in the word educaObservation: 4 28 | " 29 | `) 30 | }) 31 | 32 | it('trans Action', async () => { 33 | expect(agent.transOutput2Action('Action: Multi Tools Action Input: educa 123')).toMatchInlineSnapshot(` 34 | { 35 | "log": "Action: Multi Tools Action Input: educa 123", 36 | "tool": "Multi Tools", 37 | "toolInput": "educa 123", 38 | } 39 | `) 40 | expect(agent.transOutput2Action('Final Answer: The word "educa" has 5 letters.')).toMatchInlineSnapshot(` 41 | { 42 | "log": "Final Answer: The word "educa" has 5 letters.", 43 | "returnValues": { 44 | "output": "The word "educa" has 5 letters.", 45 | }, 46 | } 47 | `) 48 | }) 49 | }) 50 | 51 | describe('utils', () => { 52 | it('prompt template', () => { 53 | expect(fillPromptTemplate('wqeqwe{llm}qweqwe', { llm: '123', qwe: '456', input: 'test' })).toMatchInlineSnapshot(`"wqeqwe123qweqwe"`) 54 | }) 55 | }) 56 | 57 | describe('agent', () => { 58 | const llm = new AzureLLM({ 59 | apiKey: Config.apiKey, 60 | modelName: Config.model, 61 | }) 62 | const agent = new LLMSingleActionAgent({ llm }) 63 | agent.setPrompt(REACT_PROMPT) 64 | agent.addStop(agent.observationPrefix) 65 | 66 | const executor = new AgentExecutor(agent) 67 | executor.addTool([new AdditionTool(), new SubtractionTool(), new DivisionTool(), new MultiplicationTool()]) 68 | 69 | it('executor prompt', () => { 70 | expect(executor.constructTools()).toMatchInlineSnapshot(` 71 | "1. Addition | A tool for adding numbers | a: number, b: number 72 | 2. Subtraction | A tool for subtracting numbers | a: number, b: number 73 | 3. Division | A tool for dividing numbers | a: number, b: number 74 | 4. Multiplication | A tool for multiplying numbers | a: number, b: number 75 | " 76 | `) 77 | 78 | expect(executor.constructToolNames()).toMatchInlineSnapshot(`"Addition,Subtraction,Division,Multiplication"`) 79 | }) 80 | 81 | it('demo', async () => { 82 | const res = await executor.call({ input: '一种减速机的价格是750元,一家企业需要购买12台减速机。每台减速机运行一小时的电费是0.5元,企业每天运行这些减速机8小时。请计算企业购买及一周运行这些减速机的总花费。' }) 83 | expect(res).toMatchInlineSnapshot() 84 | }, { timeout: 500000 }) 85 | }) 86 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "lib": [ 5 | "esnext" 6 | ], 7 | "baseUrl": ".", 8 | "module": "esnext", 9 | "moduleResolution": "node", 10 | "paths": { 11 | "@/*": [ 12 | "src/*" 13 | ] 14 | }, 15 | "types": [ 16 | "@types/node" 17 | ], 18 | "strict": true, 19 | "noImplicitAny": true, 20 | "noImplicitReturns": true, 21 | "noImplicitThis": true, 22 | "skipDefaultLibCheck": true, 23 | "skipLibCheck": true, 24 | "pretty": true 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /vitest.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config' 2 | import tsconfigPaths from 'vite-tsconfig-paths' 3 | 4 | export default defineConfig({ 5 | plugins: [tsconfigPaths()], 6 | }) 7 | --------------------------------------------------------------------------------