前端编译脚本,进度条实现。后端支持从log生成结构化信息

pull/1/head
zanllp 2023-03-10 02:11:43 +08:00
parent 94791d7bbe
commit 1ae9ec6e52
12 changed files with 436 additions and 44 deletions

View File

@ -1,17 +1,18 @@
# WIP
# stable-diffusion-webui-baidu-netdisk
stable-diffusion-webui百度云上传拓展。适用于远程云gpu,colabjupyterlab等需要保存的场合
<img width="1649" alt="image" src="https://user-images.githubusercontent.com/25872019/224115898-bad5ca33-be39-4999-8ea5-a0a20b073ef8.png">
<img width="678" alt="image" src="https://user-images.githubusercontent.com/25872019/223519780-8de5919a-341b-4912-bdce-eca859a32927.png">
使用bduss登录持续改进中
目前可以实现每2秒更新一次上传状态
<img width="1258" alt="image" src="https://user-images.githubusercontent.com/25872019/223800312-0fa01500-c5de-42da-91d1-cde7a59890ba.png">
<img width="678" alt="image" src="https://user-images.githubusercontent.com/25872019/223519780-8de5919a-341b-4912-bdce-eca859a32927.png">
使用bduss登录持续改进中
暂时需要手动下载对应的[BaiduPCS-Go二进制文件](https://github.com/qjfoidnh/BaiduPCS-Go/releases/tag/v3.9.0)放到拓展根目录。后面会自动下载

File diff suppressed because one or more lines are too long

3
javascript/index.js Normal file

File diff suppressed because one or more lines are too long

35
scripts/log_parser.py Normal file
View File

@ -0,0 +1,35 @@
import re
regex = re.compile(r"\[(\d+)\] (上传文件失败|秒传失败|上传文件成功|准备上传|目标文件|加入上传队列)(?:\:|,)?(.*)")
upload_success_extra_re = re.compile(r"保存到网盘路径: (.*)$")
concurrent_re = re.compile(r"上传单个文件最大并发量为: (\d+), 最大同时上传文件数为: (\d+)")
def parse_log_line(line_str: str):
match = regex.match(line_str)
if not match:
if line_str.startswith("上传结束"):
return { "status": "done", "extra_info": line_str }
concurrent_match = concurrent_re.search(line_str)
if concurrent_match:
return { "status": "start", "concurrent": int(concurrent_match.group(1)) }
return
line = {
"id": match.group(1),
"status": {
"秒传失败": "fast-upload-failed",
"上传文件成功": "upload-success",
"准备上传": "upload-preparing",
"目标文件": "file-skipped",
"加入上传队列": "queued",
"上传文件失败": "upload-failed"
}.get(match.group(2)),
"local_file_path": None,
"baidu_netdisk_saved_path": None
}
extra_info = match.group(3).strip()
if line["status"] == "upload-success":
line["baidu_netdisk_saved_path"] = upload_success_extra_re.match(extra_info).group(1)
elif line["status"] == "prepare":
line["local_file_path"] = extra_info
elif line["status"] == "upload-failed":
line["extra_info"] = extra_info
return line

View File

@ -19,6 +19,7 @@ from modules import script_callbacks, shared
from modules.shared import opts, cmd_opts, state
import json
from typing import IO, Dict, Literal, TypedDict
from scripts.log_parser import parse_log_line
cwd = os.path.normpath(os.path.join(__file__, "../../"))
print(shared.config_filename)
@ -173,6 +174,7 @@ def on_ui_tabs():
log_text = gr.HTML(
get_curr_user_name(), elem_id="baidu_netdisk_container"
)
def on_bduss_input_enter(bduss):
res = login_by_bduss(bduss=bduss)
return (
@ -192,7 +194,7 @@ def on_ui_tabs():
return gr.update(visible=True), gr.update(visible=False)
logout_btn.click(fn=on_logout, outputs=[login_form, operation_form])
return ((baidu_netdisk, "百度云", "baiduyun"),)
return ((baidu_netdisk, "百度云上传", "baiduyun"),)
def on_ui_settings():
@ -223,7 +225,7 @@ def on_ui_settings():
("baidu_netdisk_upload_dir", "/stable-diffusion-upload", "百度网盘用于接收上传文件的文件夹地址")
)
section = ("baidu-netdisk", "百度云")
section = ("baidu-netdisk", "百度云上传")
# Move historic setting names to current names
for i in range(len(bd_options)):
shared.opts.add_option(
@ -237,10 +239,7 @@ def on_ui_settings():
subprocess_cache: dict[str, asyncio.subprocess.Process] = {}
def is_io_ready(io: IO[bytes]):
return select.select([io], [], [], 0) == ([io], [], [])
# 使用正则表达式匹配信息
def baidu_netdisk_api(_: gr.Blocks, app: FastAPI):
@ -274,17 +273,25 @@ def baidu_netdisk_api(_: gr.Blocks, app: FastAPI):
if not p:
raise HTTPException(status_code=404, detail="找不到该subprocess")
running = not isinstance(p.returncode, int)
msgs = []
tasks = []
while True:
try:
line = await asyncio.wait_for(p.stdout.readline(), timeout=0.3)
line = await asyncio.wait_for(p.stdout.readline(), timeout=0.1)
line = line.decode()
# logger.info(line)
if not line:
#logger.error(line)
break
msgs.append(line)
if line.isspace():
continue
info = parse_log_line(line)
#if info is None:
#logger.error(line)
tasks.append({"info": info, "log": line})
except asyncio.TimeoutError:
break
return {"running": running, "msgs": msgs, "pCode": p.returncode}
return {"running": running, "tasks": tasks, "pCode": p.returncode}
script_callbacks.on_ui_settings(on_ui_settings)

View File

@ -1 +1 @@
.action-bar[data-v-4562e979]{margin:16px}.container[data-v-4562e979]{width:100%;height:100%;display:flex;flex-direction:column}.log-list[data-v-4562e979]{flex:1;overflow:auto}#baidu_netdisk_container{max-height:70vh}
*[data-v-791f3602]{all:revert}button[data-v-791f3602]{padding:8px 16px;border-radius:8px;border:1px solid grey}.action-bar[data-v-791f3602]{margin:16px 0}.container[data-v-791f3602]{width:100%;height:100%;display:flex;flex-direction:column}.upload-progress-info[data-v-791f3602]{display:flex;flex-direction:row;align-items:center}.upload-progress-info>*[data-v-791f3602]{margin-right:8px}.log-list[data-v-791f3602]{max-height:70vh;flex:1;overflow:auto;background-color:#f5f5f5;border:1px solid #ccc;padding:10px;box-shadow:2px 2px 2px #0000004d;border-radius:5px;font-size:14px;line-height:1.5;font-family:Arial,sans-serif;color:#333}#baidu_netdisk_container{max-height:70vh}

25
vue/build.ts Normal file
View File

@ -0,0 +1,25 @@
import { execSync } from 'child_process'
import { readdir, readFile, rm, writeFile } from 'fs/promises'
const main = async () => {
console.log(execSync("yarn build").toString())
try {
await rm("../style.css")
await rm("../javascript/index.js")
// eslint-disable-next-line no-empty
} catch (error) {
}
const dir = readdir("dist/assets")
for (const file of await dir) {
if (file.endsWith(".js")) {
const js = await readFile("dist/assets/" + file)
writeFile("../javascript/index.js", js)
}
if (file.endsWith(".css")) {
const css = await readFile("dist/assets/" + file)
writeFile("../style.css", css)
}
}
}
main()

View File

@ -5,6 +5,7 @@
"scripts": {
"dev": "vite",
"build": "run-p type-check build-only",
"deliver-dist": "tsx build",
"preview": "vite preview",
"build-only": "vite build",
"type-check": "vue-tsc --noEmit",
@ -13,6 +14,7 @@
},
"dependencies": {
"axios": "^1.3.4",
"tsx": "^3.12.3",
"vue": "^3.2.47"
},
"devDependencies": {

View File

@ -1,12 +1,14 @@
<!-- eslint-disable no-empty -->
<script setup lang="ts">
import { onMounted, ref, nextTick } from 'vue'
import { getUploadTaskStatus, greeting, upload } from './api'
import { onMounted, ref, nextTick, reactive, computed } from 'vue'
import { getUploadTaskStatus, greeting, upload, type UploadTaskStatus } from './api'
import { Task } from './util/pollTask'
const msg = ref('')
const msgs = ref([] as string[])
const pollTask = ref<ReturnType<typeof createUploadPollTask>>()
const allTaskRecord = ref([] as UploadTaskStatus[])
onMounted(async () => {
msg.value = await greeting()
await greeting()
})
const taskLatestInfo = reactive(new Map<string, UploadTaskStatus['info']>())
const logListEl = ref<HTMLDivElement>()
const logListScroll2bottom = async () => {
await nextTick()
@ -15,39 +17,82 @@ const logListScroll2bottom = async () => {
el.scrollTop = el.scrollHeight
}
}
const onUploadBtnClick = async () => {
msgs.value = []
const { id } = await upload()
await Task.run({
const createUploadPollTask = (id: string) => {
const task = Task.run({
action: () => getUploadTaskStatus(id),
pollInterval: 2000,
pollInterval: 500,
validator (r) {
msgs.value.push(...r.msgs)
r.tasks.forEach(({ info }) => {
if (info.status === 'start') {
} else if (info.status == 'done') {
} else {
taskLatestInfo.set(info.id, info)
}
})
allTaskRecord.value.push(...r.tasks)
logListScroll2bottom()
return !r.running
}
}).completedTask
})
return task
}
const onUploadBtnClick = async () => {
allTaskRecord.value = []
const { id } = await upload()
pollTask.value = createUploadPollTask(id)
pollTask.value.completedTask.then(() => {
pollTask.value = undefined
})
}
const max = computed(() => taskLatestInfo.size || 100)
const taskLatestInfoArr = computed(() => Array.from(taskLatestInfo))
const done = computed(() => pollTask.value?.task.isFinished)
const uploading = computed(() => pollTask.value?.task.isFinished === false)
const progress = computed(() => {
if (done.value) {
return max.value
}
return taskLatestInfoArr.value.filter(v => v[1].status === 'upload-success' || v[1].status === 'file-skipped' || v[1].status === 'upload-failed').length
})
const progressPercent = computed(() => progress.value * 100 / max.value)
</script>
<template>
<div class="container">
<div class="action-bar">
<button class="gr-button gr-button-lg gr-button-secondary" @click="onUploadBtnClick"></button>
<div class="upload-progress-info" v-if="pollTask">
<progress :max="max" :value="progress" />
<div>
{{ progressPercent.toFixed(2) }} %
</div>
</div>
<div class="log-list" ref="logListEl">
<div v-for="msg, idx in msgs" :key="idx">
{{ msg }}
<div class="action-bar">
<button @click="onUploadBtnClick" :disabled="uploading">开始上传</button>
</div>
<div class="log-list" ref="logListEl" v-if="allTaskRecord.length">
<div v-for="msg, idx in allTaskRecord" :key="idx">
{{ msg.log }}
</div>
</div>
</div>
</template>
<style scoped>
.action-bar {
margin: 16px;
* {
all: revert;
}
button {
padding: 8px 16px;
border-radius: 8px;
border: 1px solid grey;
}
.action-bar {
margin: 16px 0;
}
.container {
width: 100%;
height: 100%;
@ -55,9 +100,38 @@ const onUploadBtnClick = async () => {
flex-direction: column;
}
.upload-progress-info {
display: flex;
flex-direction: row;
align-items: center;
}
.upload-progress-info>* {
margin-right: 8px;
}
.log-list {
max-height: 70vh;
flex: 1;
overflow: auto;
background-color: #f5f5f5;
/* 背景色 */
border: 1px solid #ccc;
/* 边框 */
padding: 10px;
/* 内边距 */
box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.3);
/* 阴影 */
border-radius: 5px;
/* 圆角 */
font-size: 14px;
/* 字体大小 */
line-height: 1.5;
/* 行高 */
font-family: Arial, sans-serif;
/* 字体样式 */
color: #333;
/* 字体颜色 */
}
</style>

View File

@ -15,10 +15,66 @@ export const upload = async () => {
}
}
interface UploadTaskStart {
status: 'start'
concurrent: number
}
interface UploadTaskFileSkipped {
status: 'file-skipped'
id: string
}
interface UploadTaskPreparing {
id: string
status: 'upload-preparing'
local_file_path: string
}
interface UploadTaskSuccess {
id: string
status: 'upload-success'
baidu_netdisk_saved_path: string
}
interface UploadTaskFastuploadFailed {
id: string
status: 'fast-upload-failed'
}
interface UploadTaskFailed {
id: string
status: 'upload-failed'
extra_info: string
}
interface UploadTaskDone {
status: 'done'
}
interface UploadTaskQueued {
id: string
status: 'queued'
local_file_path: string
}
export interface UploadTaskStatus {
log: string
info:
| UploadTaskDone
| UploadTaskFastuploadFailed
| UploadTaskFileSkipped
| UploadTaskPreparing
| UploadTaskQueued
| UploadTaskStart
| UploadTaskSuccess
| UploadTaskFailed
}
export const getUploadTaskStatus = async (id: string) => {
const resp = await axiosInst.get(`/upload/status/${id}`)
return resp.data as {
running: boolean,
msgs: string[]
running: boolean
tasks: UploadTaskStatus[]
}
}
}

View File

@ -1,7 +1,8 @@
{
"extends": "@vue/tsconfig/tsconfig.node.json",
"include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "playwright.config.*"],
"include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "playwright.config.*", "build.ts"],
"compilerOptions": {
"module": "ES2022",
"composite": true,
"types": ["node"],
"rootDir": "src"

View File

@ -7,116 +7,250 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3"
integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==
"@esbuild-kit/cjs-loader@^2.4.2":
version "2.4.2"
resolved "https://registry.yarnpkg.com/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.2.tgz#cb4dde00fbf744a68c4f20162ea15a8242d0fa54"
integrity sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==
dependencies:
"@esbuild-kit/core-utils" "^3.0.0"
get-tsconfig "^4.4.0"
"@esbuild-kit/core-utils@^3.0.0":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@esbuild-kit/core-utils/-/core-utils-3.1.0.tgz#49945d533dbd5e1b7620aa0fc522c15e6ec089c5"
integrity sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==
dependencies:
esbuild "~0.17.6"
source-map-support "^0.5.21"
"@esbuild-kit/esm-loader@^2.5.5":
version "2.5.5"
resolved "https://registry.yarnpkg.com/@esbuild-kit/esm-loader/-/esm-loader-2.5.5.tgz#b82da14fcee3fc1d219869756c06f43f67d1ca71"
integrity sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==
dependencies:
"@esbuild-kit/core-utils" "^3.0.0"
get-tsconfig "^4.4.0"
"@esbuild/android-arm64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23"
integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==
"@esbuild/android-arm64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.11.tgz#52c3e6cabc19c5e4c1c0c01cb58f0442338e1c14"
integrity sha512-QnK4d/zhVTuV4/pRM4HUjcsbl43POALU2zvBynmrrqZt9LPcLA3x1fTZPBg2RRguBQnJcnU059yKr+bydkntjg==
"@esbuild/android-arm@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2"
integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==
"@esbuild/android-arm@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.11.tgz#f3fc768235aecbeb840d0049fdf13cd28592105f"
integrity sha512-CdyX6sRVh1NzFCsf5vw3kULwlAhfy9wVt8SZlrhQ7eL2qBjGbFhRBWkkAzuZm9IIEOCKJw4DXA6R85g+qc8RDw==
"@esbuild/android-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e"
integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==
"@esbuild/android-x64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.11.tgz#443ed47771a7e917e4282469ba350d117473550c"
integrity sha512-3PL3HKtsDIXGQcSCKtWD/dy+mgc4p2Tvo2qKgKHj9Yf+eniwFnuoQ0OUhlSfAEpKAFzF9N21Nwgnap6zy3L3MQ==
"@esbuild/darwin-arm64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220"
integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==
"@esbuild/darwin-arm64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.11.tgz#0e8c78d94d5759a48521dbfd83189d2ed3499a16"
integrity sha512-pJ950bNKgzhkGNO3Z9TeHzIFtEyC2GDQL3wxkMApDEghYx5Qers84UTNc1bAxWbRkuJOgmOha5V0WUeh8G+YGw==
"@esbuild/darwin-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4"
integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==
"@esbuild/darwin-x64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.11.tgz#2405cfdf70eb961c7cf973463ca7263dc2004c88"
integrity sha512-iB0dQkIHXyczK3BZtzw1tqegf0F0Ab5texX2TvMQjiJIWXAfM4FQl7D909YfXWnB92OQz4ivBYQ2RlxBJrMJOw==
"@esbuild/freebsd-arm64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27"
integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==
"@esbuild/freebsd-arm64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.11.tgz#d5138e873e15f87bd4564c024dfa00ef37e623fd"
integrity sha512-7EFzUADmI1jCHeDRGKgbnF5sDIceZsQGapoO6dmw7r/ZBEKX7CCDnIz8m9yEclzr7mFsd+DyasHzpjfJnmBB1Q==
"@esbuild/freebsd-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72"
integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==
"@esbuild/freebsd-x64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.11.tgz#e850b58b8fabf8e9ef0e125af3c25229ad2d6c38"
integrity sha512-iPgenptC8i8pdvkHQvXJFzc1eVMR7W2lBPrTE6GbhR54sLcF42mk3zBOjKPOodezzuAz/KSu8CPyFSjcBMkE9g==
"@esbuild/linux-arm64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca"
integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==
"@esbuild/linux-arm64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.11.tgz#2bfb93d0809ec2357c12ebb27736b750c9ae0aa5"
integrity sha512-Qxth3gsWWGKz2/qG2d5DsW/57SeA2AmpSMhdg9TSB5Svn2KDob3qxfQSkdnWjSd42kqoxIPy3EJFs+6w1+6Qjg==
"@esbuild/linux-arm@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196"
integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==
"@esbuild/linux-arm@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.11.tgz#e56fb3b76828317a704f4a167c5bd790fe5314e7"
integrity sha512-M9iK/d4lgZH0U5M1R2p2gqhPV/7JPJcRz+8O8GBKVgqndTzydQ7B2XGDbxtbvFkvIs53uXTobOhv+RyaqhUiMg==
"@esbuild/linux-ia32@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54"
integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==
"@esbuild/linux-ia32@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.11.tgz#59fa1c49b271793d14eb5effc757e8c0d0cb2cab"
integrity sha512-dB1nGaVWtUlb/rRDHmuDQhfqazWE0LMro/AIbT2lWM3CDMHJNpLckH+gCddQyhhcLac2OYw69ikUMO34JLt3wA==
"@esbuild/linux-loong64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8"
integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==
"@esbuild/linux-loong64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.11.tgz#89575bc189099c03a36daa54f3f481780c7fd502"
integrity sha512-aCWlq70Q7Nc9WDnormntGS1ar6ZFvUpqr8gXtO+HRejRYPweAFQN615PcgaSJkZjhHp61+MNLhzyVALSF2/Q0g==
"@esbuild/linux-mips64el@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726"
integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==
"@esbuild/linux-mips64el@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.11.tgz#0e18ca039dc7e4645efd8edc1b10952933eb6b1b"
integrity sha512-cGeGNdQxqY8qJwlYH1BP6rjIIiEcrM05H7k3tR7WxOLmD1ZxRMd6/QIOWMb8mD2s2YJFNRuNQ+wjMhgEL2oCEw==
"@esbuild/linux-ppc64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8"
integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==
"@esbuild/linux-ppc64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.11.tgz#2d152cb3a253afb8c100a165ad132dc96f36cb11"
integrity sha512-BdlziJQPW/bNe0E8eYsHB40mYOluS+jULPCjlWiHzDgr+ZBRXPtgMV1nkLEGdpjrwgmtkZHEGEPaKdS/8faLDA==
"@esbuild/linux-riscv64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9"
integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==
"@esbuild/linux-riscv64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.11.tgz#c6ac494a81221d53d65b33e665c7df1747952d3c"
integrity sha512-MDLwQbtF+83oJCI1Cixn68Et/ME6gelmhssPebC40RdJaect+IM+l7o/CuG0ZlDs6tZTEIoxUe53H3GmMn8oMA==
"@esbuild/linux-s390x@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87"
integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==
"@esbuild/linux-s390x@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.11.tgz#4bad33894bc7415cea4be8fa90fe456226a424ad"
integrity sha512-4N5EMESvws0Ozr2J94VoUD8HIRi7X0uvUv4c0wpTHZyZY9qpaaN7THjosdiW56irQ4qnJ6Lsc+i+5zGWnyqWqQ==
"@esbuild/linux-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f"
integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==
"@esbuild/linux-x64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.11.tgz#903fda743459f530a16a6c6ee8d2c0f6c1a12fc7"
integrity sha512-rM/v8UlluxpytFSmVdbCe1yyKQd/e+FmIJE2oPJvbBo+D0XVWi1y/NQ4iTNx+436WmDHQBjVLrbnAQLQ6U7wlw==
"@esbuild/netbsd-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775"
integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==
"@esbuild/netbsd-x64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.11.tgz#b589239fe7d9b16ee03c5e191f3f5b640f1518a1"
integrity sha512-4WaAhuz5f91h3/g43VBGdto1Q+X7VEZfpcWGtOFXnggEuLvjV+cP6DyLRU15IjiU9fKLLk41OoJfBFN5DhPvag==
"@esbuild/openbsd-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35"
integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==
"@esbuild/openbsd-x64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.11.tgz#b355019754116bef39ec688f8fd2fe6471b9779b"
integrity sha512-UBj135Nx4FpnvtE+C8TWGp98oUgBcmNmdYgl5ToKc0mBHxVVqVE7FUS5/ELMImOp205qDAittL6Ezhasc2Ev/w==
"@esbuild/sunos-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c"
integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==
"@esbuild/sunos-x64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.11.tgz#2ea47fb592e68406e5025a7696dc714fc6a115dc"
integrity sha512-1/gxTifDC9aXbV2xOfCbOceh5AlIidUrPsMpivgzo8P8zUtczlq1ncFpeN1ZyQJ9lVs2hILy1PG5KPp+w8QPPg==
"@esbuild/win32-arm64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a"
integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==
"@esbuild/win32-arm64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.11.tgz#47e6fdab17c4c52e6e0d606dd9cb843b29826325"
integrity sha512-vtSfyx5yRdpiOW9yp6Ax0zyNOv9HjOAw8WaZg3dF5djEHKKm3UnoohftVvIJtRh0Ec7Hso0RIdTqZvPXJ7FdvQ==
"@esbuild/win32-ia32@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09"
integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==
"@esbuild/win32-ia32@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.11.tgz#a97273aa3164c8d8f501899f55cc75a4a79599a3"
integrity sha512-GFPSLEGQr4wHFTiIUJQrnJKZhZjjq4Sphf+mM76nQR6WkQn73vm7IsacmBRPkALfpOCHsopSvLgqdd4iUW2mYw==
"@esbuild/win32-x64@0.16.17":
version "0.16.17"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091"
integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==
"@esbuild/win32-x64@0.17.11":
version "0.17.11"
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.11.tgz#9be796d93ae27b636da32d960899a4912bca27a1"
integrity sha512-N9vXqLP3eRL8BqSy8yn4Y98cZI2pZ8fyuHx6lKjiG2WABpT2l01TXdzq5Ma2ZUBzfB7tx5dXVhge8X9u0S70ZQ==
"@eslint/eslintrc@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.0.tgz#943309d8697c52fc82c076e90c1c74fbbe69dbff"
@ -542,6 +676,11 @@ braces@^3.0.2:
dependencies:
fill-range "^7.0.1"
buffer-from@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@ -774,6 +913,34 @@ esbuild@^0.16.14:
"@esbuild/win32-ia32" "0.16.17"
"@esbuild/win32-x64" "0.16.17"
esbuild@~0.17.6:
version "0.17.11"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.11.tgz#9f3122643b21d7e7731e42f18576c10bfa28152b"
integrity sha512-pAMImyokbWDtnA/ufPxjQg0fYo2DDuzAlqwnDvbXqHLphe+m80eF++perYKVm8LeTuj2zUuFXC+xgSVxyoHUdg==
optionalDependencies:
"@esbuild/android-arm" "0.17.11"
"@esbuild/android-arm64" "0.17.11"
"@esbuild/android-x64" "0.17.11"
"@esbuild/darwin-arm64" "0.17.11"
"@esbuild/darwin-x64" "0.17.11"
"@esbuild/freebsd-arm64" "0.17.11"
"@esbuild/freebsd-x64" "0.17.11"
"@esbuild/linux-arm" "0.17.11"
"@esbuild/linux-arm64" "0.17.11"
"@esbuild/linux-ia32" "0.17.11"
"@esbuild/linux-loong64" "0.17.11"
"@esbuild/linux-mips64el" "0.17.11"
"@esbuild/linux-ppc64" "0.17.11"
"@esbuild/linux-riscv64" "0.17.11"
"@esbuild/linux-s390x" "0.17.11"
"@esbuild/linux-x64" "0.17.11"
"@esbuild/netbsd-x64" "0.17.11"
"@esbuild/openbsd-x64" "0.17.11"
"@esbuild/sunos-x64" "0.17.11"
"@esbuild/win32-arm64" "0.17.11"
"@esbuild/win32-ia32" "0.17.11"
"@esbuild/win32-x64" "0.17.11"
escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
@ -1072,6 +1239,11 @@ get-symbol-description@^1.0.0:
call-bind "^1.0.2"
get-intrinsic "^1.1.1"
get-tsconfig@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.4.0.tgz#64eee64596668a81b8fce18403f94f245ee0d4e5"
integrity sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==
glob-parent@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@ -1859,7 +2031,15 @@ source-map-js@^1.0.2:
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
source-map@^0.6.1:
source-map-support@^0.5.21:
version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
source-map@^0.6.0, source-map@^0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
@ -1982,6 +2162,17 @@ tsutils@^3.21.0:
dependencies:
tslib "^1.8.1"
tsx@^3.12.3:
version "3.12.3"
resolved "https://registry.yarnpkg.com/tsx/-/tsx-3.12.3.tgz#b29f6c9246d4e3ea46451cd81d7cbc98f45c4b8a"
integrity sha512-Wc5BFH1xccYTXaQob+lEcimkcb/Pq+0en2s+ruiX0VEIC80nV7/0s7XRahx8NnsoCnpCVUPz8wrqVSPi760LkA==
dependencies:
"@esbuild-kit/cjs-loader" "^2.4.2"
"@esbuild-kit/core-utils" "^3.0.0"
"@esbuild-kit/esm-loader" "^2.5.5"
optionalDependencies:
fsevents "~2.3.2"
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"