From f8bee163947cc11f5274d6ace8a5d4982a20b6b5 Mon Sep 17 00:00:00 2001 From: anyongjin Date: Tue, 10 Dec 2024 18:12:12 +0800 Subject: [PATCH] init --- .eslintrc.cjs | 9 + .gitignore | 27 + .npmrc | 1 + .prettierignore | 4 + .prettierrc | 17 + README.md | 81 + dist.zip | Bin 0 -> 238445 bytes eslint.config.js | 33 + messages/en.json | 136 + messages/zh-CN.json | 136 + package-lock.json | 5139 +++++++++++++++++ package.json | 47 + postcss.config.cjs | 3 + project.inlang/.gitignore | 1 + project.inlang/project_id | 1 + project.inlang/settings.json | 18 + src/app.d.ts | 17 + src/app.html | 16 + src/hooks.js | 3 + src/hooks.server.js | 3 + src/lib/alert.svelte | 49 + src/lib/auth.ts | 89 + src/lib/chart.svelte | 399 ++ src/lib/chart.ts | 119 + src/lib/coms.ts | 366 ++ src/lib/config.ts | 1 + src/lib/dateutil.ts | 328 ++ src/lib/drawBar.svelte | 271 + src/lib/figures/index.ts | 6 + src/lib/figures/textBox.ts | 188 + src/lib/figures/utils.ts | 56 + src/lib/i18n.js | 5 + src/lib/icon.svelte | 166 + src/lib/index.ts | 1 + src/lib/indicators/cloudInds.ts | 49 + src/lib/indicators/common.ts | 235 + src/lib/indicators/index.ts | 4 + src/lib/indicators/ktools.ts | 38 + src/lib/menuBar.svelte | 232 + src/lib/modal.svelte | 78 + src/lib/modalIndCfg.svelte | 77 + src/lib/modalIndSearch.svelte | 155 + src/lib/modalPeriod.svelte | 54 + src/lib/modalScreenShot.svelte | 25 + src/lib/modalSetting.svelte | 179 + src/lib/modalSymbol.svelte | 84 + src/lib/modalTimezone.svelte | 39 + src/lib/mydatafeed.ts | 131 + src/lib/netio.ts | 51 + src/lib/overlays/abcd.ts | 58 + src/lib/overlays/anyWaves.ts | 43 + src/lib/overlays/arrow.ts | 33 + src/lib/overlays/barSignal.ts | 31 + src/lib/overlays/circle.ts | 46 + src/lib/overlays/eightWaves.ts | 43 + src/lib/overlays/fibonacciCircle.ts | 59 + src/lib/overlays/fibonacciExtension.ts | 67 + src/lib/overlays/fibonacciSegment.ts | 61 + .../overlays/fibonacciSpeedResistanceFan.ts | 72 + src/lib/overlays/fibonacciSpiral.ts | 113 + src/lib/overlays/fiveWaves.ts | 43 + src/lib/overlays/gannBox.ts | 86 + src/lib/overlays/index.ts | 33 + src/lib/overlays/note.ts | 56 + src/lib/overlays/parallelogram.ts | 66 + src/lib/overlays/rect.ts | 49 + src/lib/overlays/ruler.ts | 122 + src/lib/overlays/threeWaves.ts | 43 + src/lib/overlays/trade.ts | 95 + src/lib/overlays/triangle.ts | 39 + src/lib/overlays/utils.ts | 103 + src/lib/overlays/xabcd.ts | 72 + src/lib/stores/alerts.ts | 33 + src/lib/types.ts | 217 + src/routes/+layout.svelte | 52 + src/routes/+layout.ts | 1 + src/routes/+page.svelte | 5 + static/favicon.png | Bin 0 -> 1571 bytes static/fonts/icomoon.eot | Bin 0 -> 2548 bytes static/fonts/icomoon.svg | 14 + static/fonts/icomoon.ttf | Bin 0 -> 2384 bytes static/fonts/icomoon.woff | Bin 0 -> 2460 bytes svelte.config.js | 26 + tailwind.config.cjs | 7 + tsconfig.json | 22 + vite.config.ts | 19 + yarn.lock | 2725 +++++++++ 87 files changed, 13721 insertions(+) create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 README.md create mode 100644 dist.zip create mode 100644 eslint.config.js create mode 100644 messages/en.json create mode 100644 messages/zh-CN.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.cjs create mode 100644 project.inlang/.gitignore create mode 100644 project.inlang/project_id create mode 100644 project.inlang/settings.json create mode 100644 src/app.d.ts create mode 100644 src/app.html create mode 100644 src/hooks.js create mode 100644 src/hooks.server.js create mode 100644 src/lib/alert.svelte create mode 100644 src/lib/auth.ts create mode 100644 src/lib/chart.svelte create mode 100644 src/lib/chart.ts create mode 100644 src/lib/coms.ts create mode 100644 src/lib/config.ts create mode 100644 src/lib/dateutil.ts create mode 100644 src/lib/drawBar.svelte create mode 100644 src/lib/figures/index.ts create mode 100644 src/lib/figures/textBox.ts create mode 100644 src/lib/figures/utils.ts create mode 100644 src/lib/i18n.js create mode 100644 src/lib/icon.svelte create mode 100644 src/lib/index.ts create mode 100644 src/lib/indicators/cloudInds.ts create mode 100644 src/lib/indicators/common.ts create mode 100644 src/lib/indicators/index.ts create mode 100644 src/lib/indicators/ktools.ts create mode 100644 src/lib/menuBar.svelte create mode 100644 src/lib/modal.svelte create mode 100644 src/lib/modalIndCfg.svelte create mode 100644 src/lib/modalIndSearch.svelte create mode 100644 src/lib/modalPeriod.svelte create mode 100644 src/lib/modalScreenShot.svelte create mode 100644 src/lib/modalSetting.svelte create mode 100644 src/lib/modalSymbol.svelte create mode 100644 src/lib/modalTimezone.svelte create mode 100644 src/lib/mydatafeed.ts create mode 100644 src/lib/netio.ts create mode 100644 src/lib/overlays/abcd.ts create mode 100644 src/lib/overlays/anyWaves.ts create mode 100644 src/lib/overlays/arrow.ts create mode 100644 src/lib/overlays/barSignal.ts create mode 100644 src/lib/overlays/circle.ts create mode 100644 src/lib/overlays/eightWaves.ts create mode 100644 src/lib/overlays/fibonacciCircle.ts create mode 100644 src/lib/overlays/fibonacciExtension.ts create mode 100644 src/lib/overlays/fibonacciSegment.ts create mode 100644 src/lib/overlays/fibonacciSpeedResistanceFan.ts create mode 100644 src/lib/overlays/fibonacciSpiral.ts create mode 100644 src/lib/overlays/fiveWaves.ts create mode 100644 src/lib/overlays/gannBox.ts create mode 100644 src/lib/overlays/index.ts create mode 100644 src/lib/overlays/note.ts create mode 100644 src/lib/overlays/parallelogram.ts create mode 100644 src/lib/overlays/rect.ts create mode 100644 src/lib/overlays/ruler.ts create mode 100644 src/lib/overlays/threeWaves.ts create mode 100644 src/lib/overlays/trade.ts create mode 100644 src/lib/overlays/triangle.ts create mode 100644 src/lib/overlays/utils.ts create mode 100644 src/lib/overlays/xabcd.ts create mode 100644 src/lib/stores/alerts.ts create mode 100644 src/lib/types.ts create mode 100644 src/routes/+layout.svelte create mode 100644 src/routes/+layout.ts create mode 100644 src/routes/+page.svelte create mode 100644 static/favicon.png create mode 100644 static/fonts/icomoon.eot create mode 100644 static/fonts/icomoon.svg create mode 100644 static/fonts/icomoon.ttf create mode 100644 static/fonts/icomoon.woff create mode 100644 svelte.config.js create mode 100644 tailwind.config.cjs create mode 100644 tsconfig.json create mode 100644 vite.config.ts create mode 100644 yarn.lock diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..8bb4c28 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,9 @@ +module.exports = { + //.. + settings: { + //... + 'svelte3/ignore-warnings': (warning) => { + return warning.code === 'a11y-click-events-have-key-events' + }, + }, +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6e46fad --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +yarn-error.log +.svelte-kit +.vscode + + +node_modules + +# Output +.output +.vercel +/.svelte-kit +/build +/dist + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..ab78a95 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..b513262 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,17 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": [ + "prettier-plugin-svelte" + ], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..37b4200 --- /dev/null +++ b/README.md @@ -0,0 +1,81 @@ +# KlineCharts-demo-svelte +这是一个示例项目,使用KlineCharts(10.0.0-alpha1)绘制金融K线图,界面UI从[KLineChart Pro](https://pro.klinecharts.com/getting-started.html)改写(KLineChart Pro使用Solid-js,本项目改写为svelte) +本项目使用[sveltekit](https://svelte.dev/) +如需vue版本,请参考[klinechart-ui-demo](https://github.com/anyongjin/klinechart-ui-demo)(此版本基于KlineChart 9.8.10) + +# 如何使用 +由于交易界面UI要求的定制性一般比较高,将此项目打包为package不太适合自由修改。 +所以建议直接clone本项目,提取需要的部分,自由修改页面组件和UI + +## 开始预览 +```bash +yarn install +yarn dev +``` + +## 开发笔记 +** 国际化 ** +使用inlang的国际化[插件](https://inlang.com/m/dxnzrydw/paraglide-sveltekit-i18n/getting-started) +1. 在 project.inlang/settings.json 中添加语言标签,并在 messages 文件夹下添加语言文件。 +5. 在需要使用语言标签的地方,使用: +```typescript +import * as m from '$lib/paraglide/messages.js' +m.hello() +m['hello']() +``` + +** 注册新指标 ** +在 src/lib/coms.ts 中添加新指标的字段和默认参数。 + +** 编译为静态资源 ** +sveltekit支持编译静态资源,只需将svelte.config.js中的`adapter-auto`改为`adapter-static`,然后执行`npm run build`,即可在dist目录下生成静态资源。 + +** 数据来源 ** +为演示需要,本项目固定使用KlineChart的假数据,如需使用真实数据,请在src/lib/mydatafeed.ts中取消注释改为自己的接口 + +** 云端指标 ** +本项目原生支持云端指标加载和显示,后端需提供`/kline/all_inds`和`/kline/calc_ind`接口,具体参数请参考`src/lib/indicators/cloudInds.ts` + +## TODO +* 覆盖物从localstorage中恢复 +* textBox多行文本边界计算不正确 +* 滚动条样式未全局生效 + +# sv + +Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npx sv create + +# create a new project in my-app +npx sv create my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. diff --git a/dist.zip b/dist.zip new file mode 100644 index 0000000000000000000000000000000000000000..61bc1818bb5fd152b68fe9c0348415caf9797a25 GIT binary patch literal 238445 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%0D4xq;!;dBJw<^ts1RRGG!vM<)DbD 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%0DxC7hH%7clWh!dkBOJPiy1E zgk`6(u@s9;wB;RO-yz&h=TJ;^LI*W+^k|LcnG6NCGCO0VVvA}vmyu$^4u#5coHhlhHdVebe}+vRh)+W=aWiUd-`I8| zeX)J(s9&G(+He6@fubC{L`Z{-fOHBHd2~no2ASaqSDv4yQ&g|}2-HzWieFwq)6lT) z>MCjl(cIU1ud3UXx0w%f@?3MwYt<|R_Q50r zi;NokqJA)oG&Sygh!9E*WG~>})J##uvenkzjH}0t)`IJvVb{e^uVOT(d zF~tkafG>$9x$G~p_~62wv%~v$ZiqfmlNCnI`kJqE)<{s^)NZ4~bqb|Z1GOEn*1$%` zrCQ1)yBLqBfmR*gLF5q=orH}V z-;GWIu@{jk>P@fE`c;~&+eXuExg?4lmdaws)~EF8#PS9Vif=dP@>+M=lDFx?(TdSE z^&T>I%7nwGhRaE0YTaCR!^8?)z<{I_Xn={=b#jOpINeZL%ZDO2wEBibQLCx#7%uW? zgZiQP3nbb=V`bjZ>7(PlWO1pQ;xlOzop0Mmt) z(d9)`U-@QrZDgpFWX*aNE8^w#0)dh%kO_Wr557X%5_1(vWaJk;60MNTzu<1KC+AO} zU2r#=ica=nrOy>phs<|4?|JUETeM8>lf#la-IcHs?j@(zd(m#y;5e`{*dNis6A<&V zVI@k8R;OD2sYmxl$kRM&)ttRUy*w9^)%o#_8XFi_+9dZU8xCbzc-yY)a|_-8AY1)v zmQZqAJ^&`wE4k6z#I+GtWU zAY}b{E?h?UaR7 zZ{Z-tB4wfi{vXqg+lQ(lfxffgLO{@5>w81bAJa{kI4$XwP0~Z=lmXH2g3katF*aBMzOM4Rw zFujnP8K<_0IP-7$CT@Sf*PWN7T`)>QTLx}3%jmyf>jt0ym~UrqWec{W7qC)vVRg2k z`z;<52JtT!z(22b+@IY)e`dyR{d@ey%)j<9`+)toC+Fo81-8!qo)WMizy*p~U4NqV z{4oot&r2^T&LzdE3}*SQn+_d+8s*Ey$N4C?!aR5=40P)Jb^S`SIQmmJ?d)}d8!9`K zl$5X$$o9AJzu#p3HpWN)A>7i+0DS#+TGJ@|U)@e|v&GB7z;sRr_VlIvc|M7OZnGT! zdq*#`80m$SrPcUl)qcN{|K7>VlRHjbp8pWIl9zzj_25Zp$ScdcU(1EdU?zG&83P9+ z6_wv-@SjiZ`Ks^xtP-xL8z+K-(7y-&Td*GNpMsg`1s*FnNT~_(|8`n&Y5sKS{F+nO zi%I`jgP#xeQwr!SJ-%96`sy0+vl&nV>_0BbFLVA`W%_DP?~j}-HK(s8tcrYOg%te1 zE&Ff%oHXY*0aDuUJ-IA9clF>T_*{RTk^d}JdbRoD*AM=qi~vx$^lA>Or^i-p#3(SW zuK)b{>~dKW^?J3ut2vC!*E;bd2dJI*zvNu6U~@GGhUZ^%fO=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/config-array/-/config-array-0.19.0.tgz", + "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.9.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/core/-/core-0.9.0.tgz", + "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/js/-/js-9.16.0.tgz", + "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", + "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@inlang/detect-json-formatting": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/detect-json-formatting/-/detect-json-formatting-1.0.0.tgz", + "integrity": "sha512-o0jeI8U4TgNlsPwI0y92jld8/18Loh2KEgHCYCJ42rCOdxFrA8R60cydlEd2/6jkdHFn5DxKj8rOyiKv3z9uOw==", + "dependencies": { + "guess-json-indent": "2.0.0" + } + }, + "node_modules/@inlang/json-types": { + "version": "1.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/json-types/-/json-types-1.1.0.tgz", + "integrity": "sha512-n6vS6AqETsCFbV4TdBvR/EH57waVXzKsMqeUQ+eH2Q6NUATfKhfLabgNms2A+QV3aedH/hLtb1pRmjl2ykBVZg==", + "peerDependencies": { + "@sinclair/typebox": "^0.31.0" + } + }, + "node_modules/@inlang/language-tag": { + "version": "1.5.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/language-tag/-/language-tag-1.5.1.tgz", + "integrity": "sha512-+NlYDxDvN5h/TKUmkuQv+Ct1flxaVRousCbek7oFEk3/afZPVLNTJhm+cX2xiOg3tmi2KKrBLfy/V9oUDHj6GQ==", + "dependencies": { + "@sinclair/typebox": "^0.31.17" + } + }, + "node_modules/@inlang/message": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/message/-/message-2.1.0.tgz", + "integrity": "sha512-Gr3wiErI7fW4iW11xgZzsJEUTjlZuz02fB/EO+ENTBlSHGyI1kzbCCeNqLr1mnGdQYiOxfuZxY0S4G5C6Pju3Q==", + "dependencies": { + "@inlang/language-tag": "1.5.1" + }, + "peerDependencies": { + "@sinclair/typebox": "^0.31.17" + } + }, + "node_modules/@inlang/message-lint-rule": { + "version": "1.4.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/message-lint-rule/-/message-lint-rule-1.4.7.tgz", + "integrity": "sha512-FCiFe/H25fqhsIb/YTb0K7eDJqEYzdr6ectF0xG4zARiS7nXz0FHxk2niJrIO8kFkB4mx6tszsgQ0xqD5cHQag==", + "dependencies": { + "@inlang/json-types": "1.1.0", + "@inlang/language-tag": "1.5.1", + "@inlang/message": "2.1.0", + "@inlang/project-settings": "2.4.2", + "@inlang/translatable": "1.3.1" + }, + "peerDependencies": { + "@sinclair/typebox": "^0.31.17" + } + }, + "node_modules/@inlang/module": { + "version": "1.2.14", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/module/-/module-1.2.14.tgz", + "integrity": "sha512-Z7rRa6x3RkzjdvNA7x+KskNGdSBEO46X9c7bTl6eZmLXy0J9yGDn6s4jpYqQzyKRG8g5mEqWcRqcVqdNwzj5Gg==", + "dependencies": { + "@inlang/message-lint-rule": "1.4.7", + "@inlang/plugin": "2.4.14" + }, + "peerDependencies": { + "@sinclair/typebox": "^0.31.17" + } + }, + "node_modules/@inlang/paraglide-js": { + "version": "1.11.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/paraglide-js/-/paraglide-js-1.11.3.tgz", + "integrity": "sha512-WVNraTylfZty0kt5EQNh8yx0WUJbtYEmc8YoNRRSUWB0rqeCh8a9xIQnmzZxBMf7IL7es+Ppiqx15py7mukJRw==", + "dependencies": { + "@inlang/detect-json-formatting": "1.0.0", + "commander": "11.1.0", + "consola": "3.2.3", + "dedent": "1.5.1", + "json5": "2.2.3", + "posthog-node": "^4.0.1" + }, + "bin": { + "paraglide-js": "bin/run.js" + } + }, + "node_modules/@inlang/paraglide-js/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/@inlang/paraglide-sveltekit": { + "version": "0.12.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/paraglide-sveltekit/-/paraglide-sveltekit-0.12.1.tgz", + "integrity": "sha512-UaNgdaa2NWRwwcqo1HZA+mmu5EZFTZ5i65dJJUC6jyqze/L7ozbIG73UHjXf57WONtLjbsEA7WlxcwMVWzpMvw==", + "dependencies": { + "@inlang/paraglide-js": "1.11.3", + "@inlang/paraglide-vite": "1.2.77", + "@lix-js/client": "2.2.1", + "commander": "^12.0.0", + "dedent": "1.5.1", + "devalue": "^4.3.2", + "magic-string": "^0.30.5", + "svelte": "^5.0.0 || ^5.0.0-next.1 || ^5.0.0-rc.1" + }, + "bin": { + "paraglide-sveltekit": "bin/run.js" + }, + "peerDependencies": { + "@sveltejs/kit": "^2.4.3" + } + }, + "node_modules/@inlang/paraglide-sveltekit/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inlang/paraglide-sveltekit/node_modules/devalue": { + "version": "4.3.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/devalue/-/devalue-4.3.3.tgz", + "integrity": "sha512-UH8EL6H2ifcY8TbD2QsxwCC/pr5xSwPvv85LrLXVihmHVC3T3YqTCIwnR5ak0yO1KYqlxrPVOA/JVZJYPy2ATg==" + }, + "node_modules/@inlang/paraglide-unplugin": { + "version": "1.8.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/paraglide-unplugin/-/paraglide-unplugin-1.8.8.tgz", + "integrity": "sha512-2mQzzRwJY36Z9wsnielmec0uMhUOgTje/xMy9pG7h+voO2rrX89MQbEKBHkRzkb0yq090oILDFq3rUXRCgW07g==", + "dependencies": { + "@inlang/paraglide-js": "1.11.3", + "@inlang/sdk": "0.36.3", + "@lix-js/client": "2.2.1", + "unplugin": "^1.14.1" + } + }, + "node_modules/@inlang/paraglide-vite": { + "version": "1.2.77", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/paraglide-vite/-/paraglide-vite-1.2.77.tgz", + "integrity": "sha512-rn2hUcgYnQOhHc4qNerMc7AUqBN4WTINhm8MwP5L0f/EIJLsQ7jDLMrZRiBOkFuMBj7p53oHElhwk+juBqkCAw==", + "dependencies": { + "@inlang/paraglide-unplugin": "1.8.8" + } + }, + "node_modules/@inlang/plugin": { + "version": "2.4.14", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/plugin/-/plugin-2.4.14.tgz", + "integrity": "sha512-HFI1t1tKs6jXqwKVl59vvt7kvMgg2Po7xA3IFijfJTZCt0tTI8txqeXCUV9jhUop29Hqj6a5zQd32BYv33Dulw==", + "dependencies": { + "@inlang/json-types": "1.1.0", + "@inlang/language-tag": "1.5.1", + "@inlang/message": "2.1.0", + "@inlang/project-settings": "2.4.2", + "@inlang/translatable": "1.3.1", + "@lix-js/fs": "2.2.0" + }, + "peerDependencies": { + "@sinclair/typebox": "^0.31.17" + } + }, + "node_modules/@inlang/project-settings": { + "version": "2.4.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/project-settings/-/project-settings-2.4.2.tgz", + "integrity": "sha512-Okus2JdwTzNebZHkXCrUH/zIWwqu7kWm/ZQaM6a31oRIEA2JdQJtyNGM8E/KrwGfEuq18U+WV03+tR3tkwsGvA==", + "dependencies": { + "@inlang/json-types": "1.1.0", + "@inlang/language-tag": "1.5.1" + }, + "peerDependencies": { + "@sinclair/typebox": "^0.31.17" + } + }, + "node_modules/@inlang/result": { + "version": "1.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/result/-/result-1.1.0.tgz", + "integrity": "sha512-zLGroi9EUiHuOjUOaglUVTFO7EWdo2OARMJLBO1Q5Ga/xJmSQb6XS1lhqEXBFAjgFarfEMX5YEJWWALogYV3wA==" + }, + "node_modules/@inlang/sdk": { + "version": "0.36.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/sdk/-/sdk-0.36.3.tgz", + "integrity": "sha512-wjsavc44H24v74tdEQ13FqZZcr43T106oEfHJnBLzEP55Zz2JJWABLund+DEdosZx+9E8mJBEW5JlVnlBwP3Zw==", + "dependencies": { + "@inlang/json-types": "1.1.0", + "@inlang/language-tag": "1.5.1", + "@inlang/message": "2.1.0", + "@inlang/message-lint-rule": "1.4.7", + "@inlang/module": "1.2.14", + "@inlang/plugin": "2.4.14", + "@inlang/project-settings": "2.4.2", + "@inlang/result": "1.1.0", + "@inlang/translatable": "1.3.1", + "@lix-js/client": "2.2.1", + "@lix-js/fs": "2.2.0", + "@sinclair/typebox": "^0.31.17", + "debug": "^4.3.4", + "dedent": "1.5.1", + "deepmerge-ts": "^5.1.0", + "murmurhash3js": "^3.0.1", + "solid-js": "1.6.12", + "throttle-debounce": "^5.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@inlang/translatable": { + "version": "1.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@inlang/translatable/-/translatable-1.3.1.tgz", + "integrity": "sha512-VAtle21vRpIrB+axtHFrFB0d1HtDaaNj+lV77eZQTJyOWbTFYTVIQJ8WAbyw9eu4F6h6QC2FutLyxjMomxfpcQ==", + "dependencies": { + "@inlang/language-tag": "1.5.1" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://mirrors.cloud.tencent.com/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lix-js/client": { + "version": "2.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@lix-js/client/-/client-2.2.1.tgz", + "integrity": "sha512-6DTJdRN2L2a1A8OxW1Wqh3ZOORqq8+YlCALMF5UMoxhfHE4Fcq9FZztMkAV+KwhrDSsp0USWvD9myG0XX+v6QQ==", + "dependencies": { + "@lix-js/fs": "2.2.0", + "async-lock": "1.4.1", + "clean-git-ref": "2.0.1", + "crc-32": "1.2.2", + "ignore": "5.3.1", + "octokit": "3.1.2", + "pako": "1.0.11", + "pify": "5.0.0", + "sha.js": "2.4.11" + } + }, + "node_modules/@lix-js/client/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@lix-js/client/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lix-js/fs": { + "version": "2.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@lix-js/fs/-/fs-2.2.0.tgz", + "integrity": "sha512-B9X3FjD8WmdG7tbA44JuniSO0KdKBWnjfxl8zpgrDCkavrp/GP7U0xxBkc0WgeeoHjQ/pkqq9VqtWB2kS9jIUg==", + "dependencies": { + "typescript": "5.2.2" + } + }, + "node_modules/@lix-js/fs/node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@octokit/app": { + "version": "14.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/app/-/app-14.1.0.tgz", + "integrity": "sha512-g3uEsGOQCBl1+W1rgfwoRFUIR6PtvB2T1E4RpygeUU5LrLvlOqcxrt5lfykIeRpUPpupreGJUYl70fqMDXdTpw==", + "dependencies": { + "@octokit/auth-app": "^6.0.0", + "@octokit/auth-unauthenticated": "^5.0.0", + "@octokit/core": "^5.0.0", + "@octokit/oauth-app": "^6.0.0", + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/types": "^12.0.0", + "@octokit/webhooks": "^12.0.4" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-app": { + "version": "6.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/auth-app/-/auth-app-6.1.3.tgz", + "integrity": "sha512-dcaiteA6Y/beAlDLZOPNReN3FGHu+pARD6OHfh3T9f3EO09++ec+5wt3KtGGSSs2Mp5tI8fQwdMOEnrzBLfgUA==", + "dependencies": { + "@octokit/auth-oauth-app": "^7.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", + "deprecation": "^2.3.1", + "lru-cache": "npm:@wolfy1339/lru-cache@^11.0.2-patch.1", + "universal-github-app-jwt": "^1.1.2", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-app/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/auth-app/node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/auth-app/node_modules/lru-cache": { + "name": "@wolfy1339/lru-cache", + "version": "11.0.2-patch.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@wolfy1339/lru-cache/-/lru-cache-11.0.2-patch.1.tgz", + "integrity": "sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA==", + "engines": { + "node": "18 >=18.20 || 20 || >=22" + } + }, + "node_modules/@octokit/auth-oauth-app": { + "version": "7.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz", + "integrity": "sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA==", + "dependencies": { + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", + "@types/btoa-lite": "^1.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/auth-oauth-device": { + "version": "6.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz", + "integrity": "sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw==", + "dependencies": { + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/auth-oauth-user": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz", + "integrity": "sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ==", + "dependencies": { + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-unauthenticated": { + "version": "5.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz", + "integrity": "sha512-oxeWzmBFxWd+XolxKTc4zr+h3mt+yofn4r7OfoIkR/Cj/o70eEGmPsFbueyJE2iBAGpjgTnEOKM3pnuEGVmiqg==", + "dependencies": { + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/core/-/core-5.2.0.tgz", + "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", + "dependencies": { + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/core/node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "9.0.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", + "dependencies": { + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "7.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/graphql/-/graphql-7.1.0.tgz", + "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", + "dependencies": { + "@octokit/request": "^8.3.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/graphql/node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/oauth-app": { + "version": "6.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/oauth-app/-/oauth-app-6.1.0.tgz", + "integrity": "sha512-nIn/8eUJ/BKUVzxUXd5vpzl1rwaVxMyYbQkNZjHrF7Vk/yu98/YDF/N2KeWO7uZ0g3b5EyiFXFkZI8rJ+DH1/g==", + "dependencies": { + "@octokit/auth-oauth-app": "^7.0.0", + "@octokit/auth-oauth-user": "^4.0.0", + "@octokit/auth-unauthenticated": "^5.0.0", + "@octokit/core": "^5.0.0", + "@octokit/oauth-authorization-url": "^6.0.2", + "@octokit/oauth-methods": "^4.0.0", + "@types/aws-lambda": "^8.10.83", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/oauth-authorization-url": { + "version": "6.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz", + "integrity": "sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/oauth-methods": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz", + "integrity": "sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw==", + "dependencies": { + "@octokit/oauth-authorization-url": "^6.0.2", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", + "btoa-lite": "^1.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" + }, + "node_modules/@octokit/plugin-paginate-graphql": { + "version": "4.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.1.tgz", + "integrity": "sha512-R8ZQNmrIKKpHWC6V2gum4x9LG2qF1RxRjo27gjQcG3j+vf2tLsEfE7I/wRWEPzYMaenr1M+qDAtNcwZve1ce1A==", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=5" + } + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "9.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", + "dependencies": { + "@octokit/types": "^12.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "10.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", + "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", + "dependencies": { + "@octokit/types": "^12.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "6.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/plugin-retry/-/plugin-retry-6.1.0.tgz", + "integrity": "sha512-WrO3bvq4E1Xh1r2mT9w6SDFg01gFmP81nIG77+p/MqW1JeXXgL++6umim3t6x0Zj5pZm3rXAN+0HEjmmdhIRig==", + "dependencies": { + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^13.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" + } + }, + "node_modules/@octokit/plugin-retry/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/plugin-retry/node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "8.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz", + "integrity": "sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==", + "dependencies": { + "@octokit/types": "^12.2.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^5.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "8.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", + "dependencies": { + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "5.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", + "dependencies": { + "@octokit/types": "^13.1.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/request-error/node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "13.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz", + "integrity": "sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, + "node_modules/@octokit/webhooks": { + "version": "12.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/webhooks/-/webhooks-12.3.1.tgz", + "integrity": "sha512-BVwtWE3rRXB9IugmQTfKspqjNa8q+ab73ddkV9k1Zok3XbuOxJUi4lTYk5zBZDhfWb/Y2H+RO9Iggm25gsqeow==", + "dependencies": { + "@octokit/request-error": "^5.0.0", + "@octokit/webhooks-methods": "^4.1.0", + "@octokit/webhooks-types": "7.6.1", + "aggregate-error": "^3.1.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/webhooks-methods": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz", + "integrity": "sha512-zoQyKw8h9STNPqtm28UGOYFE7O6D4Il8VJwhAtMHFt2C4L0VQT1qGKLeefUOqHNs1mNRYSadVv7x0z8U2yyeWQ==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/webhooks-types": { + "version": "7.6.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@octokit/webhooks-types/-/webhooks-types-7.6.1.tgz", + "integrity": "sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw==" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://mirrors.cloud.tencent.com/npm/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.28.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz", + "integrity": "sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.31.28", + "resolved": "https://mirrors.cloud.tencent.com/npm/@sinclair/typebox/-/typebox-0.31.28.tgz", + "integrity": "sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ==" + }, + "node_modules/@sveltejs/adapter-auto": { + "version": "3.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@sveltejs/adapter-auto/-/adapter-auto-3.3.1.tgz", + "integrity": "sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-meta-resolve": "^4.1.0" + }, + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/adapter-static": { + "version": "3.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/@sveltejs/adapter-static/-/adapter-static-3.0.6.tgz", + "integrity": "sha512-MGJcesnJWj7FxDcB/GbrdYD3q24Uk0PIL4QIX149ku+hlJuj//nxUbb0HxUTpjkecWfHjVveSUnUaQWnPRXlpg==", + "license": "MIT", + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/kit": { + "version": "2.9.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@sveltejs/kit/-/kit-2.9.0.tgz", + "integrity": "sha512-W3E7ed3ChB6kPqRs2H7tcHp+Z7oiTFC6m+lLyAQQuyXeqw6LdNuuwEUla+5VM0OGgqQD+cYD6+7Xq80vVm17Vg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^0.6.0", + "devalue": "^5.1.0", + "esm-env": "^1.2.1", + "import-meta-resolve": "^4.1.0", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", + "sade": "^1.8.1", + "set-cookie-parser": "^2.6.0", + "sirv": "^3.0.0", + "tiny-glob": "^0.2.9" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": ">=18.13" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.3 || ^6.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "4.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-4.0.2.tgz", + "integrity": "sha512-Y9r/fWy539XlAC7+5wfNJ4zH6TygUYoQ0Eegzp0zDDqhJ54+92gOyOX1l4MO1cJSx0O+Gp13YePT5XEa3+kX0w==", + "license": "MIT", + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^3.0.0-next.0||^3.0.0", + "debug": "^4.3.7", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.12", + "vitefu": "^1.0.3" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "svelte": "^5.0.0-next.96 || ^5.0.0", + "vite": "^5.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "3.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-3.0.1.tgz", + "integrity": "sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.7" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.0||^4.0.0", + "svelte": "^5.0.0-next.96 || ^5.0.0", + "vite": "^5.0.0" + } + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.146", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/aws-lambda/-/aws-lambda-8.10.146.tgz", + "integrity": "sha512-3BaDXYTh0e6UCJYL/jwV/3+GRslSc08toAiZSmleYtkAUyV5rtvdPYxrG/88uqvTuT6sb27WE9OS90ZNTIuQ0g==" + }, + "node_modules/@types/btoa-lite": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", + "integrity": "sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==" + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", + "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.17.13", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==" + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz", + "integrity": "sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/type-utils": "8.16.0", + "@typescript-eslint/utils": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/parser/-/parser-8.16.0.tgz", + "integrity": "sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz", + "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz", + "integrity": "sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.16.0", + "@typescript-eslint/utils": "8.16.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/types/-/types-8.16.0.tgz", + "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz", + "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/utils/-/utils-8.16.0.tgz", + "integrity": "sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz", + "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.16.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://mirrors.cloud.tencent.com/npm/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "license": "MIT", + "peerDependencies": { + "acorn": ">=8.9.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/async-lock": { + "version": "1.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/async-lock/-/async-lock-1.4.1.tgz", + "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://mirrors.cloud.tencent.com/npm/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.7.9", + "resolved": "https://mirrors.cloud.tencent.com/npm/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://mirrors.cloud.tencent.com/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/btoa-lite": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001685", + "resolved": "https://mirrors.cloud.tencent.com/npm/caniuse-lite/-/caniuse-lite-1.0.30001685.tgz", + "integrity": "sha512-e/kJN1EMyHQzgcMEEgoo+YTCO1NGCmIYHk5Qk8jT6AazWemS5QFKJ5ShCJlH3GZrNIdZofcNCEwZqbMjjKzmnA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/chokidar/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/clean-git-ref": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/clean-git-ref/-/clean-git-ref-2.0.1.tgz", + "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/culori": { + "version": "3.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/culori/-/culori-3.3.0.tgz", + "integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/daisyui": { + "version": "4.12.14", + "resolved": "https://mirrors.cloud.tencent.com/npm/daisyui/-/daisyui-4.12.14.tgz", + "integrity": "sha512-hA27cdBasdwd4/iEjn+aidoCrRroDuo3G5W9NDKaVCJI437Mm/3eSL/2u7MkZ0pt8a+TrYF3aT2pFVemTS3how==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-selector-tokenizer": "^0.8", + "culori": "^3", + "picocolors": "^1", + "postcss-js": "^4" + }, + "engines": { + "node": ">=16.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/daisyui" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://mirrors.cloud.tencent.com/npm/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deepmerge-ts": { + "version": "5.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", + "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "node_modules/destr": { + "version": "2.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==" + }, + "node_modules/devalue": { + "version": "5.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/devalue/-/devalue-5.1.1.tgz", + "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://mirrors.cloud.tencent.com/npm/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.67", + "resolved": "https://mirrors.cloud.tencent.com/npm/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz", + "integrity": "sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint/-/eslint-9.16.0.tgz", + "integrity": "sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.16.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.5", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-svelte": { + "version": "2.46.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-plugin-svelte/-/eslint-plugin-svelte-2.46.1.tgz", + "integrity": "sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@jridgewell/sourcemap-codec": "^1.4.15", + "eslint-compat-utils": "^0.5.1", + "esutils": "^2.0.3", + "known-css-properties": "^0.35.0", + "postcss": "^8.4.38", + "postcss-load-config": "^3.1.4", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.1.0", + "semver": "^7.6.2", + "svelte-eslint-parser": "^0.43.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0-0 || ^9.0.0-0", + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/esm-env": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/esm-env/-/esm-env-1.2.1.tgz", + "integrity": "sha512-U9JedYYjCnadUlXk7e1Kr+aENQhtUaoaV9+gZm1T8LC/YBAPJx3NSPIAurFOC0U5vrdSevnUJS2/wUVxGwPhng==", + "license": "MIT" + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrap": { + "version": "1.2.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/esrap/-/esrap-1.2.3.tgz", + "integrity": "sha512-ZlQmCCK+n7SGoqo7DnfKaP1sJZa49P01/dXzmjCASSo04p72w8EksT2NMK8CEX8DhKsfJXANioIw8VyHNsBfvQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://mirrors.cloud.tencent.com/npm/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "15.13.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/globals/-/globals-15.13.0.tgz", + "integrity": "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "license": "MIT" + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "license": "MIT" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/guess-json-indent": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/guess-json-indent/-/guess-json-indent-2.0.0.tgz", + "integrity": "sha512-3Tm6R43KhtZWEVSHZnFmYMV9+gf3Vu0HXNNYtPVk2s7o8eGwYlJPHrjLtYw/7HBc10YxV+bfzKMuOf24z5qFng==", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klinecharts": { + "version": "10.0.0-alpha1", + "resolved": "https://mirrors.cloud.tencent.com/npm/klinecharts/-/klinecharts-10.0.0-alpha1.tgz", + "integrity": "sha512-eE56BCuiZT5ookumWiYvoCrTooWbjnPd0FhGi0PyaIWjAR+sT6bDrC50XVoT7ztOZ80ZUeieEh3yW2kRSRgeGA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.35.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/known-css-properties/-/known-css-properties-0.35.0.tgz", + "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.14", + "resolved": "https://mirrors.cloud.tencent.com/npm/magic-string/-/magic-string-0.30.14.tgz", + "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://mirrors.cloud.tencent.com/npm/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/murmurhash3js": { + "version": "3.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/murmurhash3js/-/murmurhash3js-3.0.1.tgz", + "integrity": "sha512-KL8QYUaxq7kUbcl0Yto51rMcYt7E/4N4BG3/c96Iqw1PQrTRspu8Cpx4TZ4Nunib1d4bEkIH3gjCYlP2RLBdow==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch-native": { + "version": "1.6.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://mirrors.cloud.tencent.com/npm/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/octokit": { + "version": "3.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/octokit/-/octokit-3.1.2.tgz", + "integrity": "sha512-MG5qmrTL5y8KYwFgE1A4JWmgfQBaIETE/lOlfwNYx1QOtCQHGVxkRJmdUJltFc1HVn73d61TlMhMyNTOtMl+ng==", + "dependencies": { + "@octokit/app": "^14.0.2", + "@octokit/core": "^5.0.0", + "@octokit/oauth-app": "^6.0.0", + "@octokit/plugin-paginate-graphql": "^4.0.0", + "@octokit/plugin-paginate-rest": "^9.0.0", + "@octokit/plugin-rest-endpoint-methods": "^10.0.0", + "@octokit/plugin-retry": "^6.0.0", + "@octokit/plugin-throttling": "^8.0.0", + "@octokit/request-error": "^5.0.0", + "@octokit/types": "^12.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://mirrors.cloud.tencent.com/npm/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/papaparse": { + "version": "5.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/papaparse/-/papaparse-5.4.1.tgz", + "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://mirrors.cloud.tencent.com/npm/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.9", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/posthog-node": { + "version": "4.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/posthog-node/-/posthog-node-4.3.1.tgz", + "integrity": "sha512-By9SEGZxBLC7GVyVb+HlJlpxM/xI4iLUgwtsBS8f4bZ0wqYKiNHoYcFEwMJnTM9xQcQZztr6dqLmsJ7jCv0vxA==", + "dependencies": { + "axios": "^1.7.4", + "rusha": "^0.8.14" + }, + "engines": { + "node": ">=15.0.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/prettier/-/prettier-3.4.1.tgz", + "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-svelte": { + "version": "3.3.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/prettier-plugin-svelte/-/prettier-plugin-svelte-3.3.2.tgz", + "integrity": "sha512-kRPjH8wSj2iu+dO+XaUv4vD8qr5mdDmlak3IT/7AOgGIMRG86z/EHOLauFcClKEnOUf4A4nOA7sre5KrJD4Raw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "prettier": "^3.0.0", + "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://mirrors.cloud.tencent.com/npm/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.28.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/rollup/-/rollup-4.28.0.tgz", + "integrity": "sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.28.0", + "@rollup/rollup-android-arm64": "4.28.0", + "@rollup/rollup-darwin-arm64": "4.28.0", + "@rollup/rollup-darwin-x64": "4.28.0", + "@rollup/rollup-freebsd-arm64": "4.28.0", + "@rollup/rollup-freebsd-x64": "4.28.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.28.0", + "@rollup/rollup-linux-arm-musleabihf": "4.28.0", + "@rollup/rollup-linux-arm64-gnu": "4.28.0", + "@rollup/rollup-linux-arm64-musl": "4.28.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.28.0", + "@rollup/rollup-linux-riscv64-gnu": "4.28.0", + "@rollup/rollup-linux-s390x-gnu": "4.28.0", + "@rollup/rollup-linux-x64-gnu": "4.28.0", + "@rollup/rollup-linux-x64-musl": "4.28.0", + "@rollup/rollup-win32-arm64-msvc": "4.28.0", + "@rollup/rollup-win32-ia32-msvc": "4.28.0", + "@rollup/rollup-win32-x64-msvc": "4.28.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rusha": { + "version": "0.8.14", + "resolved": "https://mirrors.cloud.tencent.com/npm/rusha/-/rusha-0.8.14.tgz", + "integrity": "sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA==" + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://mirrors.cloud.tencent.com/npm/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/sirv/-/sirv-3.0.0.tgz", + "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/solid-js": { + "version": "1.6.12", + "resolved": "https://mirrors.cloud.tencent.com/npm/solid-js/-/solid-js-1.6.12.tgz", + "integrity": "sha512-JFqRobfG3q5r1l4RYVOAukk6+FWtHpXGIjgh/GEsHKweN/kK+iHOtzUALE6+P5t/jIcSNeGiVitX8gmJg+cYvQ==", + "dependencies": { + "csstype": "^3.1.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "5.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/svelte/-/svelte-5.3.1.tgz", + "integrity": "sha512-Y6PXppQhIZZ0HLZKj6UMV/VZPJbHiK98K8A5M7mJ+PGrz4erUmuDRUa8l7aw4La++Vl51YWzLUuuB0FZ7JPfnw==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "acorn-typescript": "^1.4.13", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "esm-env": "^1.2.1", + "esrap": "^1.2.3", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte-check": { + "version": "4.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/svelte-check/-/svelte-check-4.1.0.tgz", + "integrity": "sha512-AflEZYqI578KuDZcpcorPSf597LStxlkN7XqXi38u09zlHODVKd7c+7OuubGzbhgGRUqNTdQCZ+Ga96iRXEf2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "chokidar": "^4.0.1", + "fdir": "^6.2.0", + "picocolors": "^1.0.0", + "sade": "^1.7.4" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": ">=5.0.0" + } + }, + "node_modules/svelte-check/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/svelte-eslint-parser": { + "version": "0.43.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/svelte-eslint-parser/-/svelte-eslint-parser-0.43.0.tgz", + "integrity": "sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "postcss": "^8.4.39", + "postcss-scss": "^4.0.9" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "node_modules/svelte-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/svelte-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/svelte-persisted-store": { + "version": "0.12.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/svelte-persisted-store/-/svelte-persisted-store-0.12.0.tgz", + "integrity": "sha512-BdBQr2SGSJ+rDWH8/aEV5GthBJDapVP0GP3fuUCA7TjYG5ctcB+O9Mj9ZC0+Jo1oJMfZUd1y9H68NFRR5MyIJA==", + "engines": { + "node": ">=0.14" + }, + "peerDependencies": { + "svelte": "^3.48.0 || ^4 || ^5" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.15", + "resolved": "https://mirrors.cloud.tencent.com/npm/tailwindcss/-/tailwindcss-3.4.15.tgz", + "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/tailwindcss/node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/tailwindcss/node_modules/yaml": { + "version": "2.6.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://mirrors.cloud.tencent.com/npm/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "license": "MIT", + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://mirrors.cloud.tencent.com/npm/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/typescript-eslint/-/typescript-eslint-8.16.0.tgz", + "integrity": "sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.16.0", + "@typescript-eslint/parser": "8.16.0", + "@typescript-eslint/utils": "8.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" + }, + "node_modules/ui": { + "resolved": "", + "link": true + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, + "node_modules/universal-github-app-jwt": { + "version": "1.2.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/universal-github-app-jwt/-/universal-github-app-jwt-1.2.0.tgz", + "integrity": "sha512-dncpMpnsKBk0eetwfN8D8OUHGfiDhhJ+mtsbMl+7PfW7mYjiH8LIcqRmYMtzYLgSh47HjfdBtrBwIQ/gizKR3g==", + "dependencies": { + "@types/jsonwebtoken": "^9.0.0", + "jsonwebtoken": "^9.0.2" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" + }, + "node_modules/unplugin": { + "version": "1.16.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/unplugin/-/unplugin-1.16.0.tgz", + "integrity": "sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.11", + "resolved": "https://mirrors.cloud.tencent.com/npm/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.0.4", + "resolved": "https://mirrors.cloud.tencent.com/npm/vitefu/-/vitefu-1.0.4.tgz", + "integrity": "sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==", + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://mirrors.cloud.tencent.com/npm/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://mirrors.cloud.tencent.com/npm/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://mirrors.cloud.tencent.com/npm/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://mirrors.cloud.tencent.com/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "resolved": "https://mirrors.cloud.tencent.com/npm/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "license": "MIT" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..73f5cce --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "name": "ui", + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "format": "prettier --write .", + "lint": "prettier --check . && eslint ." + }, + "devDependencies": { + "@inlang/paraglide-js": "1.11.3", + "@sveltejs/adapter-auto": "^3.0.0", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "autoprefixer": "^10.4.20", + "daisyui": "^4.12.14", + "eslint": "^9.7.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-svelte": "^2.36.0", + "globals": "^15.0.0", + "postcss": "^8.4.49", + "prettier": "^3.3.2", + "prettier-plugin-svelte": "^3.2.6", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "tailwindcss": "^3.4.15", + "typescript": "^5.0.0", + "typescript-eslint": "^8.0.0", + "vite": "^5.0.3" + }, + "dependencies": { + "@inlang/paraglide-sveltekit": "0.12.1", + "@sveltejs/adapter-static": "^3.0.6", + "@types/lodash": "^4.17.13", + "dayjs": "^1.11.13", + "klinecharts": "^10.0.0-alpha1", + "lodash": "^4.17.21", + "ofetch": "^1.4.1", + "papaparse": "^5.4.1", + "svelte-persisted-store": "^0.12.0", + "ui": "file:" + } +} diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..3ea9307 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,3 @@ +module.exports = { + plugins: [require('tailwindcss'), require('autoprefixer')], +}; diff --git a/project.inlang/.gitignore b/project.inlang/.gitignore new file mode 100644 index 0000000..5e46596 --- /dev/null +++ b/project.inlang/.gitignore @@ -0,0 +1 @@ +cache \ No newline at end of file diff --git a/project.inlang/project_id b/project.inlang/project_id new file mode 100644 index 0000000..cfcd53f --- /dev/null +++ b/project.inlang/project_id @@ -0,0 +1 @@ +b1a0b425035e2919d2df913dfab0a177a2a4751809c022408fca41371548468c \ No newline at end of file diff --git a/project.inlang/settings.json b/project.inlang/settings.json new file mode 100644 index 0000000..f36f72d --- /dev/null +++ b/project.inlang/settings.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://inlang.com/schema/project-settings", + "sourceLanguageTag": "en", + "languageTags": [ + "en", + "zh-CN" + ], + "modules": [ + "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-empty-pattern@latest/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-missing-translation@latest/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-without-source@latest/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@latest/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@latest/dist/index.js" + ], + "plugin.inlang.messageFormat": { + "pathPattern": "./messages/{languageTag}.json" + } +} \ No newline at end of file diff --git a/src/app.d.ts b/src/app.d.ts new file mode 100644 index 0000000..85067e5 --- /dev/null +++ b/src/app.d.ts @@ -0,0 +1,17 @@ +import type { AvailableLanguageTag } from "../../lib/paraglide/runtime" +import type { ParaglideLocals } from "@inlang/paraglide-sveltekit" +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + interface Locals { + paraglide: ParaglideLocals, +} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/src/app.html b/src/app.html new file mode 100644 index 0000000..ba49e74 --- /dev/null +++ b/src/app.html @@ -0,0 +1,16 @@ + + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/src/hooks.js b/src/hooks.js new file mode 100644 index 0000000..8c76938 --- /dev/null +++ b/src/hooks.js @@ -0,0 +1,3 @@ +// src/hooks.js +import { i18n } from '$lib/i18n.js' +export const reroute = i18n.reroute() diff --git a/src/hooks.server.js b/src/hooks.server.js new file mode 100644 index 0000000..2913ce9 --- /dev/null +++ b/src/hooks.server.js @@ -0,0 +1,3 @@ +// src/hooks.server.js +import { i18n } from '$lib/i18n.js' +export const handle = i18n.handle() diff --git a/src/lib/alert.svelte b/src/lib/alert.svelte new file mode 100644 index 0000000..c431f20 --- /dev/null +++ b/src/lib/alert.svelte @@ -0,0 +1,49 @@ + + + + + \ No newline at end of file diff --git a/src/lib/auth.ts b/src/lib/auth.ts new file mode 100644 index 0000000..920ed02 --- /dev/null +++ b/src/lib/auth.ts @@ -0,0 +1,89 @@ +import { writable } from 'svelte/store'; +import { getApi, postApi } from './netio'; + +interface AuthData { + status: number; // -1未验证 0验证中 1已验证 + data: Record | null; // 登录后返回的用户信息 + lastRefreshedAt: number | null; // 登录时间,13位毫秒时间戳 + token: string | null; // 登录后的token +} + +export const auth = writable({ + status: -1, // 初始状态为未验证 + data: null, + lastRefreshedAt: null, + token: null +}); + +export const signUp = async (username: string, password: string) => { + // 模拟注册逻辑 + auth.update((state) => ({ + ...state, + status: 0 // 注册后进入验证中状态 + })); + + try { + // 在这里发送注册请求 + // const response = await fetch('/api/signup', { method: 'POST', body: JSON.stringify({ username, password }) }); + // const result = await response.json(); + const result = { token: 'dummyToken', data: { username }, lastRefreshedAt: Date.now() }; // 模拟返回 + auth.set({ + status: 1, + data: result.data, + lastRefreshedAt: result.lastRefreshedAt, + token: result.token + }); + } catch (error) { + console.error('Sign up failed:', error); + auth.update((state) => ({ ...state, status: -1 })); + } +}; + +export const signIn = async (username: string, password: string) => { + auth.update((state) => ({ + ...state, + status: 0 // 登录时进入验证中状态 + })); + + try { + // 在这里发送登录请求 + // const response = await fetch('/api/signin', { method: 'POST', body: JSON.stringify({ username, password }) }); + // const result = await response.json(); + const result = { token: 'dummyToken', data: { username }, lastRefreshedAt: Date.now() }; // 模拟返回 + auth.set({ + status: 1, + data: result.data, + lastRefreshedAt: result.lastRefreshedAt, + token: result.token + }); + } catch (error) { + console.error('Sign in failed:', error); + auth.update((state) => ({ ...state, status: -1 })); + } +}; + +export const signOut = () => { + auth.set({ + status: -1, + data: null, + lastRefreshedAt: null, + token: null + }); +}; + +export const refresh = async () => { + try { + // 在这里发送刷新请求 + // const response = await fetch('/api/refresh', { method: 'POST', headers: { Authorization: `Bearer ${auth.token}` } }); + // const result = await response.json(); + const result = { token: 'newDummyToken', lastRefreshedAt: Date.now() }; // 模拟返回 + auth.update((state) => ({ + ...state, + token: result.token, + lastRefreshedAt: result.lastRefreshedAt + })); + } catch (error) { + console.error('Token refresh failed:', error); + auth.update((state) => ({ ...state, status: -1 })); + } +}; diff --git a/src/lib/chart.svelte b/src/lib/chart.svelte new file mode 100644 index 0000000..6f72417 --- /dev/null +++ b/src/lib/chart.svelte @@ -0,0 +1,399 @@ + + +
$ctx.clickChart += 1}> +
+ {#each $alerts as alert (alert.id)} + + {/each} +
+ +
+ {#if $save.showDrawBar} + + {/if} +
e.key === 'Delete' && drawBarRef?.clickRemove()}>
+
+
+ + \ No newline at end of file diff --git a/src/lib/chart.ts b/src/lib/chart.ts new file mode 100644 index 0000000..be48576 --- /dev/null +++ b/src/lib/chart.ts @@ -0,0 +1,119 @@ +import { getUTCStamp, getDateStr } from "./dateutil"; +import type { Period, SymbolInfo, BanInd } from "./types"; +import * as m from '$lib/paraglide/messages.js' + + +export type SaveInd = { + name: string, + pane_id: string + params?: any[] +} + + +const local_mains = ['MA', 'EMA', 'SMA', 'BOLL', 'SAR', 'BBI'] +const local_subs = ['VOL', 'MACD', 'KDJ', 'RSI', 'BIAS', 'BRAR', + 'CCI', 'DMI', 'CR', 'PSY', 'DMA', 'TRIX', 'OBV', 'VR', 'WR', 'MTM', 'EMV', + 'SAR', 'ROC', 'PVT', 'AO'] + +export class ChartCtx { + editPaneId: string + editIndName: string + modalIndCfg: boolean + + fireOhlcv: number // 触发ohlcv加载 + klineLoaded: number // 新的k线加载完成时+1 + cloudIndLoaded: number // 云指标加载完成时+1 + initDone: number // 初始化完成时+1 + clickChart: number // 点击图表时+1 + + loadingKLine: boolean // K线加载中 + loadingPairs: boolean // 品种加载中 + + timeStart: number + timeEnd: number + + allInds: BanInd[] + + constructor() { + this.editPaneId = '' + this.editIndName = '' + this.modalIndCfg = false + + this.fireOhlcv = 0 + this.klineLoaded = 0 + this.cloudIndLoaded = 0 + this.initDone = 0 + this.clickChart = 0 + + this.loadingKLine = false + this.loadingPairs = false + + this.timeEnd = 0 + this.timeStart = 0 + + this.allInds = [] + + for(let name of local_mains){ + const title = `${name} (${m[name]()})` + this.allInds.push({name, title, cloud: false, is_main: true}) + } + for(let name of local_subs){ + const title = `${name} (${m[name]()})` + this.allInds.push({name, title, cloud: false, is_main: false}) + } + } +} + +export class ChartSave { + showDrawBar: boolean + + period: Period + symbol: SymbolInfo + + dateStart: string + dateEnd: string + timezone: string + + curSymbols: SymbolInfo[] + allSymbols: SymbolInfo[] + allExgs: Set + + colorLong: string + colorShort: string + + saveInds: Record + + key: string + theme: string + + styles: Record + options: Record + + constructor() { + this.showDrawBar = true + + this.symbol = {name: 'BTC/USDT.P', ticker: 'BTC/USDT:USDT', market: 'linear', exchange: 'binance'} + this.period = {multiplier: 1, timespan: 'day', timeframe: '1d', secs: 86400} + + const timeEnd = getUTCStamp() + this.dateEnd = getDateStr(timeEnd, 'YYYYMMDD') + const timeStart = timeEnd - this.period.secs * 1000 * 500 + this.dateStart = getDateStr(timeStart, 'YYYYMMDD') + this.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone + + this.curSymbols = [] + this.allSymbols = [] + this.allExgs = new Set() + + this.colorLong = '#0000FF' + this.colorShort = '#FF0000' + + this.saveInds = {} + + this.key = '' + this.theme = 'default' + + this.styles = {} + this.options = {} + } +} \ No newline at end of file diff --git a/src/lib/coms.ts b/src/lib/coms.ts new file mode 100644 index 0000000..ccc3b10 --- /dev/null +++ b/src/lib/coms.ts @@ -0,0 +1,366 @@ +import * as kc from 'klinecharts'; +import type {CandleTooltipCustomCallbackData, CandleStyle} from 'klinecharts'; +import type {BarArr, Period, Timespan} from "./types"; +import {tf_to_secs, formatDate, dateTimeFormat} from "./dateutil"; +import * as m from '$lib/paraglide/messages.js' + + +export const formatPrecision = kc.utils.formatPrecision +export const formatThousands = kc.utils.formatThousands +export const formatBigNumber = kc.utils.formatBigNumber +const TooltipIconPosition = kc.TooltipIconPosition + +const _periods: Record = {} +// 有些周期需要对齐到指定的日期,下面应该按tfsecs从大到小排序 +const tfsecs_origins = [ + {tfsecs: 604800, origin: 345600, date: '1970-01-05'}, // 周级别,从1970-01-05星期一开始 +] + + +export function GetNumberDotOffset(value: number){ + value = Math.abs(value) + if(value >= 1)return 0 + let count = 0; + while (value < 1){ + value = value * 10; + count += 1; + } + return count; +} + +export function makePeriod(timeframe: string): Period { + if (_periods[timeframe]) return _periods[timeframe] + const sep_id = timeframe.length - 1 + const unit = timeframe.substring(sep_id); + const num = timeframe.substring(0, sep_id); + const num_val = parseInt(num); + let timespan: Timespan = 'minute'; + if (unit == 'w') { + timespan = 'week' + } else if (unit == 'd') { + timespan = 'day' + } else if (unit == 'h') { + timespan = 'hour' + } else if (unit == 'm') { + timespan = 'minute' + } else if (unit == 's') { + timespan = 'second' + } else { + throw new Error(`unsupport period: ${timeframe}`) + } + const secs = tf_to_secs(timeframe) + _periods[timeframe] = {multiplier: num_val, timespan, timeframe, secs} + return _periods[timeframe] +} + +export const AllPeriods: Period[] = [ + makePeriod('1m'), + makePeriod('5m'), + makePeriod('15m'), + makePeriod('30m'), + makePeriod('1h'), + makePeriod('2h'), + makePeriod('4h'), + makePeriod('8h'), + makePeriod('12h'), + makePeriod('1d'), + makePeriod('3d'), + makePeriod('1w'), +] + + +function getIconTool(id: string, icon: string, color: string, ){ + return{ + id, + position: TooltipIconPosition.Middle, + marginLeft: 8, + marginTop: 2, + marginRight: 0, + marginBottom: 0, + paddingLeft: 0, + paddingTop: 0, + paddingRight: 0, + paddingBottom: 0, + icon, + fontFamily: 'icomoon', + size: 14, + color: color, + activeColor: color, + backgroundColor: 'transparent', + activeBackgroundColor: 'rgba(22, 119, 255, 0.15)' + } +} + + +export function getThemeStyles(theme: string): Record { + const color = theme === 'dark' ? '#929AA5' : '#76808F' + const lineColor = theme === 'dark' ? '#555555' : '#dddddd' + // 注意,modalSetting中设置的样式path,必须在这里指定,否则无法重置样式 + return { + candle: { + type: kc.CandleType.CandleSolid, + priceMark: { + last: {show: true}, + high: {show: true}, + low: {show: true}, + }, + tooltip: { + custom: function (data: CandleTooltipCustomCallbackData, styles: CandleStyle) { + const defVal = styles.tooltip.defaultValue + const current = data.current + const prevClose = data.prev?.close ?? current.close + const changeValue = current.close - prevClose + const thousandsSeparator = ',' + const clow = data.current.low + const minProce = Math.min(clow, data.prev?.low ?? clow, data.next?.low ?? clow) + const pricePrecision = GetNumberDotOffset(minProce) + 2 + const volumePrecision = 3 + + const volPrecision = formatPrecision(current.volume ?? defVal, volumePrecision) + const volume = formatThousands(formatBigNumber(volPrecision), thousandsSeparator) + const change = prevClose === 0 ? defVal : `${formatPrecision(changeValue / prevClose * 100)}%` + return [ + {title: m.time_(), value: formatDate(dateTimeFormat!, current.timestamp, 'YYYY-MM-DD HH:mm')}, + {title: m.open_(), value: formatThousands(formatPrecision(current.open, pricePrecision), thousandsSeparator)}, + {title: m.high_(), value: formatThousands(formatPrecision(current.high, pricePrecision), thousandsSeparator)}, + {title: m.low_(), value: formatThousands(formatPrecision(current.low, pricePrecision), thousandsSeparator)}, + {title: m.close_(), value: formatThousands(formatPrecision(current.close, pricePrecision), thousandsSeparator)}, + {title: m.volume_(), value: volume}, + {title: m.change_(), value: change} + ] + } + } + }, + indicator: { + lastValueMark: { + show: true, + }, + tooltip: { + icons: [ + getIconTool('visible', '\ue903', color), + getIconTool('invisible', '\ue901', color), + getIconTool('setting', '\ue902', color), + getIconTool('close', '\ue900', color), + ] + } + }, + yAxis: { + type: 'normal', + reverse: false, + }, + grid: { + show: true, + horizontal:{ + color: lineColor, + }, + vertical:{ + color: lineColor, + } + } + } +} + +const param = m.param(); + +export const IndFieldsMap: Record[]> = { + AO: [ + { title: param + '1', precision: 0, min: 1, default: 5 }, + { title: param + '2', precision: 0, min: 1, default: 34 } + ], + BIAS: [ + { title: 'BIAS1', precision: 0, min: 1, styleKey: 'lines[0].color', default: 6 }, + { title: 'BIAS2', precision: 0, min: 1, styleKey: 'lines[1].color', default: 12 }, + { title: 'BIAS3', precision: 0, min: 1, styleKey: 'lines[2].color', default: 24 }, + { title: 'BIAS4', precision: 0, min: 1, styleKey: 'lines[3].color', default: 48 }, + { title: 'BIAS5', precision: 0, min: 1, styleKey: 'lines[4].color', default: 96 } + ], + BOLL: [ + { title: m.period(), precision: 0, min: 1, default: 20 }, + { title: m.standard_deviation(), precision: 2, min: 1, default: 2 } + ], + BRAR: [ + { title: m.period(), precision: 0, min: 1, default: 26 } + ], + BBI: [ + { title: param + '1', precision: 0, min: 1, default: 3 }, + { title: param + '2', precision: 0, min: 1, default: 6 }, + { title: param + '3', precision: 0, min: 1, default: 12 }, + { title: param + '4', precision: 0, min: 1, default: 24 } + ], + CCI: [ + { title: param + '1', precision: 0, min: 1, default: 20 } + ], + CR: [ + { title: param + '1', precision: 0, min: 1, default: 26 }, + { title: param + '2', precision: 0, min: 1, default: 10 }, + { title: param + '3', precision: 0, min: 1, default: 20 }, + { title: param + '4', precision: 0, min: 1, default: 40 }, + { title: param + '5', precision: 0, min: 1, default: 60 } + ], + DMA: [ + { title: param + '1', precision: 0, min: 1, default: 10 }, + { title: param + '2', precision: 0, min: 1, default: 50 }, + { title: param + '3', precision: 0, min: 1, default: 10 } + ], + DMI: [ + { title: param + '1', precision: 0, min: 1, default: 14 }, + { title: param + '2', precision: 0, min: 1, default: 6 } + ], + EMV: [ + { title: param + '1', precision: 0, min: 1, default: 14 }, + { title: param + '2', precision: 0, min: 1, default: 9 } + ], + EMA: [ + { title: 'EMA1', precision: 0, min: 1, styleKey: 'lines[0].color', default: 5 }, + { title: 'EMA2', precision: 0, min: 1, styleKey: 'lines[1].color', default: 10 }, + { title: 'EMA3', precision: 0, min: 1, styleKey: 'lines[2].color', default: 30 }, + ], + MTM: [ + { title: param + '1', precision: 0, min: 1, default: 12 }, + { title: param + '2', precision: 0, min: 1, default: 6 } + ], + MA: [ + { title: 'MA1', precision: 0, min: 1, styleKey: 'lines[0].color', default: 5 }, + { title: 'MA2', precision: 0, min: 1, styleKey: 'lines[1].color', default: 10 }, + { title: 'MA3', precision: 0, min: 1, styleKey: 'lines[2].color', default: 30 }, + ], + MACD: [ + { title: param + '1', precision: 0, min: 1, default: 12 }, + { title: param + '2', precision: 0, min: 1, default: 26 }, + { title: param + '3', precision: 0, min: 1, default: 9 } + ], + OBV: [ + { title: param + '1', precision: 0, min: 1, default: 30 } + ], + PVT: [], + PSY: [ + { title: param + '1', precision: 0, min: 1, default: 12 }, + { title: param + '2', precision: 0, min: 1, default: 6 } + ], + ROC: [ + { title: param + '1', precision: 0, min: 1, default: 12 }, + { title: param + '2', precision: 0, min: 1, default: 6 } + ], + RSI: [ + { title: 'RSI1', precision: 0, min: 1, styleKey: 'lines[0].color', default: 6 }, + { title: 'RSI2', precision: 0, min: 1, styleKey: 'lines[1].color', default: 14 }, + { title: 'RSI3', precision: 0, min: 1, styleKey: 'lines[2].color', default: 24 }, + { title: 'RSI4', precision: 0, min: 1, styleKey: 'lines[3].color', default: 48 }, + { title: 'RSI5', precision: 0, min: 1, styleKey: 'lines[4].color', default: 96 } + ], + SMA: [ + { title: param + '1', precision: 0, min: 1, default: 12 }, + { title: param + '2', precision: 0, min: 1, default: 2 } + ], + KDJ: [ + { title: param + '1', precision: 0, min: 1, default: 9 }, + { title: param + '2', precision: 0, min: 1, default: 3 }, + { title: param + '3', precision: 0, min: 1, default: 3 } + ], + SAR: [ + { title: param + '1', precision: 0, min: 1, default: 2 }, + { title: param + '2', precision: 0, min: 1, default: 2 }, + { title: param + '3', precision: 0, min: 1, default: 20 } + ], + TRIX: [ + { title: param + '1', precision: 0, min: 1, default: 12 }, + { title: param + '2', precision: 0, min: 1, default: 9 } + ], + VOL: [ + { title: param + '1', precision: 0, min: 1, default: 5 }, + { title: param + '2', precision: 0, min: 1, default: 10 }, + { title: param + '3', precision: 0, min: 1, default: 20 } + ], + VR: [ + { title: param + '1', precision: 0, min: 1, default: 26 }, + { title: param + '2', precision: 0, min: 1, default: 6 } + ], + WR: [ + { title: 'WR1', precision: 0, min: 1, styleKey: 'lines[0].color', default: 5 }, + { title: 'WR2', precision: 0, min: 1, styleKey: 'lines[1].color', default: 10 }, + { title: 'WR3', precision: 0, min: 1, styleKey: 'lines[2].color', default: 20 }, + { title: 'WR4', precision: 0, min: 1, styleKey: 'lines[3].color', default: 30 }, + { title: 'WR5', precision: 0, min: 1, styleKey: 'lines[4].color', default: 60 }, + ] +} + +export function isNumber (value: any): value is number { + return typeof value === 'number' && !isNaN(value) +} + +export function readableNumber (value: string | number, keepLen=2): string { + const v = +value + if (isNumber(v)) { + if (v > 1000000000) { + return `${+((v / 1000000000).toFixed(keepLen))}B` + } + if (v > 1000000) { + return `${+((v / 1000000).toFixed(keepLen))}M` + } + if (v > 1000) { + return `${+((v / 1000).toFixed(keepLen))}K` + } + } + return `${value}` +} + + +export function align_tfsecs(time_secs: number, tf_secs: number){ + if(time_secs > 1000000000000){ + throw Error('10 digit timestamp is require for align_tfsecs') + } + let origin_off = 0 + for(const item of tfsecs_origins){ + if(tf_secs < item.tfsecs)break + if(tf_secs % item.tfsecs == 0){ + origin_off = item.origin + break + } + } + if(!origin_off){ + return Math.floor(time_secs / tf_secs) * tf_secs + } + return Math.floor((time_secs - origin_off) / tf_secs) * tf_secs + origin_off +} + + +export function align_tfmsecs(time_msecs: number, tf_msecs: number){ + if(time_msecs < 1000000000000){ + throw Error('13 digit timestamp is require for align_tfmsecs') + } + if(tf_msecs < 1000){ + throw Error('milliseconds tf_msecs is require for align_tfmsecs') + } + const time_secs = Math.floor(time_msecs / 1000) + const tf_secs = Math.floor(tf_msecs / 1000) + return align_tfsecs(time_secs, tf_secs) * 1000 +} + +export function build_ohlcvs(details: BarArr[], in_msecs: number, tf_msecs: number, last_bar: BarArr | null = null): BarArr[] { + if(last_bar){ + last_bar[0] = align_tfmsecs(last_bar[0], tf_msecs) + } + if(in_msecs == tf_msecs){ + if(last_bar && details[0][0] > last_bar[0]){ + details.splice(0, 0, last_bar) + } + return details + } + const result: BarArr[] = last_bar ? [last_bar] : [] + let lastIdx = result.length - 1 + details.forEach((row: BarArr, index: number) => { + row[0] = align_tfmsecs(row[0], tf_msecs) + if(lastIdx < 0 || row[0] > result[lastIdx][0]){ + result.push(row) + lastIdx += 1 + } + else{ + const prow = result[lastIdx] + prow[2] = Math.max(prow[2], row[2]) + prow[3] = Math.min(prow[3], row[3]) + prow[4] = row[4] + prow[5] += row[5] + } + }) + return result +} \ No newline at end of file diff --git a/src/lib/config.ts b/src/lib/config.ts new file mode 100644 index 0000000..35667db --- /dev/null +++ b/src/lib/config.ts @@ -0,0 +1 @@ +export const maxBarNum = 5000; \ No newline at end of file diff --git a/src/lib/dateutil.ts b/src/lib/dateutil.ts new file mode 100644 index 0000000..ddbccfb --- /dev/null +++ b/src/lib/dateutil.ts @@ -0,0 +1,328 @@ +import dayjs from "dayjs" +import timezone from 'dayjs/plugin/timezone' +import utc from 'dayjs/plugin/utc' +import {type Period} from "./types"; +import * as kc from 'klinecharts'; +const FormatDateType = kc.FormatDateType +export const formatDate = kc.utils.formatDate +let tz_applied = false; +let cur_tz: string = 'UTC' +dayjs.extend(timezone) +dayjs.extend(utc) + +const secs_min = 60 +const secs_hour = secs_min * 60 +const secs_day = secs_hour * 24 +const secs_week = secs_day * 7 +const secs_mon = secs_day * 30 +const secs_year = secs_day * 365 +const timezone_map: Record = { + 'Africa/Abidjan': 'utc', + 'Pacific/Honolulu': 'honolulu', + 'America/Juneau': 'juneau', + 'America/Los_Angeles': 'los_angeles', + 'America/Chicago': 'chicago', + 'America/Toronto': 'toronto', + 'America/Sao_Paulo': 'sao_paulo', + 'Europe/London': 'london', + 'Europe/Berlin': 'berlin', + 'Asia/Bahrain': 'bahrain', + 'Asia/Dubai': 'dubai', + 'Asia/Ashkhabad': 'ashkhabad', + 'Asia/Almaty': 'almaty', + 'Asia/Bangkok': 'bangkok', + 'Asia/Shanghai': 'shanghai', + 'Asia/Tokyo': 'tokyo', + 'Australia/Sydney': 'sydney', + 'Pacific/Guadalcanal': 'guadalcanal', + 'Pacific/Auckland': 'auckland', +} + +export function getUTCStamp(): number{ + let result = dayjs() + return result.valueOf() +} + +/** + * 将字符串的时间转为13位时间戳,要求输入的是UTC时区字符串 + * @param date_str 10位/13位时间戳、YYYYMMDD YYYYMMDDHHmm YYYYMMDDHHmmss + */ +export function toUTCStamp(date_str: string): number{ + if(!date_str)return 0 + date_str = date_str.trim(); + const isNumOnly = /^\d+$/.test(date_str); + let result: dayjs.Dayjs | null = null + if(isNumOnly){ + // 是纯数字 + const numLen = date_str.length; + if(numLen == 4){ + result = dayjs(date_str, 'MMDD') + } + else if(numLen == 6){ + result = dayjs(date_str, 'YYMMDD') + } + else if(numLen == 8){ + result = dayjs(date_str, 'YYYYMMDD') + } + else if(numLen == 10){ + // 秒时间戳 + result = dayjs.unix(parseInt(date_str)) + } + else if(numLen == 12){ + result = dayjs(date_str, 'YYYYMMDDHHmm') + } + else if(numLen == 13){ + // 毫秒时间戳 + result = dayjs(parseInt(date_str)) + } + else if(numLen == 14){ + result = dayjs(date_str, 'YYYYMMDDHHmmss') + } + else{ + console.error('invalid date format:', date_str) + return 0; + } + } + else{ + result = dayjs(date_str, ['YYYY/MM/DD', 'YYYY/MM/DD HH:mm', 'YYYY/MM/DD HH:mm:ss', + 'YYYY-MM-DD', 'YYYY-MM-DD HH:mm', 'YYYY-MM-DD HH:mm:ss'], true) + } + if(!result)return 0 + if(!tz_applied){ + console.error('local timezone not applied') + } + result = result.tz(cur_tz, true) + return result.valueOf() +} + +export function getDateStr(date_ts: number, template: string = 'YYYY-MM-DD HH:mm:ss', + tz: string | undefined = undefined): string { + if (!date_ts) return '--' + let result: dayjs.Dayjs | null = null + if (date_ts > 1000000000000) { + result = dayjs(date_ts) + } else { + result = dayjs.unix(date_ts) + } + result = result.tz(tz || cur_tz, true) + if (!tz_applied) { + console.error('local timezone not applied') + } + return result.format(template) +} + +export function fmtDuration(cost_secs: number){ + if(!cost_secs)return '00:00' + return dayjs.utc(cost_secs * 1000).format('HH:mm:ss') +} + +export function adjustFromTo(period: Period, toTimestamp: number, count: number) { + let to = toTimestamp + let from = to + switch (period.timespan) { + case 'minute': { + to = to - (to % (60 * 1000)) + from = to - count * period.multiplier * 60 * 1000 + break + } + case 'hour': { + to = to - (to % (60 * 60 * 1000)) + from = to - count * period.multiplier * 60 * 60 * 1000 + break + } + case 'day': { + to = to - (to % (60 * 60 * 1000)) + from = to - count * period.multiplier * 24 * 60 * 60 * 1000 + break + } + case 'week': { + const date = new Date(to) + const week = date.getDay() + const dif = week === 0 ? 6 : week - 1 + to = to - dif * 60 * 60 * 24 + const newDate = new Date(to) + to = new Date(`${newDate.getFullYear()}-${newDate.getMonth() + 1}-${newDate.getDate()}`).getTime() + from = count * period.multiplier * 7 * 24 * 60 * 60 * 1000 + break + } + case 'month': { + const date = new Date(to) + const year = date.getFullYear() + const month = date.getMonth() + 1 + to = new Date(`${year}-${month}-01`).getTime() + from = count * period.multiplier * 30 * 24 * 60 * 60 * 1000 + const fromDate = new Date(from) + from = new Date(`${fromDate.getFullYear()}-${fromDate.getMonth() + 1}-01`).getTime() + break + } + case 'year': { + const date = new Date(to) + const year = date.getFullYear() + to = new Date(`${year}-01-01`).getTime() + from = count * period.multiplier * 365 * 24 * 60 * 60 * 1000 + const fromDate = new Date(from) + from = new Date(`${fromDate.getFullYear()}-01-01`).getTime() + break + } + } + return [from, to] +} + +export function tf_to_secs(timeframe?: string): number{ + if(!timeframe)return 0 + const unit = timeframe.substring(timeframe.length - 1); + const amount = parseInt(timeframe.substring(0, timeframe.length - 1)) + let scale = 0 + if(unit == 'y'){ + scale = 31536000 // 60 * 60 * 24 * 365 + } + else if(unit == 'M'){ + scale = 2592000 // 60 * 60 * 24 * 30 + } + else if(unit == 'w'){ + scale = 604800 // 60 * 60 * 24 * 7 + } + else if(unit == 'd'){ + scale = 86400 // 60 * 60 * 24 + } + else if(unit == 'h'){ + scale = 3600 + } + else if(unit == 'm'){ + scale = 60 + } + else if(unit == 's'){ + scale = 1 + } + else{ + throw Error(`unsupport timeframe: ${timeframe}`) + } + return scale * amount +} + + +export function secs_to_tf(secs: number): string{ + if(secs > secs_year){ + return `${Math.floor(secs / secs_year)}y` + } + else if(secs > secs_mon){ + return `${Math.floor(secs / secs_mon)}M` + } + else if(secs > secs_week){ + return `${Math.floor(secs / secs_week)}w` + } + else if(secs > secs_day){ + return `${Math.floor(secs / secs_day)}d` + } + else if(secs > secs_hour){ + return `${Math.floor(secs / secs_hour)}h` + } + else if(secs > secs_min){ + return `${Math.floor(secs / secs_min)}m` + } + return `${Math.floor(secs)}s` +} + + +function buildDateTimeFormat (timezone?: string): Intl.DateTimeFormat | null { + const options: Intl.DateTimeFormatOptions = { + hour12: false, + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + } + if (timezone !== undefined) { + options.timeZone = timezone + } + let dateTimeFormat: Intl.DateTimeFormat | null = null + try { + dateTimeFormat = new Intl.DateTimeFormat('en', options) + } catch (e) { + console.error('', '', 'Timezone is error!!!') + } + return dateTimeFormat +} + +export const dateTimeFormat = buildDateTimeFormat() + + +export function makeFormatDate(timespan: string) { + function doFormatDate(timestamp: number, format: string, type: kc.FormatDateType) { + switch (timespan) { + case 'second': { + if (type === FormatDateType.XAxis) { + return formatDate(dateTimeFormat!, timestamp, 'HH:mm:ss') + } + return formatDate(dateTimeFormat!, timestamp, 'YYYY-MM-DD HH:mm:ss') + } + case 'minute': { + if (type === FormatDateType.XAxis) { + return formatDate(dateTimeFormat!, timestamp, 'HH:mm') + } + return formatDate(dateTimeFormat!, timestamp, 'YYYY-MM-DD HH:mm') + } + case 'hour': { + if (type === FormatDateType.XAxis) { + return formatDate(dateTimeFormat!, timestamp, 'MM-DD HH:mm') + } + return formatDate(dateTimeFormat!, timestamp, 'YYYY-MM-DD HH:mm') + } + case 'day': + case 'week': + return formatDate(dateTimeFormat!, timestamp, 'YYYY-MM-DD') + case 'month': { + if (type === FormatDateType.XAxis) { + return formatDate(dateTimeFormat!, timestamp, 'YYYY-MM') + } + return formatDate(dateTimeFormat!, timestamp, 'YYYY-MM-DD') + } + case 'year': { + if (type === FormatDateType.XAxis) { + return formatDate(dateTimeFormat!, timestamp, 'YYYY') + } + return formatDate(dateTimeFormat!, timestamp, 'YYYY-MM-DD') + } + } + return formatDate(dateTimeFormat!, timestamp, 'YYYY-MM-DD HH:mm') + } + return doFormatDate; +} + + +export async function setTimezone(timezone: string) { + if (timezone) { + if (timezone == 'Africa/Abidjan' || timezone.toLowerCase().indexOf('utc') >= 0) { + timezone = 'UTC' + } + } + dayjs.tz.setDefault(timezone) + cur_tz = timezone + tz_applied = true +} + +/** + * 此函数只返回用户本地时区,并不是返回当前设置的时区。 + * 故使用setTimezone设置默认时区后,调用此方法依然返回的是本地时区 + */ +export function get_tz(){ + return dayjs.tz.guess() +} + +export function translateTimezone (timezone: string): string { + return timezone_map[timezone] ?? timezone +} + +export function getTimezoneSelectOptions () { + return Object.entries(timezone_map).map(([key, text]) => ({ key, text })); +} + +export function StampToYMD(dateMs: number) { + const date = new Date(dateMs); + const year = date.getUTCFullYear().toString(); + const month = (date.getUTCMonth() + 1).toString().padStart(2, '0'); + const day = date.getUTCDate().toString().padStart(2, '0'); + return `${year}${month}${day}`; +} \ No newline at end of file diff --git a/src/lib/drawBar.svelte b/src/lib/drawBar.svelte new file mode 100644 index 0000000..6f3441c --- /dev/null +++ b/src/lib/drawBar.svelte @@ -0,0 +1,271 @@ + + +{#snippet DrawButton(onClick: () => void, icon: string, itemKey: string = '', subItems: {key: string, text: string}[] = [])} +
+ + + + {#if subItems.length > 0} +
clickPopoverKey(itemKey)} + > + + + +
+ {#if itemKey === popoverKey} +
    + {#each subItems as data} +
  • itemKey === 'mode' ? clickSubMode(data.key) : clickSubPopover(subMenu.findIndex(i => i.key === itemKey), data.key)}> + + {m[data.text]()} +
  • + {/each} +
+ {/if} + {/if} +
+{/snippet} + +{#snippet Divider()} +
+{/snippet} + +
e.stopPropagation()}> + {#each subMenu as item} + {@render DrawButton(() => startOverlay(item.icon), item.icon, item.key, item.list)} + {/each} + + {@render Divider()} + + {@render DrawButton(() => startOverlay('ruler'), 'ruler')} + + {@render Divider()} + + {@render DrawButton(clickMode, modeIcon, 'mode', modes)} + + {@render Divider()} + + {@render DrawButton(toggleLock, lock ? 'lock' : 'unlock')} + + {@render Divider()} + + {@render DrawButton(toggleVisiable, visiable ? 'visible' : 'invisible')} + + {@render Divider()} + + {@render DrawButton(clickRemove, 'remove')} +
\ No newline at end of file diff --git a/src/lib/figures/index.ts b/src/lib/figures/index.ts new file mode 100644 index 0000000..9148923 --- /dev/null +++ b/src/lib/figures/index.ts @@ -0,0 +1,6 @@ + +import textBox from "./textBox"; + +export default [ + textBox +] \ No newline at end of file diff --git a/src/lib/figures/textBox.ts b/src/lib/figures/textBox.ts new file mode 100644 index 0000000..1b1c068 --- /dev/null +++ b/src/lib/figures/textBox.ts @@ -0,0 +1,188 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * 此文件从rectText修改而来。 + * rectText不支持多行文本,此组件改动为支持多行文本框 + */ + +import type {Coordinate, TextStyle, FigureTemplate, TextAttrs, RectAttrs, RectStyle} from 'klinecharts' +import { PolygonType, LineType } from 'klinecharts' +import * as kc from 'klinecharts' + +const calcTextWidth = kc.utils.calcTextWidth + +import { getTextRect, getRectStartX } from './utils' + +/* +以下函数复制自KlineCharts,因其不再导出,所以复制过来: +createFont +isString +isTransparent +drawRect + +*/ + + +function createFont (size?: number, weight?: string | number, family?: string): string { + return `${weight ?? 'normal'} ${size ?? 12}px ${family ?? 'Helvetica Neue'}` +} + +function isString (value: unknown): value is string { + return typeof value === 'string' +} + +function isTransparent (color: string): boolean { + return color === 'transparent' || + color === 'none' || + /^[rR][gG][Bb][Aa]\(([\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\s]*,){3}[\s]*0[\s]*\)$/.test(color) || + /^[hH][Ss][Ll][Aa]\(([\s]*(360|3[0-5][0-9]|[012]?[0-9][0-9]?)[\s]*,)([\s]*((100|[0-9][0-9]?)%|0)[\s]*,){2}([\s]*0[\s]*)\)$/.test(color) +} + +/* +复制自KlineCharts的rect.ts,因其不再导出,所以复制过来 +*/ +function drawRect (ctx: CanvasRenderingContext2D, attrs: RectAttrs | RectAttrs[], styles: Partial): void { + let rects: RectAttrs[] = [] + rects = rects.concat(attrs) + const { + style = PolygonType.Fill, + color = 'transparent', + borderSize = 1, + borderColor = 'transparent', + borderStyle = LineType.Solid, + borderRadius: r = 0, + borderDashedValue = [2, 2] + } = styles + // eslint-disable-next-line @typescript-eslint/unbound-method, @typescript-eslint/no-unnecessary-condition -- ignore + const draw = ctx.roundRect ?? ctx.rect + const solid = (style === PolygonType.Fill || styles.style === PolygonType.StrokeFill) && (!isString(color) || !isTransparent(color)) + if (solid) { + ctx.fillStyle = color + rects.forEach(({ x, y, width: w, height: h }) => { + ctx.beginPath() + draw.call(ctx, x, y, w, h, r) + ctx.closePath() + ctx.fill() + }) + } + if ((style === PolygonType.Stroke || styles.style === PolygonType.StrokeFill) && borderSize > 0 && !isTransparent(borderColor)) { + ctx.strokeStyle = borderColor + ctx.fillStyle = borderColor + ctx.lineWidth = borderSize + if (borderStyle === LineType.Dashed) { + ctx.setLineDash(borderDashedValue) + } else { + ctx.setLineDash([]) + } + const correction = borderSize % 2 === 1 ? 0.5 : 0 + const doubleCorrection = Math.round(correction * 2) + rects.forEach(({ x, y, width: w, height: h }) => { + if (w > borderSize * 2 && h > borderSize * 2) { + ctx.beginPath() + draw.call(ctx, x + correction, y + correction, w - doubleCorrection, h - doubleCorrection, r) + ctx.closePath() + ctx.stroke() + } else { + if (!solid) { + ctx.fillRect(x, y, w, h) + } + } + }) + } +} + +/* +复制自KlineCharts的text.ts,因其不再导出,所以复制过来 +*/ +function drawText (ctx: CanvasRenderingContext2D, attrs: TextAttrs | TextAttrs[], styles: Partial): void { + let texts: TextAttrs[] = [] + texts = texts.concat(attrs) + const { + color = 'currentColor', + size = 12, + family, + weight, + paddingLeft = 0, + paddingTop = 0, + paddingRight = 0 + } = styles + const rects = texts.map(text => getTextRect(text, styles)) + drawRect(ctx, rects, { ...styles, color: styles.backgroundColor }) + + ctx.textAlign = 'left' + ctx.textBaseline = 'top' + ctx.font = createFont(size, weight, family) + ctx.fillStyle = color + + texts.forEach((text, index) => { + const rect = rects[index] + ctx.fillText(text.text, rect.x + paddingLeft, rect.y + paddingTop, rect.width - paddingLeft - paddingRight) + }) +} + +export function drawRectText (ctx: CanvasRenderingContext2D, attrs: TextAttrs, styles: Partial): void { + const { text } = attrs + const { + size = 12, + family, + weight, + paddingLeft = 0, + paddingTop = 0 + } = styles + const lines = text.split('\n') + + const lineWidths = lines.map(lineText => calcTextWidth(lineText, size, weight, family)) + const heightRatio = 1.5 + const lineHeight = size * heightRatio + const maxWidth = Math.max(...lineWidths) + const rect = getTextRect(attrs, styles, maxWidth, lines.length, heightRatio) + drawRect(ctx, rect, { ...styles, color: styles.backgroundColor }) + let curY = rect.y + paddingTop + lines.forEach((lineText, index) => { + const startX = getRectStartX(attrs, styles, lineWidths[index]) + paddingLeft + drawText(ctx, { ...attrs, align: 'left', baseline: 'top', x: startX, y: curY, text: lineText }, styles) + curY += lineHeight + }) +} + +function checkCoordinateOnText(coordinate: Coordinate, attrs: TextAttrs, styles: Partial): boolean{ + const { + size = 12, + family, + weight, + paddingLeft = 0, + paddingTop = 0 + } = styles + const lines = attrs.text.split('\n') + const lineWidths = lines.map(lineText => calcTextWidth(lineText, size, weight, family)) + const heightRatio = 1.5 + const maxWidth = Math.max(...lineWidths) + const { x, y, width, height } = getTextRect(attrs, styles, maxWidth, lines.length, heightRatio) + return ( + coordinate.x >= x && + coordinate.x <= x + width && + coordinate.y >= y && + coordinate.y <= y + height + ) +} + +const textBox: FigureTemplate> = { + name: 'textBox', + checkEventOn: (coordinate: Coordinate, attrs: TextAttrs, styles: Partial) => { + return checkCoordinateOnText(coordinate, attrs, styles) + }, + draw: (ctx: CanvasRenderingContext2D, attrs: TextAttrs, styles: Partial) => { + drawRectText(ctx, attrs, styles) + } +} + +export default textBox diff --git a/src/lib/figures/utils.ts b/src/lib/figures/utils.ts new file mode 100644 index 0000000..eb8907e --- /dev/null +++ b/src/lib/figures/utils.ts @@ -0,0 +1,56 @@ +import type {RectAttrs, RectTextStyle, TextAttrs} from 'klinecharts'; + +export function getRectStartX(attrs: TextAttrs, styles: Partial, textWidth?: number){ + const { size = 12, paddingLeft = 0, paddingTop = 0, paddingRight = 0, paddingBottom = 0 } = styles + const { x, y, text, align = 'left', baseline = 'top' } = attrs + textWidth = textWidth ?? size * text.length + let startX: number + switch (align) { + case 'left': + case 'start': { + startX = x + break + } + case 'right': + case 'end': { + startX = x - paddingRight - textWidth - paddingLeft + break + } + default: { + startX = x - textWidth / 2 - paddingLeft + break + } + } + return startX +} + +export function getTextRect (attrs: TextAttrs, styles: Partial, textWidth?: number, + lineNum?: number, lineHeight?: number): RectAttrs { + const { size = 12, paddingLeft = 0, paddingTop = 0, paddingRight = 0, paddingBottom = 0 } = styles + const { x, y, text, align = 'left', baseline = 'top' } = attrs + const length = text.length + textWidth = textWidth ?? size * length + lineNum = lineNum ?? 1 + lineHeight = lineHeight ?? 1.5 + const textHeight = size * lineNum * lineHeight - (lineHeight - 1) * size + const startX = getRectStartX(attrs, styles, textWidth) + let startY: number + switch (baseline) { + case 'top': + case 'hanging': { + startY = y + break + } + case 'bottom': + case 'ideographic': + case 'alphabetic': { + startY = y - textHeight - paddingTop - paddingBottom + break + } + default: { + startY = y - textHeight / 2 - paddingTop + break + } + } + return { x: startX, y: startY, width: paddingLeft + textWidth + paddingRight, height: paddingTop + textHeight + paddingBottom } +} \ No newline at end of file diff --git a/src/lib/i18n.js b/src/lib/i18n.js new file mode 100644 index 0000000..8252ca8 --- /dev/null +++ b/src/lib/i18n.js @@ -0,0 +1,5 @@ +// src/lib/i18n.js +import { createI18n } from "@inlang/paraglide-sveltekit" +import * as runtime from "$lib/paraglide/runtime.js" + +export const i18n = createI18n(runtime); diff --git a/src/lib/icon.svelte b/src/lib/icon.svelte new file mode 100644 index 0000000..c9bbe9d --- /dev/null +++ b/src/lib/icon.svelte @@ -0,0 +1,166 @@ + + + + + {#if name == 'horizontalStraightLine'} + + {:else if name == 'ruler'} + + {:else if name == 'abcd'} + + {:else if name == 'anyWaves'} + + {:else if name == 'arrow'} + + {:else if name == 'circle'} + + + + {:else if name == 'eightWaves'} + + {:else if name == 'fibonacciCircle'} + + + + + + {:else if name == 'fibonacciExtension'} + + {:else if name == 'fibonacciLine'} + + {:else if name == 'fibonacciSegment'} + + {:else if name == 'fibonacciSpeedResistanceFan'} + + {:else if name == 'fibonacciSpiral'} + + {:else if name == 'fiveWaves'} + + {:else if name == 'gannBox'} + + {:else if name == 'horizontalRayLine'} + + {:else if name == 'horizontalSegment'} + + {:else if name == 'invisible'} + + {:else if name == 'visible'} + + {:else if name == 'lock'} + + + + + + + + + {:else if name == 'parallelogram'} + + {:else if name == 'parallelStraightLine'} + + {:else if name == 'priceChannelLine'} + + {:else if name == 'priceLine'} + + {:else if name == 'rayLine'} + + {:else if name == 'rect'} + + {:else if name == 'remove'} + + {:else if name == 'segment'} + + {:else if name == 'straightLine'} + + {:else if name == 'strongMagnet'} + + + + + + + + + {:else if name == 'threeWaves'} + + {:else if name == 'triangle'} + + {:else if name == 'unlock'} + + + + + + + + + {:else if name == 'verticalRayLine'} + + {:else if name == 'verticalSegment'} + + {:else if name == 'verticalStraightLine'} + + {:else if name == 'visiable'} + + {:else if name == 'weakMagnet'} + + {:else if name == 'xabcd'} + + {:else if name == 'lang'} + + {:else if name == 'theme'} + + + + + + + + + {:else if name == 'user'} + + {:else if name == 'indicator'} + + {:else if name == 'timezone'} + + + + + + {:else if name == 'setting'} + + {:else if name == 'screenShot'} + + {:else if name == 'exitFullScreen'} + + {:else if name == 'fullScreen'} + + {:else if name == 'cloud'} + + {:else} +
{{name}}
+ {/if} + + + diff --git a/src/lib/index.ts b/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/src/lib/indicators/cloudInds.ts b/src/lib/indicators/cloudInds.ts new file mode 100644 index 0000000..21540ec --- /dev/null +++ b/src/lib/indicators/cloudInds.ts @@ -0,0 +1,49 @@ +import type {IndicatorTemplate} from 'klinecharts'; +import {postApi} from "$lib/netio"; +import {drawCloudInd} from "./common"; + + +/** + * 按传入的参数生成云端指标。 + * 支持自定义图形: + * tag: 买卖点显示,做多时值为正数的价格,做空时值为负数的价格。 + * @param params + */ +export const makeCloudInds = (params: Record[]): IndicatorTemplate[] => { + return params.map((args): IndicatorTemplate => { + const figures = args['figures'] ?? [] + if (args['figure_tpl'] && args['calcParams']) { + for (let period of args['calcParams']) { + const key = args['figure_tpl'].replace(/\{period\}/g, period) + var plot_type = args['figure_type'] + if (!plot_type){ + plot_type = 'line' + } + figures.push({key, title: `${key.toUpperCase()}: `, type: plot_type}) + } + } + return { + ...args, + name: args['name'], + figures, + calc: async (dataList, ind) => { + const name = ind.name; + const params = ind.calcParams; + const kwargs = ind.extendData; + const kline = dataList.map(d => [d.timestamp, d.open, d.high, d.low, d.close, d.volume]); + if (kline.length == 0){return []} + const rsp = await postApi('/kline/calc_ind', {name, params, kline, kwargs}) + if (rsp.code != 200 || !rsp.data) { + console.error('calc ind fail:', rsp) + return dataList.map(d => { + return {} + }) + } + return rsp.data ?? [] + }, + draw: drawCloudInd + } + }) +} + +export default makeCloudInds diff --git a/src/lib/indicators/common.ts b/src/lib/indicators/common.ts new file mode 100644 index 0000000..5ede3aa --- /dev/null +++ b/src/lib/indicators/common.ts @@ -0,0 +1,235 @@ +import * as kc from 'klinecharts'; +import type {IndicatorDrawParams, KLineData, OverlayStyle} from 'klinecharts'; +import {getTagFigures} from "./ktools"; +const LineType = kc.LineType; +const PolygonType = kc.PolygonType; + +const my_figure_types = ['tag'] // 支持的figure类型 + +export interface MainTag { + price: number, + /** + * 1表示上面绘制 -1表示下面绘制 + */ + direction: number, + /** + * 绘制的颜色 + */ + color: string, + /** + * 显示的文本 + */ + text: string, +} + + +export interface TagData { + dataIndex: number + x: number + data: KLineData, + tags: MainTag[] +} + + +export function drawTagFigure(viewKlines: TagData[], ctx: CanvasRenderingContext2D, yAxis: kc.YAxis) { + const layStyles = getDefaultOverlayStyle() + viewKlines.forEach(it => { + it.tags.forEach(tag => { + const valueY = yAxis.convertToPixel(tag.price) + const position = tag.direction <= 0 ? 'bottom' : 'top'; + const color = tag.color; + const text = tag.text; + getTagFigures({x: it.x, y: valueY}, position, text, color).forEach(fg => { + const {type, styles, attrs} = fg + const Figure = kc.getFigureClass(type) + if (Figure == null) return + const ss = {...(layStyles[type] as any), ...(styles as any)} + new Figure({name: type, attrs, styles: ss}).draw(ctx) + }) + }) + }) +} + +/** + * 绘制云端指标 + * @param drawArgs + */ +export function drawCloudInd (drawArgs: IndicatorDrawParams) { + const ind_name = drawArgs.indicator.name + if (ind_name == 'ChanLun') { + return drawChanlun(drawArgs) + } else { + return drawFigures(drawArgs) + } +} + +/** + * 绘制缠论的线条 + */ +export function drawChanlun({ctx, indicator, chart, xAxis, yAxis}: IndicatorDrawParams): boolean { + // 指标计算结果 + const result = indicator.result; + if (!result || !result.length) return true + // 获取默认样式 + const layStyles = getDefaultOverlayStyle() + const visibleRange = chart.getVisibleRange(); + // 循环遍历每个线段 + result.forEach((val) => { + const [start_id, start_price, stop_id, stop_price] = val as any + if (start_id > visibleRange.to || stop_id < visibleRange.from) return + const startX = xAxis.convertToPixel(start_id) + const stopX = xAxis.convertToPixel(stop_id) + const startY = yAxis.convertToPixel(start_price) + const stopY = yAxis.convertToPixel(stop_price) + const Figure = kc.getFigureClass('line') + if (Figure == null) return + new Figure({ + name: 'line', + attrs: {coordinates: [{x: startX, y: startY}, {x: stopX, y: stopY}]}, + styles: {...layStyles.line} + }).draw(ctx) + }) + return true +} + +/** + * 云端指标的自定义绘制。对复杂的figure则进行绘制,如果有简单的figure则返回false继续执行默认绘制逻辑,否则返回true中断后续默认绘制 + * @param ctx + * @param kLineDataList + * @param indicator + * @param visibleRange + * @param defaultStyles + * @param xAxis + * @param yAxis + */ +export function drawFigures({ctx, chart, indicator, xAxis, yAxis}: IndicatorDrawParams){ + const defaultStyles = (chart as any).getChartStore().getStyles().indicator + const upColor = kc.utils.formatValue(indicator.styles, 'bars[0].upColor', (defaultStyles.bars)[0].upColor) as string + const downColor = kc.utils.formatValue(indicator.styles, 'bars[0].downColor', (defaultStyles.bars)[0].downColor) as string + const figures = indicator.figures + const my_figures = figures.filter(fg => fg.type && my_figure_types.includes(fg.type)) + // 不包含自定义figure,退出执行默认绘制 + if (!my_figures.length) return false + // 指标计算结果 + const result = indicator.result; + // 显示范围内的K线 + const tags: TagData[] = [] + const kLineDataList = chart.getDataList(); + const visibleRange = chart.getVisibleRange(); + for (let i = visibleRange.from; i < visibleRange.to; i++) { + const ind = result[i]; + if (!ind || !Object.keys(ind).length) continue + const kLineData = kLineDataList[i] + const x = xAxis.convertToPixel(i) + const item: TagData = {dataIndex: i, x, data: kLineData, tags: []} + const key_map: Record = {} + Object.keys(ind).forEach(k => { + const arr = k.split(':') + key_map[arr[0]] = k + }) + my_figures.forEach(fig => { + if (fig.type == 'tag') { + const baseVal = fig.baseValue ?? 0 + const color = baseVal >= 0 ? upColor : downColor + const ind_key = key_map[fig.key] + const price = (ind as any)[ind_key] + const text = ind_key; + item.tags.push({price, direction: -baseVal, color, text}) + } + }) + if (!item.tags.length) continue + tags.push(item) + } + drawTagFigure(tags, ctx, yAxis) + return my_figures.length === figures.length +} + +/** + * 复制自KlineCharts的同名函数 + */ +function getDefaultOverlayStyle (): OverlayStyle { + return { + point: { + color: '#1677FF', + borderColor: 'rgba(22, 119, 255, 0.35)', + borderSize: 1, + radius: 5, + activeColor: '#1677FF', + activeBorderColor: 'rgba(22, 119, 255, 0.35)', + activeBorderSize: 3, + activeRadius: 5 + }, + line: { + style: LineType.Solid, + smooth: false, + color: '#1677FF', + size: 1, + dashedValue: [2, 2] + }, + rect: { + style: PolygonType.Fill, + color: 'rgba(22, 119, 255, 0.25)', + borderColor: '#1677FF', + borderSize: 1, + borderRadius: 0, + borderStyle: LineType.Solid, + borderDashedValue: [2, 2] + }, + polygon: { + style: PolygonType.Fill, + color: '#1677FF', + borderColor: '#1677FF', + borderSize: 1, + borderStyle: LineType.Solid, + borderDashedValue: [2, 2] + }, + circle: { + style: PolygonType.Fill, + color: 'rgba(22, 119, 255, 0.25)', + borderColor: '#1677FF', + borderSize: 1, + borderStyle: LineType.Solid, + borderDashedValue: [2, 2] + }, + arc: { + style: LineType.Solid, + color: '#1677FF', + size: 1, + dashedValue: [2, 2] + }, + text: { + style: PolygonType.Fill, + color: '#FFFFFF', + size: 12, + family: 'Helvetica Neue', + weight: 'normal', + borderStyle: LineType.Solid, + borderDashedValue: [2, 2], + borderSize: 0, + borderRadius: 2, + borderColor: '#1677FF', + paddingLeft: 0, + paddingRight: 0, + paddingTop: 0, + paddingBottom: 0, + backgroundColor: 'transparent' + }, + rectText: { + style: PolygonType.Fill, + color: '#FFFFFF', + size: 12, + family: 'Helvetica Neue', + weight: 'normal', + borderStyle: LineType.Solid, + borderDashedValue: [2, 2], + borderSize: 1, + borderRadius: 2, + borderColor: '#1677FF', + paddingLeft: 4, + paddingRight: 4, + paddingTop: 4, + paddingBottom: 4, + backgroundColor: '#1677FF' + } + } +} diff --git a/src/lib/indicators/index.ts b/src/lib/indicators/index.ts new file mode 100644 index 0000000..cf1ddba --- /dev/null +++ b/src/lib/indicators/index.ts @@ -0,0 +1,4 @@ + +export default [ + +] \ No newline at end of file diff --git a/src/lib/indicators/ktools.ts b/src/lib/indicators/ktools.ts new file mode 100644 index 0000000..2ed45fa --- /dev/null +++ b/src/lib/indicators/ktools.ts @@ -0,0 +1,38 @@ +import * as kc from 'klinecharts'; +import type {OverlayFigure} from 'klinecharts'; + +export function getTagFigures(coord: kc.Coordinate, position: 'bottom' | 'top', text: string, color: string): OverlayFigure[]{ + const plusFlag = position === 'bottom' ? 1 : -1; + const startX = coord.x + const horzEndX = startX + 200 + const startY = coord.y + 3 * plusFlag + const lineEndY = startY + 50 * plusFlag + const arrowEndY = lineEndY + 5 * plusFlag + const styles = color ? {color: color}: {} + const textStyles = color ? {backgroundColor: color, borderColor: color} : {} + return [ + { + type: 'line', + attrs: { coordinates: [{ x: startX, y: startY }, { x: startX, y: lineEndY }] }, + ignoreEvent: true + }, + { + type: 'line', + attrs: { coordinates: [{ x: startX, y: coord.y }, { x: horzEndX, y: coord.y }] }, + ignoreEvent: true, + styles: {...styles} + }, + { + type: 'polygon', + attrs: { coordinates: [{ x: startX, y: lineEndY }, { x: startX - 4, y: arrowEndY }, { x: startX + 4, y: arrowEndY }] }, + ignoreEvent: true, + styles + }, + { + type: 'rectText', + attrs: { x: startX, y: arrowEndY, text: text ?? '', align: 'center', baseline: 'bottom' }, + ignoreEvent: true, + styles: textStyles + } + ] +} \ No newline at end of file diff --git a/src/lib/menuBar.svelte b/src/lib/menuBar.svelte new file mode 100644 index 0000000..65c344a --- /dev/null +++ b/src/lib/menuBar.svelte @@ -0,0 +1,232 @@ + + +{#snippet MenuButton(onClick: () => void, icon: string = "", text: string = "", size: number = 16)} +
+ {#if icon} + + {/if} + {#if text} + {text} + {/if} +
+{/snippet} + + + + + + + + + +
+
+ + + +
+ + {#if customLoad} + + + + + {/if} + +
showSymbolModal = true}> + {showName} +
+ + showPeriodModal = true}> + {$save.period.timeframe} + + + {#if customLoad} +
+ +
+ + + + + + + {/if} + {@render MenuButton(() => showIndSearchModal = true, "indicator", m.indicator())} + {@render MenuButton(() => showTimezoneModal = true, "timezone", m.timezone())} + {@render MenuButton(() => showSettingModal = true, "setting", m.setting())} + {@render MenuButton(clickScreenShot, "screenShot", "", 20)} + {@render MenuButton(toggleFullscreen, fullScreen ? "exitFullScreen" : "fullScreen", "", 18)} + {@render MenuButton(toggleTheme, "theme", "", 22)} +
+ + \ No newline at end of file diff --git a/src/lib/modal.svelte b/src/lib/modal.svelte new file mode 100644 index 0000000..91e45c5 --- /dev/null +++ b/src/lib/modal.svelte @@ -0,0 +1,78 @@ + + +{#if show} + +{/if} diff --git a/src/lib/modalIndCfg.svelte b/src/lib/modalIndCfg.svelte new file mode 100644 index 0000000..2e66e25 --- /dev/null +++ b/src/lib/modalIndCfg.svelte @@ -0,0 +1,77 @@ + + + + {#if !fields.length} +
+
{m.no_ind_params()}
+
+ {:else} +
+ {#each fields as field, i} + {field.title} + + {/each} +
+ {/if} +
diff --git a/src/lib/modalIndSearch.svelte b/src/lib/modalIndSearch.svelte new file mode 100644 index 0000000..6eb4463 --- /dev/null +++ b/src/lib/modalIndSearch.svelte @@ -0,0 +1,155 @@ + + + +
+ + +
+
+ {#each showInds as ind} +
+ +
+ {/each} +
+
+
+
\ No newline at end of file diff --git a/src/lib/modalPeriod.svelte b/src/lib/modalPeriod.svelte new file mode 100644 index 0000000..c9330df --- /dev/null +++ b/src/lib/modalPeriod.svelte @@ -0,0 +1,54 @@ + + + +
+
    + {#each periods as period} +
  • handlePeriodClick(period)} + > + {period.multiplier} {m[period.timespan]()} +
  • + {/each} +
+
+
+ + diff --git a/src/lib/modalScreenShot.svelte b/src/lib/modalScreenShot.svelte new file mode 100644 index 0000000..eea5db8 --- /dev/null +++ b/src/lib/modalScreenShot.svelte @@ -0,0 +1,25 @@ + + + + screenshot + \ No newline at end of file diff --git a/src/lib/modalSetting.svelte b/src/lib/modalSetting.svelte new file mode 100644 index 0000000..e703e55 --- /dev/null +++ b/src/lib/modalSetting.svelte @@ -0,0 +1,179 @@ + + + +
+ {#each options as item} + {m[item.text]?.()} + {#if item.component === 'select'} + + {:else if item.component === 'switch'} + update(item.key, e.currentTarget.checked)}/> + {/if} + {/each} +
+
diff --git a/src/lib/modalSymbol.svelte b/src/lib/modalSymbol.svelte new file mode 100644 index 0000000..84a4bc6 --- /dev/null +++ b/src/lib/modalSymbol.svelte @@ -0,0 +1,84 @@ + + + + + +
    + {#if $ctx.loadingPairs} +
    + +
    + {:else} + {#each showList as symbol, i} +
  • {$save.symbol = symbol}} + > +
    + {#if symbol.logo} + {symbol.ticker} + {/if} + + {symbol.shortName ?? symbol.ticker} + +
    + {symbol.exchange} +
  • + {:else} +
  • + {m.no_data()} +
  • + {/each} + {/if} +
+
\ No newline at end of file diff --git a/src/lib/modalTimezone.svelte b/src/lib/modalTimezone.svelte new file mode 100644 index 0000000..ce44d4f --- /dev/null +++ b/src/lib/modalTimezone.svelte @@ -0,0 +1,39 @@ + + + +
+ +
+
\ No newline at end of file diff --git a/src/lib/mydatafeed.ts b/src/lib/mydatafeed.ts new file mode 100644 index 0000000..3b3032a --- /dev/null +++ b/src/lib/mydatafeed.ts @@ -0,0 +1,131 @@ +import type {Datafeed, SymbolInfo, BarArr, DatafeedWatchCallback, KData, GetKlineArgs} from './types'; +import {getApi} from "./netio"; + +export default class MyDatafeed implements Datafeed { + + private _prevSymbol?: SymbolInfo + private _ws?: WebSocket + private listens: Record = {} + + async getHistoryKLineData({symbol, period, from, to, strategy}: GetKlineArgs): Promise { + // const query = { + // symbol: symbol.ticker, + // timeframe: period.timeframe, + // exchange: symbol.exchange, + // from, to, strategy + // } + // console.log('getHistoryKLineData', query) + // const rsp = await getApi('/kline/hist', query) + // const kline_data = (rsp.data || []).map((data: any) => ({ + // timestamp: data[0], + // open: data[1], + // high: data[2], + // low: data[3], + // close: data[4], + // volume: data[5] + // })) + // return await {data: kline_data, lays: rsp.overlays ?? []} + + // 使用假URL加载数据 + const fakeUrl = 'https://klinecharts.com/datas/kline.json'; + const response = await fetch(fakeUrl); + const data = await response.json(); + return { + data: data, // 假设返回的数据已经是正确的格式 [{timestamp,open,high,low,close,volume}, ...] + lays: [] + } + } + + async getSymbols(): Promise { + // const rsp = await getApi(`/kline/symbols`) + // return await (rsp.data || []).map((data: any) => ({ + // ticker: data.symbol, + // name: data.symbol, + // shortName: data.short_name, + // market: data.market ?? 'spot', + // exchange: data.exchange, + // priceCurrency: 'USDT', + // type: data.type, + // logo: '' + // })) + // 返回固定的假数据 + return [ + { + ticker: 'BTC/USDT:USDT', + name: 'BTC/USDT:USDT', + shortName: 'BTC/USDT.P', + market: 'linear', + exchange: 'binance', + priceCurrency: 'USDT', + type: 'crypto', + logo: '' + }, + { + ticker: 'ETH/USDT:USDT', + name: 'ETH/USDT:USDT', + shortName: 'ETH/USDT.P', + market: 'linear', + exchange: 'binance', + priceCurrency: 'USDT', + type: 'crypto', + logo: '' + } + ] + } + + watch(key: string, callback: DatafeedWatchCallback) { + if (!this._ws) return + this._ws?.send(JSON.stringify({ + action: 'watch', key: key + })) + this.listens[key] = callback + } + + subscribe(symbol: SymbolInfo, callback: DatafeedWatchCallback): void { + if (this._prevSymbol && this._prevSymbol.ticker === symbol.ticker) return + const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:' + let ws_url = `${protocol}://${location.host}/api` + this._prevSymbol = symbol + this._ws?.close() + this._ws = new WebSocket(`${ws_url}/ws/ohlcv`) + this._ws.onopen = () => { + this._ws?.send(JSON.stringify({ + action: 'subscribe', + exchange: symbol.exchange, + symbol: symbol.ticker + })) + } + let last_bar: BarArr | null = null; + this._ws.onmessage = event => { + const result = JSON.parse(event.data) + const action = result.a as string + if (action == 'subscribe' && result.bars && result.bars.length) { + const first = result.bars[0] as BarArr + if (last_bar && first[0] == last_bar[0]) { + // 如果和上一个推送的bar时间戳相同,则认为是其更新,减去上一个的volume,避免调用方错误累加 + first[5] -= last_bar[5] + } + last_bar = result.bars[result.bars.length - 1] + callback(result) + } else { + const cb = this.listens[action]; + if (cb) { + cb(result) + } else { + console.error('unknown msg:', event) + } + } + } + } + + unsubscribe(): void { + if(!this._ws || !this._prevSymbol)return + let symbol = this._prevSymbol! + this._ws?.send(JSON.stringify({ + action: 'unsubscribe', + exchange: symbol.exchange, + symbol: symbol.ticker + })) + } + +} \ No newline at end of file diff --git a/src/lib/netio.ts b/src/lib/netio.ts new file mode 100644 index 0000000..536b2d7 --- /dev/null +++ b/src/lib/netio.ts @@ -0,0 +1,51 @@ +import { get } from 'svelte/store'; +import {$fetch, type SearchParameters, FetchError} from "ofetch"; +import _ from "lodash"; +import {auth, signOut} from "./auth"; + +export type ApiResult = Record & { + code: number, + msg?: string +} + +type ApiType = "GET" | "POST" | "PUT" | "HEAD" | "DELETE" | "OPTIONS" + +const requestApi = async function(method: ApiType, url: string, + query?: SearchParameters, + body?: RequestInit["body"] | Record): Promise { + const {token} = get(auth) + try { + const headers: Record = {'X-Authorization': token} + // @ts-ignore + // 仅客户端请求,服务器渲染期间返回假数据。适用于用户交互导致的网络请求 + let prefix = '/api' + if(import.meta.env.DEV){ + prefix = 'http://localhost:8000/api' + } + const rsp = await $fetch(prefix + url, {method, body, query, headers}); + if(!_.isObject(rsp)){ + return {code: 200, data: rsp} + } + const data = rsp as Record + return {code: 200, msg: '', ...data} + }catch (e){ + const err = (e as FetchError) + const msg = err.data && err.data.detail ? `${err.status}: ${err.data.detail}` : err.toString() + const result = {code: err.status ?? 400, msg} + if(result.code == 401){ + console.error('auth token invalid, reset..', token) + signOut() + } + return result + } +} + + +export async function getApi(url: string, query?: SearchParameters): Promise { + return requestApi('GET', url, query, null) +} + +export async function postApi(url: string, body: RequestInit["body"] | Record, + query?: SearchParameters): Promise { + return requestApi('POST', url, query, body) +} diff --git a/src/lib/overlays/abcd.ts b/src/lib/overlays/abcd.ts new file mode 100644 index 0000000..1fbf3d7 --- /dev/null +++ b/src/lib/overlays/abcd.ts @@ -0,0 +1,58 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate, Coordinate } from 'klinecharts' + +const abcd: OverlayTemplate = { + name: 'abcd', + totalStep: 5, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({ coordinates }) => { + let acLineCoordinates: Coordinate[] = [] + let bdLineCoordinates: Coordinate[] = [] + + const tags = ['A', 'B', 'C', 'D'] + const texts = coordinates.map((coordinate, i) => ({ + ...coordinate, + baseline: 'bottom', + text: `(${tags[i]})` + })) + if (coordinates.length > 2) { + acLineCoordinates = [coordinates[0], coordinates[2]] + if (coordinates.length > 3) { + bdLineCoordinates = [coordinates[1], coordinates[3]] + } + } + return [ + { + type: 'line', + attrs: { coordinates } + }, + { + type: 'line', + attrs: [{ coordinates: acLineCoordinates }, { coordinates: bdLineCoordinates }], + styles: { style: 'dashed' } + }, + { + type: 'text', + ignoreEvent: true, + attrs: texts + } + ] + } +} + +export default abcd diff --git a/src/lib/overlays/anyWaves.ts b/src/lib/overlays/anyWaves.ts new file mode 100644 index 0000000..4ad6c39 --- /dev/null +++ b/src/lib/overlays/anyWaves.ts @@ -0,0 +1,43 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate } from 'klinecharts' + +const anyWaves: OverlayTemplate = { + name: 'anyWaves', + totalStep: Number.MAX_SAFE_INTEGER, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({ coordinates }) => { + const texts = coordinates.map((coordinate, i) => ({ + ...coordinate, + text: `(${i})`, + baseline: 'bottom' + })) + return [ + { + type: 'line', + attrs: { coordinates } + }, + { + type: 'text', + ignoreEvent: true, + attrs: texts + } + ] + } +} + +export default anyWaves diff --git a/src/lib/overlays/arrow.ts b/src/lib/overlays/arrow.ts new file mode 100644 index 0000000..23b2af2 --- /dev/null +++ b/src/lib/overlays/arrow.ts @@ -0,0 +1,33 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate } from 'klinecharts' + +import {getArrowLine} from './utils' + +const arrow: OverlayTemplate = { + name: 'arrow', + totalStep: 3, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({ coordinates }) => { + if (coordinates.length > 1) { + return getArrowLine(coordinates[0], coordinates[1]) + } + return [] + } +} + +export default arrow diff --git a/src/lib/overlays/barSignal.ts b/src/lib/overlays/barSignal.ts new file mode 100644 index 0000000..4019dd7 --- /dev/null +++ b/src/lib/overlays/barSignal.ts @@ -0,0 +1,31 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type {OverlayFigure, OverlayTemplate} from 'klinecharts' +import {getTagFigures} from '../indicators/ktools' + +const barSignal: OverlayTemplate = { + name: 'barSignal', + totalStep: 2, + createPointFigures: ({ overlay, coordinates }) => { + let {postion, text, bgColor} = overlay.extendData; + let result: OverlayFigure[] = [] + coordinates.forEach(coord => { + result.push(...getTagFigures(coord, postion, text, bgColor)) + }) + return result + } +} + +export default barSignal diff --git a/src/lib/overlays/circle.ts b/src/lib/overlays/circle.ts new file mode 100644 index 0000000..e8faa3f --- /dev/null +++ b/src/lib/overlays/circle.ts @@ -0,0 +1,46 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate } from 'klinecharts' + +import { getDistance } from './utils' + +const circle: OverlayTemplate = { + name: 'circle', + totalStep: 3, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + styles: { + circle: { + color: 'rgba(22, 119, 255, 0.15)' + } + }, + createPointFigures: ({ coordinates }) => { + if (coordinates.length > 1) { + const radius = getDistance(coordinates[0], coordinates[1]) + return { + type: 'circle', + attrs: { + ...coordinates[0], + r: radius + }, + styles: { style: 'stroke_fill' } + } + } + return [] + } +} + +export default circle diff --git a/src/lib/overlays/eightWaves.ts b/src/lib/overlays/eightWaves.ts new file mode 100644 index 0000000..40ece2b --- /dev/null +++ b/src/lib/overlays/eightWaves.ts @@ -0,0 +1,43 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate } from 'klinecharts' + +const eightWaves: OverlayTemplate = { + name: 'eightWaves', + totalStep: 10, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({ coordinates }) => { + const texts = coordinates.map((coordinate, i) => ({ + ...coordinate, + text: `(${i})`, + baseline: 'bottom' + })) + return [ + { + type: 'line', + attrs: { coordinates } + }, + { + type: 'text', + ignoreEvent: true, + attrs: texts + } + ] + } +} + +export default eightWaves diff --git a/src/lib/overlays/fibonacciCircle.ts b/src/lib/overlays/fibonacciCircle.ts new file mode 100644 index 0000000..ad3ae6b --- /dev/null +++ b/src/lib/overlays/fibonacciCircle.ts @@ -0,0 +1,59 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate, CircleAttrs, TextAttrs } from 'klinecharts' + +const fibonacciCircle: OverlayTemplate = { + name: 'fibonacciCircle', + totalStep: 3, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({ coordinates }) => { + if (coordinates.length > 1) { + const xDis = Math.abs(coordinates[0].x - coordinates[1].x) + const yDis = Math.abs(coordinates[0].y - coordinates[1].y) + const radius = Math.sqrt(xDis * xDis + yDis * yDis) + const percents = [0.236, 0.382, 0.5, 0.618, 0.786, 1] + const circles: CircleAttrs[] = [] + const texts: TextAttrs[] = [] + percents.forEach(percent => { + const r = radius * percent + circles.push( + { ...coordinates[0], r } + ) + texts.push({ + x: coordinates[0].x, + y: coordinates[0].y + r + 6, + text: `${(percent * 100).toFixed(1)}%` + }) + }) + return [ + { + type: 'circle', + attrs: circles, + styles: { style: 'stroke' } + }, + { + type: 'text', + ignoreEvent: true, + attrs: texts + } + ] + } + return [] + } +} + +export default fibonacciCircle diff --git a/src/lib/overlays/fibonacciExtension.ts b/src/lib/overlays/fibonacciExtension.ts new file mode 100644 index 0000000..d58d8fb --- /dev/null +++ b/src/lib/overlays/fibonacciExtension.ts @@ -0,0 +1,67 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate, LineAttrs, TextAttrs } from 'klinecharts' +import { getPrecision } from './utils' + +const fibonacciExtension: OverlayTemplate = { + name: 'fibonacciExtension', + totalStep: 4, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({ chart, coordinates, overlay, yAxis }) => { + const precision = getPrecision(chart, overlay, yAxis) + const fbLines: LineAttrs[] = [] + const texts: TextAttrs[] = [] + if (coordinates.length > 2) { + const points = overlay.points + // @ts-expect-error + const valueDif = points[1].value - points[0].value + const yDif = coordinates[1].y - coordinates[0].y + const percents = [0, 0.236, 0.382, 0.5, 0.618, 0.786, 1] + const textX = coordinates[2].x > coordinates[1].x ? coordinates[1].x : coordinates[2].x + percents.forEach(percent => { + const y = coordinates[2].y + yDif * percent + // @ts-expect-error + const price = (points[2].value + valueDif * percent).toFixed(precision) + fbLines.push({ coordinates: [{ x: coordinates[1].x, y }, { x: coordinates[2].x, y }] }) + texts.push({ + x: textX, + y, + text: `${price} (${(percent * 100).toFixed(1)}%)`, + baseline: 'bottom' + }) + }) + } + return [ + { + type: 'line', + attrs: { coordinates }, + styles: { style: 'dashed' } + }, + { + type: 'line', + attrs: fbLines + }, + { + type: 'text', + ignoreEvent: true, + attrs: texts + } + ] + } +} + +export default fibonacciExtension diff --git a/src/lib/overlays/fibonacciSegment.ts b/src/lib/overlays/fibonacciSegment.ts new file mode 100644 index 0000000..4587269 --- /dev/null +++ b/src/lib/overlays/fibonacciSegment.ts @@ -0,0 +1,61 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate, LineAttrs, TextAttrs } from 'klinecharts' +import { getPrecision } from './utils' + +const fibonacciSegment: OverlayTemplate = { + name: 'fibonacciSegment', + totalStep: 3, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({ chart, coordinates, overlay, yAxis }) => { + const precision = getPrecision(chart, overlay, yAxis) + const lines: LineAttrs[] = [] + const texts: TextAttrs[] = [] + if (coordinates.length > 1) { + const textX = coordinates[1].x > coordinates[0].x ? coordinates[0].x : coordinates[1].x + const percents = [1, 0.786, 0.618, 0.5, 0.382, 0.236, 0] + const yDif = coordinates[0].y - coordinates[1].y + const points = overlay.points + // @ts-expect-error + const valueDif = points[0].value - points[1].value + percents.forEach(percent => { + const y = coordinates[1].y + yDif * percent + // @ts-expect-error + const price = (points[1].value + valueDif * percent).toFixed(precision) + lines.push({ coordinates: [{ x: coordinates[0].x, y }, { x: coordinates[1].x, y }] }) + texts.push({ + x: textX, + y, + text: `${price} (${(percent * 100).toFixed(1)}%)`, + baseline: 'bottom' + }) + }) + } + return [ + { + type: 'line', + attrs: lines + }, { + type: 'text', + ignoreEvent: true, + attrs: texts + } + ] + } +} + +export default fibonacciSegment diff --git a/src/lib/overlays/fibonacciSpeedResistanceFan.ts b/src/lib/overlays/fibonacciSpeedResistanceFan.ts new file mode 100644 index 0000000..5e65d29 --- /dev/null +++ b/src/lib/overlays/fibonacciSpeedResistanceFan.ts @@ -0,0 +1,72 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate, LineAttrs, TextAttrs } from 'klinecharts' + +import { getRayLine } from './utils' + +const fibonacciSpeedResistanceFan: OverlayTemplate = { + name: 'fibonacciSpeedResistanceFan', + totalStep: 3, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({ coordinates, bounding }) => { + const lines1: LineAttrs[] = [] + let lines2: LineAttrs[] = [] + const texts: TextAttrs[] = [] + if (coordinates.length > 1) { + const xOffset = coordinates[1].x > coordinates[0].x ? -38 : 4 + const yOffset = coordinates[1].y > coordinates[0].y ? -2 : 20 + const xDistance = coordinates[1].x - coordinates[0].x + const yDistance = coordinates[1].y - coordinates[0].y + const percents = [1, 0.75, 0.618, 0.5, 0.382, 0.25, 0] + percents.forEach(percent => { + const x = coordinates[1].x - xDistance * percent + const y = coordinates[1].y - yDistance * percent + lines1.push({ coordinates: [{ x, y: coordinates[0].y }, { x, y: coordinates[1].y }] }) + lines1.push({ coordinates: [{ x: coordinates[0].x, y }, { x: coordinates[1].x, y }] }) + lines2 = lines2.concat(getRayLine([coordinates[0], { x, y: coordinates[1].y }], bounding)) + lines2 = lines2.concat(getRayLine([coordinates[0], { x: coordinates[1].x, y }], bounding)) + texts.unshift({ + x: coordinates[0].x + xOffset, + y: y + 10, + text: `${percent.toFixed(3)}` + }) + texts.unshift({ + x: x - 18, + y: coordinates[0].y + yOffset, + text: `${percent.toFixed(3)}` + }) + }) + } + return [ + { + type: 'line', + attrs: lines1 + }, + { + type: 'line', + attrs: lines2 + }, + { + type: 'text', + ignoreEvent: true, + attrs: texts + } + ] + } +} + +export default fibonacciSpeedResistanceFan diff --git a/src/lib/overlays/fibonacciSpiral.ts b/src/lib/overlays/fibonacciSpiral.ts new file mode 100644 index 0000000..474eb32 --- /dev/null +++ b/src/lib/overlays/fibonacciSpiral.ts @@ -0,0 +1,113 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate, registerFigure } from 'klinecharts' +import * as kc from 'klinecharts' + +import { getDistance, getRotateCoordinate, getRayLine } from './utils' + +const fibonacciSpiral: OverlayTemplate = { + name: 'fibonacciSpiral', + totalStep: 3, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({ coordinates, bounding }) => { + if (coordinates.length > 1) { + const startRadius = getDistance(coordinates[0], coordinates[1]) / Math.sqrt(24) + const flag = coordinates[1].x > coordinates[0].x ? 0 : 1 + const kb = kc.utils.getLinearSlopeIntercept(coordinates[0], coordinates[1]) + let offsetAngle + if (kb) { + offsetAngle = Math.atan(kb[0]) + Math.PI * flag + } else { + if (coordinates[1].y > coordinates[0].y) { + offsetAngle = Math.PI / 2 + } else { + offsetAngle = Math.PI / 2 * 3 + } + } + const rotateCoordinate1 = getRotateCoordinate( + { x: coordinates[0].x - startRadius, y: coordinates[0].y }, + coordinates[0], + offsetAngle + ) + const rotateCoordinate2 = getRotateCoordinate( + { x: coordinates[0].x - startRadius, y: coordinates[0].y - startRadius }, + coordinates[0], + offsetAngle + ) + const arcs = [{ + ...rotateCoordinate1, + r: startRadius, + startAngle: offsetAngle, + endAngle: offsetAngle + Math.PI / 2 + }, { + ...rotateCoordinate2, + r: startRadius * 2, + startAngle: offsetAngle + Math.PI / 2, + endAngle: offsetAngle + Math.PI + }] + let x = coordinates[0].x - startRadius + let y = coordinates[0].y - startRadius + for (let i = 2; i < 9; i++) { + const r = arcs[i - 2].r + arcs[i - 1].r + let startAngle = 0 + switch (i % 4) { + case 0: { + startAngle = offsetAngle + x -= (arcs[i - 2].r) + break + } + case 1: { + startAngle = offsetAngle + Math.PI / 2 + y -= arcs[i - 2].r + break + } + case 2: { + startAngle = offsetAngle + Math.PI + x += (arcs[i - 2].r) + break + } + case 3: { + startAngle = offsetAngle + Math.PI / 2 * 3 + y += arcs[i - 2].r + break + } + } + const endAngle = startAngle + Math.PI / 2 + const rotateCoordinate = getRotateCoordinate({ x, y }, coordinates[0], offsetAngle) + arcs.push({ + ...rotateCoordinate, + r, + startAngle, + endAngle + }) + } + return [ + { + type: 'arc', + attrs: arcs + }, + { + type: 'line', + attrs: getRayLine(coordinates, bounding) + } + ] + } + return [] + } +} + +export default fibonacciSpiral diff --git a/src/lib/overlays/fiveWaves.ts b/src/lib/overlays/fiveWaves.ts new file mode 100644 index 0000000..b87d9b6 --- /dev/null +++ b/src/lib/overlays/fiveWaves.ts @@ -0,0 +1,43 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate } from 'klinecharts' + +const fiveWaves: OverlayTemplate = { + name: 'fiveWaves', + totalStep: 7, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({ coordinates }) => { + const texts = coordinates.map((coordinate, i) => ({ + ...coordinate, + text: `(${i})`, + baseline: 'bottom' + })) + return [ + { + type: 'line', + attrs: { coordinates } + }, + { + type: 'text', + ignoreEvent: true, + attrs: texts + } + ] + } +} + +export default fiveWaves diff --git a/src/lib/overlays/gannBox.ts b/src/lib/overlays/gannBox.ts new file mode 100644 index 0000000..3922a91 --- /dev/null +++ b/src/lib/overlays/gannBox.ts @@ -0,0 +1,86 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate } from 'klinecharts' + +const gannBox: OverlayTemplate = { + name: 'gannBox', + totalStep: 3, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + styles: { + polygon: { + color: 'rgba(22, 119, 255, 0.15)' + } + }, + createPointFigures: ({ coordinates }) => { + if (coordinates.length > 1) { + const quarterYDis = (coordinates[1].y - coordinates[0].y) / 4 + const xDis = coordinates[1].x - coordinates[0].x + const dashedLines = [ + { coordinates: [coordinates[0], { x: coordinates[1].x, y: coordinates[1].y - quarterYDis }] }, + { coordinates: [coordinates[0], { x: coordinates[1].x, y: coordinates[1].y - quarterYDis * 2 }] }, + { coordinates: [{ x: coordinates[0].x, y: coordinates[1].y }, { x: coordinates[1].x, y: coordinates[0].y + quarterYDis }] }, + { coordinates: [{ x: coordinates[0].x, y: coordinates[1].y }, { x: coordinates[1].x, y: coordinates[0].y + quarterYDis * 2 }] }, + + { coordinates: [{ ...coordinates[0] }, { x: coordinates[0].x + xDis * 0.236, y: coordinates[1].y }] }, + { coordinates: [{ ...coordinates[0] }, { x: coordinates[0].x + xDis * 0.5, y: coordinates[1].y }] }, + + { coordinates: [{ x: coordinates[0].x, y: coordinates[1].y }, { x: coordinates[0].x + xDis * 0.236, y: coordinates[0].y }]}, + { coordinates: [{ x: coordinates[0].x, y: coordinates[1].y }, { x: coordinates[0].x + xDis * 0.5, y: coordinates[0].y }] } + ] + const solidLines = [ + { coordinates: [coordinates[0], coordinates[1]] }, + { coordinates: [{ x: coordinates[0].x, y: coordinates[1].y }, { x: coordinates[1].x, y: coordinates[0].y }] } + ] + return [ + { + type: 'line', + attrs: [ + { coordinates: [coordinates[0], { x: coordinates[1].x, y: coordinates[0].y }] }, + { coordinates: [{ x: coordinates[1].x, y: coordinates[0].y }, coordinates[1]] }, + { coordinates: [coordinates[1], { x: coordinates[0].x, y: coordinates[1].y }] }, + { coordinates: [{ x: coordinates[0].x, y: coordinates[1].y }, coordinates[0]] } + ] + }, + { + type: 'polygon', + ignoreEvent: true, + attrs: { + coordinates: [ + coordinates[0], + { x: coordinates[1].x, y: coordinates[0].y }, + coordinates[1], + { x: coordinates[0].x, y: coordinates[1].y } + ] + }, + styles: { style: 'fill' } + }, + { + type: 'line', + attrs: dashedLines, + styles: { style: 'dashed' } + }, + { + type: 'line', + attrs: solidLines + } + ] + } + return [] + } +} + +export default gannBox diff --git a/src/lib/overlays/index.ts b/src/lib/overlays/index.ts new file mode 100644 index 0000000..47b06e4 --- /dev/null +++ b/src/lib/overlays/index.ts @@ -0,0 +1,33 @@ +import arrow from './arrow' + +import circle from './circle' +import rect from './rect' +import parallelogram from './parallelogram' +import triangle from './triangle' +import fibonacciCircle from './fibonacciCircle' +import fibonacciSegment from './fibonacciSegment' +import fibonacciSpiral from './fibonacciSpiral' +import fibonacciSpeedResistanceFan from './fibonacciSpeedResistanceFan' +import fibonacciExtension from './fibonacciExtension' +import gannBox from './gannBox' +import threeWaves from './threeWaves' +import fiveWaves from './fiveWaves' +import eightWaves from './eightWaves' +import anyWaves from './anyWaves' +import abcd from './abcd' +import xabcd from './xabcd' +import barSignal from "./barSignal"; +import ruler from "./ruler"; +import trade from "./trade"; +import note from "./note" + +const overlays = [ + arrow, + circle, rect, triangle, parallelogram, + fibonacciCircle, fibonacciSegment, fibonacciSpiral, + fibonacciSpeedResistanceFan, fibonacciExtension, gannBox, + threeWaves, fiveWaves, eightWaves, anyWaves, abcd, xabcd, + barSignal, ruler, trade, note +] + +export default overlays diff --git a/src/lib/overlays/note.ts b/src/lib/overlays/note.ts new file mode 100644 index 0000000..3033eff --- /dev/null +++ b/src/lib/overlays/note.ts @@ -0,0 +1,56 @@ +import type {OverlayTemplate} from 'klinecharts'; +import type {TradeInfo} from "../types"; + +/** + * 在某个点显示一个标签。 + * 标签中可以是多行文本。 + * 此overlay从trade缩减一半得到。 + * 如需修改代码,请一并修改trade + */ + +const textStyles = { + color: '#ffffff', + paddingLeft: 6, + paddingTop: 6, + paddingRight: 6, + paddingBottom: 6, +} + + +const note: OverlayTemplate = { + name: 'note', + lock: true, + totalStep: 2, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({coordinates, overlay}) => { + if (coordinates.length == 0) return [] + const data = overlay.extendData as TradeInfo; + const pt1 = coordinates[0] + const line_styles: Record = {size: 2} + if(data && data.line_color){ + line_styles['color'] = data.line_color + } + const distance = data.distance ?? 15 + let startBase = 'bottom' + let startY = pt1.y - distance + // 被选中,显示提示框 + const in_fig = { + type: 'textBox', + attrs: { x: pt1.x, y: startY, text: data.in_text, align: 'center', baseline: startBase}, + ignoreEvent: true, + styles: {...textStyles, backgroundColor: data.in_color, borderColor: data.in_color,} + } + // 入场点出场点到文本框的线 + const vert_start = { + type: 'line', + attrs: {coordinates: [pt1, {x: pt1.x, y: startY}]}, + ignoreEvent: true, + styles: line_styles + } + return [in_fig, vert_start] + }, +} + +export default note; diff --git a/src/lib/overlays/parallelogram.ts b/src/lib/overlays/parallelogram.ts new file mode 100644 index 0000000..3692f57 --- /dev/null +++ b/src/lib/overlays/parallelogram.ts @@ -0,0 +1,66 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate } from 'klinecharts' + +const parallelogram: OverlayTemplate = { + name: 'parallelogram', + totalStep: 4, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + styles: { + polygon: { + color: 'rgba(22, 119, 255, 0.15)' + } + }, + createPointFigures: ({ coordinates }) => { + if (coordinates.length === 2) { + return [ + { + type: 'line', + ignoreEvent: true, + attrs: { coordinates } + } + ] + } + if (coordinates.length === 3) { + const coordinate = { x: coordinates[0].x + (coordinates[2].x - coordinates[1].x), y: coordinates[2].y } + return [ + { + type: 'polygon', + attrs: { coordinates: [coordinates[0], coordinates[1], coordinates[2], coordinate] }, + styles: { style: 'stroke_fill' } + } + ] + } + return [] + }, + performEventPressedMove: ({ points, performPointIndex, performPoint }) => { + if (performPointIndex < 2) { + // @ts-expect-error + points[0].price = performPoint.price + // @ts-expect-error + points[1].price = performPoint.price + } + }, + performEventMoveForDrawing: ({ currentStep, points, performPoint }) => { + if (currentStep === 2) { + // @ts-expect-error + points[0].price = performPoint.price + } + } +} + +export default parallelogram diff --git a/src/lib/overlays/rect.ts b/src/lib/overlays/rect.ts new file mode 100644 index 0000000..15a2428 --- /dev/null +++ b/src/lib/overlays/rect.ts @@ -0,0 +1,49 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate } from 'klinecharts' + +const rect: OverlayTemplate = { + name: 'rect', + totalStep: 3, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + styles: { + polygon: { + color: 'rgba(22, 119, 255, 0.15)' + } + }, + createPointFigures: ({ coordinates }) => { + if (coordinates.length > 1) { + return [ + { + type: 'polygon', + attrs: { + coordinates: [ + coordinates[0], + { x: coordinates[1].x, y: coordinates[0].y }, + coordinates[1], + { x: coordinates[0].x, y: coordinates[1].y } + ] + }, + styles: { style: 'stroke_fill' } + } + ] + } + return [] + } +} + +export default rect diff --git a/src/lib/overlays/ruler.ts b/src/lib/overlays/ruler.ts new file mode 100644 index 0000000..977eb40 --- /dev/null +++ b/src/lib/overlays/ruler.ts @@ -0,0 +1,122 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate } from 'klinecharts' +import {getArrowLine, getPrecision} from './utils' +import * as m from '$lib/paraglide/messages.js'; + + +function getIntervalText(interval: number){ + const minSecs = 60 + const hourSecs = 3600 + const daySecs = 24 * 3600 + let result: string[] = [] + if(interval > daySecs){ + const days = Math.floor(interval / daySecs) + result.push(days.toString(), m.days()) + interval = interval % daySecs + } + if(interval > hourSecs){ + const hours = Math.floor(interval / hourSecs) + result.push(hours.toString(), m.hours()) + interval = interval % hourSecs + } + if(interval > minSecs){ + const mins = Math.floor(interval / minSecs) + result.push(mins.toString(), m.mins()) + interval = interval % minSecs + } + if(interval > 0){ + result.push('1', m.mins()) + } + return result.join('') +} + +// @ts-ignore +const ruler: OverlayTemplate = { + name: 'ruler', + totalStep: 3, + lock: true, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + styles: { + polygon: { + color: 'rgba(22, 119, 255, 0.15)' + } + }, + createPointFigures: ({ chart, coordinates, overlay, yAxis }) => { + const precision = getPrecision(chart, overlay, yAxis) + if (coordinates.length > 1) { + const pt1 = coordinates[0] + const pt2 = coordinates[1] + const midX = (pt1.x + pt2.x) / 2 + const midY = (pt1.y + pt2.y) / 2 + const vertArrow = getArrowLine({x: midX, y: pt1.y}, {x: midX, y: pt2.y}) + const horzArrow = getArrowLine({x: pt1.x, y: midY}, {x: pt2.x, y: midY}) + + const bgColor = pt1.y > pt2.y ? '#F7525F' : '#2962FF' + const textStyles = { + color: '#ffffff', + backgroundColor: bgColor, + borderColor: bgColor, + paddingLeft: 6, + paddingTop: 6, + paddingRight: 6, + paddingBottom: 6, + } + + const points = overlay.points + // @ts-ignore + const valueDif = points[0].value - points[1].value + const priceChg = valueDif.toFixed(precision) + // @ts-ignore + const pctChg = ((valueDif / points[0].value) * 100).toFixed(2) + // @ts-ignore + const barNum = points[1].dataIndex - points[0].dataIndex + // @ts-ignore + const dist_sec = (points[1].timestamp - points[0].timestamp) / 1000 + const text = `${priceChg} (${pctChg}%)\n${barNum}${m.num_bar()}, ${getIntervalText(dist_sec)}` + let textY = pt2.y + 10 + let boxBaseLine = 'top' + if(pt1.y > pt2.y){ + textY = pt2.y - 10 + boxBaseLine = 'bottom' + } + return [ + { + type: 'polygon', + attrs: { + coordinates: [ + pt1, { x: pt2.x, y: pt1.y }, + pt2, { x: pt1.x, y: pt2.y } + ] + }, + styles: { style: 'stroke_fill' } + }, + { + type: 'textBox', + attrs: { x: midX, y: textY, text, align: 'center', baseline: boxBaseLine }, + ignoreEvent: true, + styles: textStyles + }, + ...vertArrow, + ...horzArrow + ] + } + return [] + } +} + +export default ruler diff --git a/src/lib/overlays/threeWaves.ts b/src/lib/overlays/threeWaves.ts new file mode 100644 index 0000000..67dac98 --- /dev/null +++ b/src/lib/overlays/threeWaves.ts @@ -0,0 +1,43 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate } from 'klinecharts' + +const threeWaves: OverlayTemplate = { + name: 'threeWaves', + totalStep: 5, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({ coordinates }) => { + const texts = coordinates.map((coordinate, i) => ({ + ...coordinate, + text: `(${i})`, + baseline: 'bottom' + })) + return [ + { + type: 'line', + attrs: { coordinates } + }, + { + type: 'text', + ignoreEvent: true, + attrs: texts + } + ] + } +} + +export default threeWaves diff --git a/src/lib/overlays/trade.ts b/src/lib/overlays/trade.ts new file mode 100644 index 0000000..7e901d3 --- /dev/null +++ b/src/lib/overlays/trade.ts @@ -0,0 +1,95 @@ +import type {OverlayEvent, OverlayTemplate} from 'klinecharts'; +import type {TradeInfo} from "../types"; + +const textStyles = { + color: '#ffffff', + paddingLeft: 6, + paddingTop: 6, + paddingRight: 6, + paddingBottom: 6, +} + +const trade: OverlayTemplate = { + name: 'trade', + lock: true, + totalStep: 3, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + createPointFigures: ({coordinates, overlay}) => { + if (coordinates.length <= 1) return [] + const data = overlay.extendData as TradeInfo; + const pt1 = coordinates[0] + const pt2 = coordinates[1] + const line_styles: Record = {size: 2} + if(data && data.line_color){ + line_styles['color'] = data.line_color + } + const line_fig = { + type: 'line', + attrs: {coordinates: [pt1, pt2]}, + styles: line_styles + } + if(!data.active && !data.selected)return [line_fig] + const distance = data.distance ?? 15 + let startBase = 'bottom' + let startY = pt1.y - distance + let stopBase = 'top' + let stopY = pt2.y + distance + if(pt1.y > pt2.y){ + startBase = 'top' + startY = pt1.y + distance + stopBase = 'bottom' + stopY = pt2.y - distance + } + // 被选中,显示提示框 + const in_fig = { + type: 'textBox', + attrs: { x: pt1.x, y: startY, text: data.in_text, align: 'center', baseline: startBase}, + ignoreEvent: true, + styles: {...textStyles, backgroundColor: data.in_color, borderColor: data.in_color,} + } + const out_fig = { + type: 'textBox', + attrs: { x: pt2.x, y: stopY, text: data.out_text, align: 'center', baseline: stopBase}, + ignoreEvent: true, + styles: {...textStyles, backgroundColor: data.out_color, borderColor: data.out_color,} + } + // 入场点出场点到文本框的线 + const vert_start = { + type: 'line', + attrs: {coordinates: [pt1, {x: pt1.x, y: startY}]}, + ignoreEvent: true, + styles: line_styles + } + const vert_stop = { + type: 'line', + attrs: {coordinates: [pt2, {x: pt2.x, y: stopY}]}, + ignoreEvent: true, + styles: line_styles + } + return [line_fig, in_fig, out_fig, vert_start, vert_stop] + }, + onSelected: (e: OverlayEvent) => { + const data = e.overlay.extendData as TradeInfo; + data.selected = true + return false + }, + onDeselected: (e: OverlayEvent) => { + const data = e.overlay.extendData as TradeInfo; + data.selected = false + return false + }, + onMouseEnter: (e: OverlayEvent) => { + const data = e.overlay.extendData as TradeInfo; + data.active = true + return false + }, + onMouseLeave: (e: OverlayEvent) => { + const data = e.overlay.extendData as TradeInfo; + data.active = false + return false + } +} + +export default trade; \ No newline at end of file diff --git a/src/lib/overlays/triangle.ts b/src/lib/overlays/triangle.ts new file mode 100644 index 0000000..eefc950 --- /dev/null +++ b/src/lib/overlays/triangle.ts @@ -0,0 +1,39 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate } from 'klinecharts' + +const triangle: OverlayTemplate = { + name: 'triangle', + totalStep: 4, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + styles: { + polygon: { + color: 'rgba(22, 119, 255, 0.15)' + } + }, + createPointFigures: ({ coordinates }) => { + return [ + { + type: 'polygon', + attrs: { coordinates }, + styles: { style: 'stroke_fill' } + } + ] + } +} + +export default triangle diff --git a/src/lib/overlays/utils.ts b/src/lib/overlays/utils.ts new file mode 100644 index 0000000..60864a0 --- /dev/null +++ b/src/lib/overlays/utils.ts @@ -0,0 +1,103 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { Coordinate, Bounding, LineAttrs, Chart, YAxis, Overlay } from 'klinecharts' +import * as kc from 'klinecharts' + +export function getArrowLine(point1: Coordinate, point2: Coordinate){ + const flag = point2.x > point1.x ? 0 : 1 + const kb = kc.utils.getLinearSlopeIntercept(point1, point2) + let offsetAngle + if (kb) { + offsetAngle = Math.atan(kb[0]) + Math.PI * flag + } else { + if (point2.y > point1.y) { + offsetAngle = Math.PI / 2 + } else { + offsetAngle = Math.PI / 2 * 3 + } + } + const rotateCoordinate1 = getRotateCoordinate({ x: point2.x - 8, y: point2.y + 4 }, point2, offsetAngle) + const rotateCoordinate2 = getRotateCoordinate({ x: point2.x - 8, y: point2.y - 4 }, point2, offsetAngle) + return [ + { + type: 'line', + attrs: { coordinates: [point1, point2] } + }, + { + type: 'line', + ignoreEvent: true, + attrs: { coordinates: [rotateCoordinate1, point2, rotateCoordinate2] } + } + ] +} + + +export function getRotateCoordinate (coordinate: Coordinate, targetCoordinate: Coordinate, angle: number): Coordinate { + const x = (coordinate.x - targetCoordinate.x) * Math.cos(angle) - (coordinate.y - targetCoordinate.y) * Math.sin(angle) + targetCoordinate.x + const y = (coordinate.x - targetCoordinate.x) * Math.sin(angle) + (coordinate.y - targetCoordinate.y) * Math.cos(angle) + targetCoordinate.y + return { x, y } +} + +export function getRayLine (coordinates: Coordinate[], bounding: Bounding): LineAttrs | LineAttrs[] { + if (coordinates.length > 1) { + let coordinate: Coordinate + const point1 = coordinates[0] + const point2 = coordinates[1] + if (point1.x === point2.x && point1.y !== point2.y) { + if (point1.y < point2.y) { + coordinate = { + x: point1.x, + y: bounding.height + } + } else { + coordinate = { + x: point1.x, + y: 0 + } + } + } else if (point1.x > point2.x) { + coordinate = { + x: 0, + y: kc.utils.getLinearYFromCoordinates(point1, point2, { x: 0, y: point1.y }) + } + } else { + coordinate = { + x: bounding.width, + y: kc.utils.getLinearYFromCoordinates(point1, point2, { x: bounding.width, y: point1.y }) + } + } + return { coordinates: [point1, coordinate] } + } + return [] +} + +export function getDistance (coordinate1: Coordinate, coordinate2: Coordinate,): number { + const xDis = Math.abs(coordinate1.x - coordinate2.x) + const yDis = Math.abs(coordinate1.y - coordinate2.y) + return Math.sqrt(xDis * xDis + yDis * yDis) +} + +export function getPrecision(chart: Chart, overlay: Overlay, yAxis: kc.Nullable): number { + let precision = 0 + if (yAxis?.isInCandle() ?? true) { + precision = chart.getPrecision().price + } else { + const indicators = chart.getIndicators({ paneId: overlay.paneId }).get(overlay.paneId) ?? [] + indicators.forEach(indicator => { + precision = Math.max(precision, indicator.precision) + }) + } + return precision +} diff --git a/src/lib/overlays/xabcd.ts b/src/lib/overlays/xabcd.ts new file mode 100644 index 0000000..889a454 --- /dev/null +++ b/src/lib/overlays/xabcd.ts @@ -0,0 +1,72 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + + * http://www.apache.org/licenses/LICENSE-2.0 + + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { OverlayTemplate, PolygonAttrs, LineAttrs } from 'klinecharts' + +const xabcd: OverlayTemplate = { + name: 'xabcd', + totalStep: 6, + needDefaultPointFigure: true, + needDefaultXAxisFigure: true, + needDefaultYAxisFigure: true, + styles: { + polygon: { + color: 'rgba(22, 119, 255, 0.15)' + } + }, + createPointFigures: ({ coordinates, overlay }) => { + const dashedLines: LineAttrs[] = [] + const polygons: PolygonAttrs[] = [] + const tags = ['X', 'A', 'B', 'C', 'D'] + const texts = coordinates.map((coordinate, i) => ({ + ...coordinate, + baseline: 'bottom', + text: `(${tags[i]})` + })) + if (coordinates.length > 2) { + dashedLines.push({ coordinates: [coordinates[0], coordinates[2]] }) + polygons.push({ coordinates: [coordinates[0], coordinates[1], coordinates[2]] }) + if (coordinates.length > 3) { + dashedLines.push({ coordinates: [coordinates[1], coordinates[3]] }) + if (coordinates.length > 4) { + dashedLines.push({ coordinates: [coordinates[2], coordinates[4]] }) + polygons.push({ coordinates: [coordinates[2], coordinates[3], coordinates[4]] }) + } + } + } + return [ + { + type: 'line', + attrs: { coordinates } + }, + { + type: 'line', + attrs: dashedLines, + styles: { style: 'dashed' } + }, + { + type: 'polygon', + ignoreEvent: true, + attrs: polygons + }, + { + type: 'text', + ignoreEvent: true, + attrs: texts + } + ] + } +} + +export default xabcd diff --git a/src/lib/stores/alerts.ts b/src/lib/stores/alerts.ts new file mode 100644 index 0000000..f6b3351 --- /dev/null +++ b/src/lib/stores/alerts.ts @@ -0,0 +1,33 @@ +import { writable } from 'svelte/store'; + +export type AlertType = 'info' | 'success' | 'warning' | 'error'; + +export interface AlertMessage { + type: AlertType; + text: string; + secs: number; + id: number; +} + +export function createAlertStore() { + const { subscribe, update } = writable([]); + let nextId = 1; + + return { + subscribe, + addAlert: (type: AlertType, text: string, secs: number = 3) => { + const id = nextId++; + update(alerts => [...alerts, { type, text, secs, id }]); + + // 设定时间后自动移除 + setTimeout(() => { + update(alerts => alerts.filter(alert => alert.id !== id)); + }, secs * 1000); + }, + removeAlert: (id: number) => { + update(alerts => alerts.filter(alert => alert.id !== id)); + } + }; +} + +export const alerts = createAlertStore(); \ No newline at end of file diff --git a/src/lib/types.ts b/src/lib/types.ts new file mode 100644 index 0000000..8febea6 --- /dev/null +++ b/src/lib/types.ts @@ -0,0 +1,217 @@ +import type {KLineData, Styles, DeepPartial} from 'klinecharts' + +export interface SymbolInfo { + ticker: string + name?: string + shortName?: string + exchange?: string + market?: string + pricePrecision?: number + volumePrecision?: number + priceCurrency?: string + type?: string + logo?: string +} + +export type Timespan = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' + +export interface Period { + timeframe: string; + multiplier: number; + timespan: Timespan; + secs: number; +} + +export type PaneInds = { + name: string, + inds: string[] +} + +export type KData = { + data: KLineData[], + lays?: any[] +} + +export type DatafeedWatchCallback = (data: any) => void + +export type GetKlineArgs = { + symbol: SymbolInfo, + period: Period, + from: number, + to: number, + strategy?: string | null +} + +export interface Datafeed { + getSymbols (): Promise + getHistoryKLineData (args: GetKlineArgs): Promise + subscribe (symbol: SymbolInfo, callback: DatafeedWatchCallback): void + unsubscribe (symbol: SymbolInfo): void +} + +export interface ChartProOptions { + container: string | HTMLElement + styles?: DeepPartial + watermark?: string | Node + theme?: string + locale?: string + drawingBarVisible?: boolean + symbol: SymbolInfo + period: Period + periods?: Period[] + timezone?: string + mainIndicators?: string[] + subIndicators?: string[] + datafeed: Datafeed + persistKey?: string +} + +export type PairItem = { + label: string, + value: string +} + +export interface BotTask{ + task_id: number, + live: boolean, + start_ms: number, + stop_ms: number, + pairs: string[], + strategy: string[], + tfs: string[], + order_num: number, + profit_rate: number +} + +export interface TaskSymbol{ + symbol: string, + timeframe: string, + start_ms: number, + stop_ms: number, + order_num: number, + tot_profit: number, +} + +export const OrderStatus = [ + '等待执行', + '部分完成', + '已完成' +] + +export const InoutStatus = [ + '待执行', + '部分入场', + '已入场', + '部分出场', + '已平仓' +] + +export interface BanOrder extends Record{ + id: number + task_id: number + symbol: string + sid: number + timeframe: string + short: boolean + status: number + enter_tag: string + init_price: number + quote_cost: number + exit_tag: string + leverage: number + enter_at: number + exit_at: number + strategy: string + stg_ver: number + profit_rate: number + profit: number + info: string + enter_cost: number + duration: number + + enter_id: number + enter_task_id: number + enter_inout_id: number + enter_order_type: string + enter_order_id: string + enter_side: string + enter_create_at: number + enter_price: number + enter_average: number + enter_amount: number + enter_filled: number + enter_status: number + enter_fee: number + enter_fee_type: string + enter_update_at: number + + exit_id?: number + exit_task_id?: number + exit_inout_id?: number + exit_order_type?: string + exit_order_id?: string + exit_side?: string + exit_create_at?: number + exit_price?: number + exit_average?: number + exit_amount?: number + exit_filled?: number + exit_status?: number + exit_fee?: number + exit_fee_type?: string + exit_update_at?: number +} + +export interface OpenOrder{ + pair: string + side?: string + order_type?: string + price?: number + stoploss_price?: number + enter_cost?: number + enter_tag?: string + leverage?: number + strategy?: string +} + + +export type AddDelInd = { + is_main: boolean, + ind_name: string, + is_add: boolean +} + +export type TrendItemType = { + time: number, + start_dt: string, + symbol: string, + base_s: string, + quote_s: string, + rate: number, + quote_vol: number, + vol_text: string +} + +export type BanInd = { + name: string, + title: string, + cloud: boolean, + is_main: boolean +} + +/** + * 用于K线图表上显示的交易信息 + * time/price通过Point传入 + */ +export interface TradeInfo { + line_color: string, + in_color: string, + in_text: string, + out_color: string, + out_text: string, + active?: boolean, + selected?: boolean, + distance?: number +} + +export type BarArr = [number, number, number, number, number, number] diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..af25991 --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,52 @@ + + + + +
+ {#each $alerts as alert (alert.id)} + + {/each} +
+ {@render children()} +
+ + \ No newline at end of file diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts new file mode 100644 index 0000000..189f71e --- /dev/null +++ b/src/routes/+layout.ts @@ -0,0 +1 @@ +export const prerender = true; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte new file mode 100644 index 0000000..10fc32f --- /dev/null +++ b/src/routes/+page.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/static/favicon.png b/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..825b9e65af7c104cfb07089bb28659393b4f2097 GIT binary patch literal 1571 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 + + +Generated by IcoMoon + + + + + + + + + + \ No newline at end of file diff --git a/static/fonts/icomoon.ttf b/static/fonts/icomoon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6e7c6be58d55201715e41ead9fac7bc27ca7b7b3 GIT binary patch literal 2384 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 literal 0 HcmV?d00001 diff --git a/svelte.config.js b/svelte.config.js new file mode 100644 index 0000000..6599a31 --- /dev/null +++ b/svelte.config.js @@ -0,0 +1,26 @@ +//import adapter from '@sveltejs/adapter-auto'; +import adapter from '@sveltejs/adapter-static'; +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; +/** @type {import('@sveltejs/kit').Config}*/ +const config = { + // Consult https://svelte.dev/docs/kit/integrations + // for more information about preprocessors + preprocess: vitePreprocess(), + kit: { + // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. + // If your environment is not supported, or you settled on a specific environment, switch out the adapter. + // See https://svelte.dev/docs/kit/adapters for more information about adapters. + adapter: adapter({ + pages: 'dist', + assets: 'dist', + fallback: undefined, + precompress: false, + strict: true + }) + }, + compilerOptions: { + // disable all warnings coming from node_modules and all accessibility warnings + warningFilter: (warning) => !warning.filename?.includes('node_modules') && !warning.code.startsWith('a11y') + } +}; +export default config; diff --git a/tailwind.config.cjs b/tailwind.config.cjs new file mode 100644 index 0000000..0e9ecff --- /dev/null +++ b/tailwind.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + content: ['./src/**/*.{html,svelte,js,ts}'], + plugins: [require('daisyui')], + daisyui: { + themes: true, + } +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..99422a2 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler", + "paths": { + "@/*": ["./src/*"] + } + } + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..01db298 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,19 @@ +import { paraglide } from '@inlang/paraglide-sveltekit/vite' +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [ + paraglide({ + project: './project.inlang', + outdir: './src/lib/paraglide' + }), + sveltekit() + ], + resolve: { + alias: { + '@': '/src', + 'klinecharts': 'klinecharts/dist/index.esm.js' + } + } +}); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..8d9ecf0 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2725 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@ampproject/remapping@^2.3.0": + version "2.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/@ampproject/remapping/-/remapping-2.3.0.tgz" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@esbuild/win32-x64@0.21.5": + version "0.21.5" + resolved "https://mirrors.cloud.tencent.com/npm/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz" + integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://mirrors.cloud.tencent.com/npm/@eslint-community/regexpp/-/regexpp-4.12.1.tgz" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.19.0": + version "0.19.0" + resolved "https://mirrors.cloud.tencent.com/npm/@eslint/config-array/-/config-array-0.19.0.tgz" + integrity sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ== + dependencies: + "@eslint/object-schema" "^2.1.4" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/core@^0.9.0": + version "0.9.0" + resolved "https://mirrors.cloud.tencent.com/npm/@eslint/core/-/core-0.9.0.tgz" + integrity sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg== + +"@eslint/eslintrc@^3.2.0": + version "3.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/@eslint/eslintrc/-/eslintrc-3.2.0.tgz" + integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@9.16.0": + version "9.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/@eslint/js/-/js-9.16.0.tgz" + integrity sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg== + +"@eslint/object-schema@^2.1.4": + version "2.1.4" + resolved "https://mirrors.cloud.tencent.com/npm/@eslint/object-schema/-/object-schema-2.1.4.tgz" + integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== + +"@eslint/plugin-kit@^0.2.3": + version "0.2.3" + resolved "https://mirrors.cloud.tencent.com/npm/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz" + integrity sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA== + dependencies: + levn "^0.4.1" + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://mirrors.cloud.tencent.com/npm/@humanfs/core/-/core-0.19.1.tgz" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://mirrors.cloud.tencent.com/npm/@humanfs/node/-/node-0.16.6.tgz" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/retry/-/retry-0.3.1.tgz" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.1": + version "0.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/@humanwhocodes/retry/-/retry-0.4.1.tgz" + integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== + +"@inlang/detect-json-formatting@1.0.0": + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/detect-json-formatting/-/detect-json-formatting-1.0.0.tgz" + integrity sha512-o0jeI8U4TgNlsPwI0y92jld8/18Loh2KEgHCYCJ42rCOdxFrA8R60cydlEd2/6jkdHFn5DxKj8rOyiKv3z9uOw== + dependencies: + guess-json-indent "2.0.0" + +"@inlang/json-types@1.1.0": + version "1.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/json-types/-/json-types-1.1.0.tgz" + integrity sha512-n6vS6AqETsCFbV4TdBvR/EH57waVXzKsMqeUQ+eH2Q6NUATfKhfLabgNms2A+QV3aedH/hLtb1pRmjl2ykBVZg== + +"@inlang/language-tag@1.5.1": + version "1.5.1" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/language-tag/-/language-tag-1.5.1.tgz" + integrity sha512-+NlYDxDvN5h/TKUmkuQv+Ct1flxaVRousCbek7oFEk3/afZPVLNTJhm+cX2xiOg3tmi2KKrBLfy/V9oUDHj6GQ== + dependencies: + "@sinclair/typebox" "^0.31.17" + +"@inlang/message-lint-rule@1.4.7": + version "1.4.7" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/message-lint-rule/-/message-lint-rule-1.4.7.tgz" + integrity sha512-FCiFe/H25fqhsIb/YTb0K7eDJqEYzdr6ectF0xG4zARiS7nXz0FHxk2niJrIO8kFkB4mx6tszsgQ0xqD5cHQag== + dependencies: + "@inlang/json-types" "1.1.0" + "@inlang/language-tag" "1.5.1" + "@inlang/message" "2.1.0" + "@inlang/project-settings" "2.4.2" + "@inlang/translatable" "1.3.1" + +"@inlang/message@2.1.0": + version "2.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/message/-/message-2.1.0.tgz" + integrity sha512-Gr3wiErI7fW4iW11xgZzsJEUTjlZuz02fB/EO+ENTBlSHGyI1kzbCCeNqLr1mnGdQYiOxfuZxY0S4G5C6Pju3Q== + dependencies: + "@inlang/language-tag" "1.5.1" + +"@inlang/module@1.2.14": + version "1.2.14" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/module/-/module-1.2.14.tgz" + integrity sha512-Z7rRa6x3RkzjdvNA7x+KskNGdSBEO46X9c7bTl6eZmLXy0J9yGDn6s4jpYqQzyKRG8g5mEqWcRqcVqdNwzj5Gg== + dependencies: + "@inlang/message-lint-rule" "1.4.7" + "@inlang/plugin" "2.4.14" + +"@inlang/paraglide-js@1.11.3": + version "1.11.3" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/paraglide-js/-/paraglide-js-1.11.3.tgz" + integrity sha512-WVNraTylfZty0kt5EQNh8yx0WUJbtYEmc8YoNRRSUWB0rqeCh8a9xIQnmzZxBMf7IL7es+Ppiqx15py7mukJRw== + dependencies: + "@inlang/detect-json-formatting" "1.0.0" + commander "11.1.0" + consola "3.2.3" + dedent "1.5.1" + json5 "2.2.3" + posthog-node "^4.0.1" + +"@inlang/paraglide-sveltekit@0.12.1": + version "0.12.1" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/paraglide-sveltekit/-/paraglide-sveltekit-0.12.1.tgz" + integrity sha512-UaNgdaa2NWRwwcqo1HZA+mmu5EZFTZ5i65dJJUC6jyqze/L7ozbIG73UHjXf57WONtLjbsEA7WlxcwMVWzpMvw== + dependencies: + "@inlang/paraglide-js" "1.11.3" + "@inlang/paraglide-vite" "1.2.77" + "@lix-js/client" "2.2.1" + commander "^12.0.0" + dedent "1.5.1" + devalue "^4.3.2" + magic-string "^0.30.5" + svelte "^5.0.0 || ^5.0.0-next.1 || ^5.0.0-rc.1" + +"@inlang/paraglide-unplugin@1.8.8": + version "1.8.8" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/paraglide-unplugin/-/paraglide-unplugin-1.8.8.tgz" + integrity sha512-2mQzzRwJY36Z9wsnielmec0uMhUOgTje/xMy9pG7h+voO2rrX89MQbEKBHkRzkb0yq090oILDFq3rUXRCgW07g== + dependencies: + "@inlang/paraglide-js" "1.11.3" + "@inlang/sdk" "0.36.3" + "@lix-js/client" "2.2.1" + unplugin "^1.14.1" + +"@inlang/paraglide-vite@1.2.77": + version "1.2.77" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/paraglide-vite/-/paraglide-vite-1.2.77.tgz" + integrity sha512-rn2hUcgYnQOhHc4qNerMc7AUqBN4WTINhm8MwP5L0f/EIJLsQ7jDLMrZRiBOkFuMBj7p53oHElhwk+juBqkCAw== + dependencies: + "@inlang/paraglide-unplugin" "1.8.8" + +"@inlang/plugin@2.4.14": + version "2.4.14" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/plugin/-/plugin-2.4.14.tgz" + integrity sha512-HFI1t1tKs6jXqwKVl59vvt7kvMgg2Po7xA3IFijfJTZCt0tTI8txqeXCUV9jhUop29Hqj6a5zQd32BYv33Dulw== + dependencies: + "@inlang/json-types" "1.1.0" + "@inlang/language-tag" "1.5.1" + "@inlang/message" "2.1.0" + "@inlang/project-settings" "2.4.2" + "@inlang/translatable" "1.3.1" + "@lix-js/fs" "2.2.0" + +"@inlang/project-settings@2.4.2": + version "2.4.2" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/project-settings/-/project-settings-2.4.2.tgz" + integrity sha512-Okus2JdwTzNebZHkXCrUH/zIWwqu7kWm/ZQaM6a31oRIEA2JdQJtyNGM8E/KrwGfEuq18U+WV03+tR3tkwsGvA== + dependencies: + "@inlang/json-types" "1.1.0" + "@inlang/language-tag" "1.5.1" + +"@inlang/result@1.1.0": + version "1.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/result/-/result-1.1.0.tgz" + integrity sha512-zLGroi9EUiHuOjUOaglUVTFO7EWdo2OARMJLBO1Q5Ga/xJmSQb6XS1lhqEXBFAjgFarfEMX5YEJWWALogYV3wA== + +"@inlang/sdk@0.36.3": + version "0.36.3" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/sdk/-/sdk-0.36.3.tgz" + integrity sha512-wjsavc44H24v74tdEQ13FqZZcr43T106oEfHJnBLzEP55Zz2JJWABLund+DEdosZx+9E8mJBEW5JlVnlBwP3Zw== + dependencies: + "@inlang/json-types" "1.1.0" + "@inlang/language-tag" "1.5.1" + "@inlang/message" "2.1.0" + "@inlang/message-lint-rule" "1.4.7" + "@inlang/module" "1.2.14" + "@inlang/plugin" "2.4.14" + "@inlang/project-settings" "2.4.2" + "@inlang/result" "1.1.0" + "@inlang/translatable" "1.3.1" + "@lix-js/client" "2.2.1" + "@lix-js/fs" "2.2.0" + "@sinclair/typebox" "^0.31.17" + debug "^4.3.4" + dedent "1.5.1" + deepmerge-ts "^5.1.0" + murmurhash3js "^3.0.1" + solid-js "1.6.12" + throttle-debounce "^5.0.0" + +"@inlang/translatable@1.3.1": + version "1.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/@inlang/translatable/-/translatable-1.3.1.tgz" + integrity sha512-VAtle21vRpIrB+axtHFrFB0d1HtDaaNj+lV77eZQTJyOWbTFYTVIQJ8WAbyw9eu4F6h6QC2FutLyxjMomxfpcQ== + dependencies: + "@inlang/language-tag" "1.5.1" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/@isaacs/cliui/-/cliui-8.0.2.tgz" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://mirrors.cloud.tencent.com/npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/@jridgewell/set-array/-/set-array-1.2.1.tgz" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://mirrors.cloud.tencent.com/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://mirrors.cloud.tencent.com/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@lix-js/client@2.2.1": + version "2.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/@lix-js/client/-/client-2.2.1.tgz" + integrity sha512-6DTJdRN2L2a1A8OxW1Wqh3ZOORqq8+YlCALMF5UMoxhfHE4Fcq9FZztMkAV+KwhrDSsp0USWvD9myG0XX+v6QQ== + dependencies: + "@lix-js/fs" "2.2.0" + async-lock "1.4.1" + clean-git-ref "2.0.1" + crc-32 "1.2.2" + ignore "5.3.1" + octokit "3.1.2" + pako "1.0.11" + pify "5.0.0" + sha.js "2.4.11" + +"@lix-js/fs@2.2.0": + version "2.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/@lix-js/fs/-/fs-2.2.0.tgz" + integrity sha512-B9X3FjD8WmdG7tbA44JuniSO0KdKBWnjfxl8zpgrDCkavrp/GP7U0xxBkc0WgeeoHjQ/pkqq9VqtWB2kS9jIUg== + dependencies: + typescript "5.2.2" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://mirrors.cloud.tencent.com/npm/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://mirrors.cloud.tencent.com/npm/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://mirrors.cloud.tencent.com/npm/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@octokit/app@^14.0.2": + version "14.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/app/-/app-14.1.0.tgz" + integrity sha512-g3uEsGOQCBl1+W1rgfwoRFUIR6PtvB2T1E4RpygeUU5LrLvlOqcxrt5lfykIeRpUPpupreGJUYl70fqMDXdTpw== + dependencies: + "@octokit/auth-app" "^6.0.0" + "@octokit/auth-unauthenticated" "^5.0.0" + "@octokit/core" "^5.0.0" + "@octokit/oauth-app" "^6.0.0" + "@octokit/plugin-paginate-rest" "^9.0.0" + "@octokit/types" "^12.0.0" + "@octokit/webhooks" "^12.0.4" + +"@octokit/auth-app@^6.0.0": + version "6.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/auth-app/-/auth-app-6.1.3.tgz" + integrity sha512-dcaiteA6Y/beAlDLZOPNReN3FGHu+pARD6OHfh3T9f3EO09++ec+5wt3KtGGSSs2Mp5tI8fQwdMOEnrzBLfgUA== + dependencies: + "@octokit/auth-oauth-app" "^7.1.0" + "@octokit/auth-oauth-user" "^4.1.0" + "@octokit/request" "^8.3.1" + "@octokit/request-error" "^5.1.0" + "@octokit/types" "^13.1.0" + deprecation "^2.3.1" + lru-cache "npm:@wolfy1339/lru-cache@^11.0.2-patch.1" + universal-github-app-jwt "^1.1.2" + universal-user-agent "^6.0.0" + +"@octokit/auth-oauth-app@^7.0.0", "@octokit/auth-oauth-app@^7.1.0": + version "7.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz" + integrity sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA== + dependencies: + "@octokit/auth-oauth-device" "^6.1.0" + "@octokit/auth-oauth-user" "^4.1.0" + "@octokit/request" "^8.3.1" + "@octokit/types" "^13.0.0" + "@types/btoa-lite" "^1.0.0" + btoa-lite "^1.0.0" + universal-user-agent "^6.0.0" + +"@octokit/auth-oauth-device@^6.1.0": + version "6.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz" + integrity sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw== + dependencies: + "@octokit/oauth-methods" "^4.1.0" + "@octokit/request" "^8.3.1" + "@octokit/types" "^13.0.0" + universal-user-agent "^6.0.0" + +"@octokit/auth-oauth-user@^4.0.0", "@octokit/auth-oauth-user@^4.1.0": + version "4.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz" + integrity sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ== + dependencies: + "@octokit/auth-oauth-device" "^6.1.0" + "@octokit/oauth-methods" "^4.1.0" + "@octokit/request" "^8.3.1" + "@octokit/types" "^13.0.0" + btoa-lite "^1.0.0" + universal-user-agent "^6.0.0" + +"@octokit/auth-token@^4.0.0": + version "4.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/auth-token/-/auth-token-4.0.0.tgz" + integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== + +"@octokit/auth-unauthenticated@^5.0.0": + version "5.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz" + integrity sha512-oxeWzmBFxWd+XolxKTc4zr+h3mt+yofn4r7OfoIkR/Cj/o70eEGmPsFbueyJE2iBAGpjgTnEOKM3pnuEGVmiqg== + dependencies: + "@octokit/request-error" "^5.0.0" + "@octokit/types" "^12.0.0" + +"@octokit/core@^5.0.0", "@octokit/core@>=5", "@octokit/core@5": + version "5.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/core/-/core-5.2.0.tgz" + integrity sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg== + dependencies: + "@octokit/auth-token" "^4.0.0" + "@octokit/graphql" "^7.1.0" + "@octokit/request" "^8.3.1" + "@octokit/request-error" "^5.1.0" + "@octokit/types" "^13.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^9.0.1": + version "9.0.5" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/endpoint/-/endpoint-9.0.5.tgz" + integrity sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw== + dependencies: + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^7.1.0": + version "7.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/graphql/-/graphql-7.1.0.tgz" + integrity sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ== + dependencies: + "@octokit/request" "^8.3.0" + "@octokit/types" "^13.0.0" + universal-user-agent "^6.0.0" + +"@octokit/oauth-app@^6.0.0": + version "6.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/oauth-app/-/oauth-app-6.1.0.tgz" + integrity sha512-nIn/8eUJ/BKUVzxUXd5vpzl1rwaVxMyYbQkNZjHrF7Vk/yu98/YDF/N2KeWO7uZ0g3b5EyiFXFkZI8rJ+DH1/g== + dependencies: + "@octokit/auth-oauth-app" "^7.0.0" + "@octokit/auth-oauth-user" "^4.0.0" + "@octokit/auth-unauthenticated" "^5.0.0" + "@octokit/core" "^5.0.0" + "@octokit/oauth-authorization-url" "^6.0.2" + "@octokit/oauth-methods" "^4.0.0" + "@types/aws-lambda" "^8.10.83" + universal-user-agent "^6.0.0" + +"@octokit/oauth-authorization-url@^6.0.2": + version "6.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz" + integrity sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA== + +"@octokit/oauth-methods@^4.0.0", "@octokit/oauth-methods@^4.1.0": + version "4.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz" + integrity sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw== + dependencies: + "@octokit/oauth-authorization-url" "^6.0.2" + "@octokit/request" "^8.3.1" + "@octokit/request-error" "^5.1.0" + "@octokit/types" "^13.0.0" + btoa-lite "^1.0.0" + +"@octokit/openapi-types@^20.0.0": + version "20.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-20.0.0.tgz" + integrity sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA== + +"@octokit/openapi-types@^22.2.0": + version "22.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/openapi-types/-/openapi-types-22.2.0.tgz" + integrity sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg== + +"@octokit/plugin-paginate-graphql@^4.0.0": + version "4.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.1.tgz" + integrity sha512-R8ZQNmrIKKpHWC6V2gum4x9LG2qF1RxRjo27gjQcG3j+vf2tLsEfE7I/wRWEPzYMaenr1M+qDAtNcwZve1ce1A== + +"@octokit/plugin-paginate-rest@^9.0.0": + version "9.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz" + integrity sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw== + dependencies: + "@octokit/types" "^12.6.0" + +"@octokit/plugin-rest-endpoint-methods@^10.0.0": + version "10.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz" + integrity sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg== + dependencies: + "@octokit/types" "^12.6.0" + +"@octokit/plugin-retry@^6.0.0": + version "6.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/plugin-retry/-/plugin-retry-6.1.0.tgz" + integrity sha512-WrO3bvq4E1Xh1r2mT9w6SDFg01gFmP81nIG77+p/MqW1JeXXgL++6umim3t6x0Zj5pZm3rXAN+0HEjmmdhIRig== + dependencies: + "@octokit/request-error" "^5.0.0" + "@octokit/types" "^13.0.0" + bottleneck "^2.15.3" + +"@octokit/plugin-throttling@^8.0.0": + version "8.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz" + integrity sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ== + dependencies: + "@octokit/types" "^12.2.0" + bottleneck "^2.15.3" + +"@octokit/request-error@^5.0.0", "@octokit/request-error@^5.1.0": + version "5.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/request-error/-/request-error-5.1.0.tgz" + integrity sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q== + dependencies: + "@octokit/types" "^13.1.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^8.3.0", "@octokit/request@^8.3.1": + version "8.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/request/-/request-8.4.0.tgz" + integrity sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw== + dependencies: + "@octokit/endpoint" "^9.0.1" + "@octokit/request-error" "^5.1.0" + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/types@^12.0.0", "@octokit/types@^12.2.0", "@octokit/types@^12.6.0": + version "12.6.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-12.6.0.tgz" + integrity sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw== + dependencies: + "@octokit/openapi-types" "^20.0.0" + +"@octokit/types@^13.0.0": + version "13.6.2" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz" + integrity sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA== + dependencies: + "@octokit/openapi-types" "^22.2.0" + +"@octokit/types@^13.1.0": + version "13.6.2" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/types/-/types-13.6.2.tgz" + integrity sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA== + dependencies: + "@octokit/openapi-types" "^22.2.0" + +"@octokit/webhooks-methods@^4.1.0": + version "4.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz" + integrity sha512-zoQyKw8h9STNPqtm28UGOYFE7O6D4Il8VJwhAtMHFt2C4L0VQT1qGKLeefUOqHNs1mNRYSadVv7x0z8U2yyeWQ== + +"@octokit/webhooks-types@7.6.1": + version "7.6.1" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/webhooks-types/-/webhooks-types-7.6.1.tgz" + integrity sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw== + +"@octokit/webhooks@^12.0.4": + version "12.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/@octokit/webhooks/-/webhooks-12.3.1.tgz" + integrity sha512-BVwtWE3rRXB9IugmQTfKspqjNa8q+ab73ddkV9k1Zok3XbuOxJUi4lTYk5zBZDhfWb/Y2H+RO9Iggm25gsqeow== + dependencies: + "@octokit/request-error" "^5.0.0" + "@octokit/webhooks-methods" "^4.1.0" + "@octokit/webhooks-types" "7.6.1" + aggregate-error "^3.1.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://mirrors.cloud.tencent.com/npm/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.28" + resolved "https://mirrors.cloud.tencent.com/npm/@polka/url/-/url-1.0.0-next.28.tgz" + integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== + +"@rollup/rollup-win32-x64-msvc@4.28.0": + version "4.28.0" + resolved "https://mirrors.cloud.tencent.com/npm/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz" + integrity sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ== + +"@sinclair/typebox@^0.31.0", "@sinclair/typebox@^0.31.17": + version "0.31.28" + resolved "https://mirrors.cloud.tencent.com/npm/@sinclair/typebox/-/typebox-0.31.28.tgz" + integrity sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ== + +"@sveltejs/adapter-auto@^3.0.0": + version "3.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/@sveltejs/adapter-auto/-/adapter-auto-3.3.1.tgz" + integrity sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ== + dependencies: + import-meta-resolve "^4.1.0" + +"@sveltejs/adapter-static@^3.0.6": + version "3.0.6" + resolved "https://mirrors.cloud.tencent.com/npm/@sveltejs/adapter-static/-/adapter-static-3.0.6.tgz" + integrity sha512-MGJcesnJWj7FxDcB/GbrdYD3q24Uk0PIL4QIX149ku+hlJuj//nxUbb0HxUTpjkecWfHjVveSUnUaQWnPRXlpg== + +"@sveltejs/kit@^2.0.0", "@sveltejs/kit@^2.4.3": + version "2.9.0" + resolved "https://mirrors.cloud.tencent.com/npm/@sveltejs/kit/-/kit-2.9.0.tgz" + integrity sha512-W3E7ed3ChB6kPqRs2H7tcHp+Z7oiTFC6m+lLyAQQuyXeqw6LdNuuwEUla+5VM0OGgqQD+cYD6+7Xq80vVm17Vg== + dependencies: + "@types/cookie" "^0.6.0" + cookie "^0.6.0" + devalue "^5.1.0" + esm-env "^1.2.1" + import-meta-resolve "^4.1.0" + kleur "^4.1.5" + magic-string "^0.30.5" + mrmime "^2.0.0" + sade "^1.8.1" + set-cookie-parser "^2.6.0" + sirv "^3.0.0" + tiny-glob "^0.2.9" + +"@sveltejs/vite-plugin-svelte-inspector@^3.0.0-next.0||^3.0.0": + version "3.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-3.0.1.tgz" + integrity sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ== + dependencies: + debug "^4.3.7" + +"@sveltejs/vite-plugin-svelte@^3.0.0 || ^4.0.0-next.1 || ^5.0.0", "@sveltejs/vite-plugin-svelte@^4.0.0", "@sveltejs/vite-plugin-svelte@^4.0.0-next.0||^4.0.0": + version "4.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-4.0.2.tgz" + integrity sha512-Y9r/fWy539XlAC7+5wfNJ4zH6TygUYoQ0Eegzp0zDDqhJ54+92gOyOX1l4MO1cJSx0O+Gp13YePT5XEa3+kX0w== + dependencies: + "@sveltejs/vite-plugin-svelte-inspector" "^3.0.0-next.0||^3.0.0" + debug "^4.3.7" + deepmerge "^4.3.1" + kleur "^4.1.5" + magic-string "^0.30.12" + vitefu "^1.0.3" + +"@types/aws-lambda@^8.10.83": + version "8.10.146" + resolved "https://mirrors.cloud.tencent.com/npm/@types/aws-lambda/-/aws-lambda-8.10.146.tgz" + integrity sha512-3BaDXYTh0e6UCJYL/jwV/3+GRslSc08toAiZSmleYtkAUyV5rtvdPYxrG/88uqvTuT6sb27WE9OS90ZNTIuQ0g== + +"@types/btoa-lite@^1.0.0": + version "1.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/@types/btoa-lite/-/btoa-lite-1.0.2.tgz" + integrity sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg== + +"@types/cookie@^0.6.0": + version "0.6.0" + resolved "https://mirrors.cloud.tencent.com/npm/@types/cookie/-/cookie-0.6.0.tgz" + integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== + +"@types/estree@^1.0.1", "@types/estree@^1.0.5", "@types/estree@^1.0.6", "@types/estree@1.0.6": + version "1.0.6" + resolved "https://mirrors.cloud.tencent.com/npm/@types/estree/-/estree-1.0.6.tgz" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://mirrors.cloud.tencent.com/npm/@types/json-schema/-/json-schema-7.0.15.tgz" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/jsonwebtoken@^9.0.0": + version "9.0.7" + resolved "https://mirrors.cloud.tencent.com/npm/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz" + integrity sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg== + dependencies: + "@types/node" "*" + +"@types/lodash@^4.17.13": + version "4.17.13" + resolved "https://mirrors.cloud.tencent.com/npm/@types/lodash/-/lodash-4.17.13.tgz" + integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg== + +"@types/node@*", "@types/node@^18.0.0 || >=20.0.0": + version "22.10.1" + resolved "https://mirrors.cloud.tencent.com/npm/@types/node/-/node-22.10.1.tgz" + integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== + dependencies: + undici-types "~6.20.0" + +"@typescript-eslint/eslint-plugin@8.16.0": + version "8.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz" + integrity sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.16.0" + "@typescript-eslint/type-utils" "8.16.0" + "@typescript-eslint/utils" "8.16.0" + "@typescript-eslint/visitor-keys" "8.16.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@^8.0.0 || ^8.0.0-alpha.0", "@typescript-eslint/parser@8.16.0": + version "8.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/parser/-/parser-8.16.0.tgz" + integrity sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w== + dependencies: + "@typescript-eslint/scope-manager" "8.16.0" + "@typescript-eslint/types" "8.16.0" + "@typescript-eslint/typescript-estree" "8.16.0" + "@typescript-eslint/visitor-keys" "8.16.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@8.16.0": + version "8.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz" + integrity sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg== + dependencies: + "@typescript-eslint/types" "8.16.0" + "@typescript-eslint/visitor-keys" "8.16.0" + +"@typescript-eslint/type-utils@8.16.0": + version "8.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz" + integrity sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg== + dependencies: + "@typescript-eslint/typescript-estree" "8.16.0" + "@typescript-eslint/utils" "8.16.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/types@8.16.0": + version "8.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/types/-/types-8.16.0.tgz" + integrity sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ== + +"@typescript-eslint/typescript-estree@8.16.0": + version "8.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz" + integrity sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw== + dependencies: + "@typescript-eslint/types" "8.16.0" + "@typescript-eslint/visitor-keys" "8.16.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@8.16.0": + version "8.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/utils/-/utils-8.16.0.tgz" + integrity sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.16.0" + "@typescript-eslint/types" "8.16.0" + "@typescript-eslint/typescript-estree" "8.16.0" + +"@typescript-eslint/visitor-keys@8.16.0": + version "8.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz" + integrity sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ== + dependencies: + "@typescript-eslint/types" "8.16.0" + eslint-visitor-keys "^4.2.0" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://mirrors.cloud.tencent.com/npm/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-typescript@^1.4.13: + version "1.4.13" + resolved "https://mirrors.cloud.tencent.com/npm/acorn-typescript/-/acorn-typescript-1.4.13.tgz" + integrity sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q== + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.12.1, acorn@^8.14.0, acorn@^8.9.0, acorn@>=8.9.0: + version "8.14.0" + resolved "https://mirrors.cloud.tencent.com/npm/acorn/-/acorn-8.14.0.tgz" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + +aggregate-error@^3.1.0: + version "3.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.12.4: + version "6.12.6" + resolved "https://mirrors.cloud.tencent.com/npm/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/ansi-regex/-/ansi-regex-6.1.0.tgz" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/any-promise/-/any-promise-1.3.0.tgz" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.2: + version "5.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/arg/-/arg-5.0.2.tgz" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@^5.3.1: + version "5.3.2" + resolved "https://mirrors.cloud.tencent.com/npm/aria-query/-/aria-query-5.3.2.tgz" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + +async-lock@1.4.1: + version "1.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/async-lock/-/async-lock-1.4.1.tgz" + integrity sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +autoprefixer@^10.4.20: + version "10.4.20" + resolved "https://mirrors.cloud.tencent.com/npm/autoprefixer/-/autoprefixer-10.4.20.tgz" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + dependencies: + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.0.1" + postcss-value-parser "^4.2.0" + +axios@^1.7.4: + version "1.7.9" + resolved "https://mirrors.cloud.tencent.com/npm/axios/-/axios-1.7.9.tgz" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axobject-query@^4.1.0: + version "4.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/axobject-query/-/axobject-query-4.1.0.tgz" + integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://mirrors.cloud.tencent.com/npm/before-after-hook/-/before-after-hook-2.2.3.tgz" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/binary-extensions/-/binary-extensions-2.3.0.tgz" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +bottleneck@^2.15.3: + version "2.19.5" + resolved "https://mirrors.cloud.tencent.com/npm/bottleneck/-/bottleneck-2.19.5.tgz" + integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://mirrors.cloud.tencent.com/npm/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/braces/-/braces-3.0.3.tgz" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.23.3, "browserslist@>= 4.21.0": + version "4.24.2" + resolved "https://mirrors.cloud.tencent.com/npm/browserslist/-/browserslist-4.24.2.tgz" + integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== + dependencies: + caniuse-lite "^1.0.30001669" + electron-to-chromium "^1.5.41" + node-releases "^2.0.18" + update-browserslist-db "^1.1.1" + +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/btoa-lite/-/btoa-lite-1.0.0.tgz" + integrity sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA== + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/camelcase-css/-/camelcase-css-2.0.1.tgz" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669: + version "1.0.30001685" + resolved "https://mirrors.cloud.tencent.com/npm/caniuse-lite/-/caniuse-lite-1.0.30001685.tgz" + integrity sha512-e/kJN1EMyHQzgcMEEgoo+YTCO1NGCmIYHk5Qk8jT6AazWemS5QFKJ5ShCJlH3GZrNIdZofcNCEwZqbMjjKzmnA== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.6.0: + version "3.6.0" + resolved "https://mirrors.cloud.tencent.com/npm/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^4.0.1: + version "4.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/chokidar/-/chokidar-4.0.1.tgz" + integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== + dependencies: + readdirp "^4.0.1" + +clean-git-ref@2.0.1: + version "2.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/clean-git-ref/-/clean-git-ref-2.0.1.tgz" + integrity sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://mirrors.cloud.tencent.com/npm/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://mirrors.cloud.tencent.com/npm/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^12.0.0: + version "12.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/commander/-/commander-12.1.0.tgz" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + +commander@^4.0.0: + version "4.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/commander/-/commander-4.1.1.tgz" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@11.1.0: + version "11.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/commander/-/commander-11.1.0.tgz" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +consola@3.2.3: + version "3.2.3" + resolved "https://mirrors.cloud.tencent.com/npm/consola/-/consola-3.2.3.tgz" + integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== + +cookie@^0.6.0: + version "0.6.0" + resolved "https://mirrors.cloud.tencent.com/npm/cookie/-/cookie-0.6.0.tgz" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + +crc-32@1.2.2: + version "1.2.2" + resolved "https://mirrors.cloud.tencent.com/npm/crc-32/-/crc-32-1.2.2.tgz" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +cross-spawn@^7.0.0, cross-spawn@^7.0.5: + version "7.0.6" + resolved "https://mirrors.cloud.tencent.com/npm/cross-spawn/-/cross-spawn-7.0.6.tgz" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-selector-tokenizer@^0.8: + version "0.8.0" + resolved "https://mirrors.cloud.tencent.com/npm/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz" + integrity sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^3.1.0: + version "3.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/csstype/-/csstype-3.1.3.tgz" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +culori@^3: + version "3.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/culori/-/culori-3.3.0.tgz" + integrity sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ== + +daisyui@^4.12.14: + version "4.12.14" + resolved "https://mirrors.cloud.tencent.com/npm/daisyui/-/daisyui-4.12.14.tgz" + integrity sha512-hA27cdBasdwd4/iEjn+aidoCrRroDuo3G5W9NDKaVCJI437Mm/3eSL/2u7MkZ0pt8a+TrYF3aT2pFVemTS3how== + dependencies: + css-selector-tokenizer "^0.8" + culori "^3" + picocolors "^1" + postcss-js "^4" + +dayjs@^1.11.13: + version "1.11.13" + resolved "https://mirrors.cloud.tencent.com/npm/dayjs/-/dayjs-1.11.13.tgz" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + +debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.7: + version "4.3.7" + resolved "https://mirrors.cloud.tencent.com/npm/debug/-/debug-4.3.7.tgz" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +dedent@1.5.1: + version "1.5.1" + resolved "https://mirrors.cloud.tencent.com/npm/dedent/-/dedent-1.5.1.tgz" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://mirrors.cloud.tencent.com/npm/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge-ts@^5.1.0: + version "5.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz" + integrity sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw== + +deepmerge@^4.3.1: + version "4.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/deepmerge/-/deepmerge-4.3.1.tgz" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/deprecation/-/deprecation-2.3.1.tgz" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +destr@^2.0.3: + version "2.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/destr/-/destr-2.0.3.tgz" + integrity sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ== + +devalue@^4.3.2: + version "4.3.3" + resolved "https://mirrors.cloud.tencent.com/npm/devalue/-/devalue-4.3.3.tgz" + integrity sha512-UH8EL6H2ifcY8TbD2QsxwCC/pr5xSwPvv85LrLXVihmHVC3T3YqTCIwnR5ak0yO1KYqlxrPVOA/JVZJYPy2ATg== + +devalue@^5.1.0: + version "5.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/devalue/-/devalue-5.1.1.tgz" + integrity sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw== + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://mirrors.cloud.tencent.com/npm/didyoumean/-/didyoumean-1.2.2.tgz" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +dlv@^1.1.3: + version "1.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/dlv/-/dlv-1.1.3.tgz" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://mirrors.cloud.tencent.com/npm/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +electron-to-chromium@^1.5.41: + version "1.5.67" + resolved "https://mirrors.cloud.tencent.com/npm/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz" + integrity sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://mirrors.cloud.tencent.com/npm/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +esbuild@^0.21.3: + version "0.21.5" + resolved "https://mirrors.cloud.tencent.com/npm/esbuild/-/esbuild-0.21.5.tgz" + integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== + optionalDependencies: + "@esbuild/aix-ppc64" "0.21.5" + "@esbuild/android-arm" "0.21.5" + "@esbuild/android-arm64" "0.21.5" + "@esbuild/android-x64" "0.21.5" + "@esbuild/darwin-arm64" "0.21.5" + "@esbuild/darwin-x64" "0.21.5" + "@esbuild/freebsd-arm64" "0.21.5" + "@esbuild/freebsd-x64" "0.21.5" + "@esbuild/linux-arm" "0.21.5" + "@esbuild/linux-arm64" "0.21.5" + "@esbuild/linux-ia32" "0.21.5" + "@esbuild/linux-loong64" "0.21.5" + "@esbuild/linux-mips64el" "0.21.5" + "@esbuild/linux-ppc64" "0.21.5" + "@esbuild/linux-riscv64" "0.21.5" + "@esbuild/linux-s390x" "0.21.5" + "@esbuild/linux-x64" "0.21.5" + "@esbuild/netbsd-x64" "0.21.5" + "@esbuild/openbsd-x64" "0.21.5" + "@esbuild/sunos-x64" "0.21.5" + "@esbuild/win32-arm64" "0.21.5" + "@esbuild/win32-ia32" "0.21.5" + "@esbuild/win32-x64" "0.21.5" + +escalade@^3.2.0: + version "3.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/escalade/-/escalade-3.2.0.tgz" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-compat-utils@^0.5.1: + version "0.5.1" + resolved "https://mirrors.cloud.tencent.com/npm/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz" + integrity sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q== + dependencies: + semver "^7.5.4" + +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +eslint-plugin-svelte@^2.36.0: + version "2.46.1" + resolved "https://mirrors.cloud.tencent.com/npm/eslint-plugin-svelte/-/eslint-plugin-svelte-2.46.1.tgz" + integrity sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@jridgewell/sourcemap-codec" "^1.4.15" + eslint-compat-utils "^0.5.1" + esutils "^2.0.3" + known-css-properties "^0.35.0" + postcss "^8.4.38" + postcss-load-config "^3.1.4" + postcss-safe-parser "^6.0.0" + postcss-selector-parser "^6.1.0" + semver "^7.6.2" + svelte-eslint-parser "^0.43.0" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://mirrors.cloud.tencent.com/npm/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-scope@^8.2.0: + version "8.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/eslint-scope/-/eslint-scope-8.2.0.tgz" + integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://mirrors.cloud.tencent.com/npm/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0-0 || ^9.0.0-0", "eslint@^8.57.0 || ^9.0.0", eslint@^9.7.0, eslint@>=6.0.0, eslint@>=7.0.0: + version "9.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/eslint/-/eslint-9.16.0.tgz" + integrity sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.19.0" + "@eslint/core" "^0.9.0" + "@eslint/eslintrc" "^3.2.0" + "@eslint/js" "9.16.0" + "@eslint/plugin-kit" "^0.2.3" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.1" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.5" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.2.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + +esm-env@^1.2.1: + version "1.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/esm-env/-/esm-env-1.2.1.tgz" + integrity sha512-U9JedYYjCnadUlXk7e1Kr+aENQhtUaoaV9+gZm1T8LC/YBAPJx3NSPIAurFOC0U5vrdSevnUJS2/wUVxGwPhng== + +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/espree/-/espree-10.3.0.tgz" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== + dependencies: + acorn "^8.14.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.0" + +espree@^9.6.1: + version "9.6.1" + resolved "https://mirrors.cloud.tencent.com/npm/espree/-/espree-9.6.1.tgz" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.5.0: + version "1.6.0" + resolved "https://mirrors.cloud.tencent.com/npm/esquery/-/esquery-1.6.0.tgz" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrap@^1.2.3: + version "1.2.3" + resolved "https://mirrors.cloud.tencent.com/npm/esrap/-/esrap-1.2.3.tgz" + integrity sha512-ZlQmCCK+n7SGoqo7DnfKaP1sJZa49P01/dXzmjCASSo04p72w8EksT2NMK8CEX8DhKsfJXANioIw8VyHNsBfvQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + "@types/estree" "^1.0.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2, esutils@^2.0.3: + version "2.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.3.2: + version "3.3.2" + resolved "https://mirrors.cloud.tencent.com/npm/fast-glob/-/fast-glob-3.3.2.tgz" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://mirrors.cloud.tencent.com/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/fastparse/-/fastparse-1.1.2.tgz" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://mirrors.cloud.tencent.com/npm/fastq/-/fastq-1.17.1.tgz" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fdir@^6.2.0: + version "6.4.2" + resolved "https://mirrors.cloud.tencent.com/npm/fdir/-/fdir-6.4.2.tgz" + integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ== + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/file-entry-cache/-/file-entry-cache-8.0.0.tgz" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/fill-range/-/fill-range-7.1.1.tgz" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/flat-cache/-/flat-cache-4.0.1.tgz" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.2" + resolved "https://mirrors.cloud.tencent.com/npm/flatted/-/flatted-3.3.2.tgz" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://mirrors.cloud.tencent.com/npm/follow-redirects/-/follow-redirects-1.15.9.tgz" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +foreground-child@^3.1.0: + version "3.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/foreground-child/-/foreground-child-3.3.0.tgz" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/form-data/-/form-data-4.0.1.tgz" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://mirrors.cloud.tencent.com/npm/fraction.js/-/fraction.js-4.3.7.tgz" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^10.3.10: + version "10.4.5" + resolved "https://mirrors.cloud.tencent.com/npm/glob/-/glob-10.4.5.tgz" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +globals@^14.0.0: + version "14.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/globals/-/globals-14.0.0.tgz" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globals@^15.0.0: + version "15.13.0" + resolved "https://mirrors.cloud.tencent.com/npm/globals/-/globals-15.13.0.tgz" + integrity sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g== + +globalyzer@0.1.0: + version "0.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/globalyzer/-/globalyzer-0.1.0.tgz" + integrity sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q== + +globrex@^0.1.2: + version "0.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/globrex/-/globrex-0.1.2.tgz" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +guess-json-indent@2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/guess-json-indent/-/guess-json-indent-2.0.0.tgz" + integrity sha512-3Tm6R43KhtZWEVSHZnFmYMV9+gf3Vu0HXNNYtPVk2s7o8eGwYlJPHrjLtYw/7HBc10YxV+bfzKMuOf24z5qFng== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +hasown@^2.0.2: + version "2.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/hasown/-/hasown-2.0.2.tgz" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://mirrors.cloud.tencent.com/npm/ignore/-/ignore-5.3.2.tgz" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +ignore@5.3.1: + version "5.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/ignore/-/ignore-5.3.1.tgz" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-meta-resolve@^4.1.0: + version "4.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz" + integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://mirrors.cloud.tencent.com/npm/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inherits@^2.0.1: + version "2.0.4" + resolved "https://mirrors.cloud.tencent.com/npm/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.13.0: + version "2.15.1" + resolved "https://mirrors.cloud.tencent.com/npm/is-core-module/-/is-core-module-2.15.1.tgz" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + dependencies: + hasown "^2.0.2" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-reference@^3.0.3: + version "3.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/is-reference/-/is-reference-3.0.3.tgz" + integrity sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw== + dependencies: + "@types/estree" "^1.0.6" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://mirrors.cloud.tencent.com/npm/jackspeak/-/jackspeak-3.4.3.tgz" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jiti@*, jiti@^1.21.6: + version "1.21.6" + resolved "https://mirrors.cloud.tencent.com/npm/jiti/-/jiti-1.21.6.tgz" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@2.2.3: + version "2.2.3" + resolved "https://mirrors.cloud.tencent.com/npm/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonwebtoken@^9.0.2: + version "9.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/jwa/-/jwa-1.4.1.tgz" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://mirrors.cloud.tencent.com/npm/jws/-/jws-3.2.2.tgz" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +keyv@^4.5.4: + version "4.5.4" + resolved "https://mirrors.cloud.tencent.com/npm/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kleur@^4.1.5: + version "4.1.5" + resolved "https://mirrors.cloud.tencent.com/npm/kleur/-/kleur-4.1.5.tgz" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +klinecharts@^10.0.0-alpha1: + version "10.0.0-alpha1" + resolved "https://mirrors.cloud.tencent.com/npm/klinecharts/-/klinecharts-10.0.0-alpha1.tgz" + integrity sha512-eE56BCuiZT5ookumWiYvoCrTooWbjnPd0FhGi0PyaIWjAR+sT6bDrC50XVoT7ztOZ80ZUeieEh3yW2kRSRgeGA== + +known-css-properties@^0.35.0: + version "0.35.0" + resolved "https://mirrors.cloud.tencent.com/npm/known-css-properties/-/known-css-properties-0.35.0.tgz" + integrity sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@^2.0.5, lilconfig@^2.1.0: + version "2.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/lilconfig/-/lilconfig-2.1.0.tgz" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lilconfig@^3.0.0: + version "3.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/lilconfig/-/lilconfig-3.1.2.tgz" + integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://mirrors.cloud.tencent.com/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-character@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/locate-character/-/locate-character-3.0.0.tgz" + integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.includes/-/lodash.includes-4.3.0.tgz" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.isstring/-/lodash.isstring-4.0.1.tgz" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/lodash.once/-/lodash.once-4.1.1.tgz" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://mirrors.cloud.tencent.com/npm/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://mirrors.cloud.tencent.com/npm/lru-cache/-/lru-cache-10.4.3.tgz" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +"lru-cache@npm:@wolfy1339/lru-cache@^11.0.2-patch.1": + version "11.0.2-patch.1" + resolved "https://mirrors.cloud.tencent.com/npm/@wolfy1339/lru-cache/-/lru-cache-11.0.2-patch.1.tgz" + integrity sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA== + +magic-string@^0.30.11, magic-string@^0.30.12, magic-string@^0.30.5: + version "0.30.14" + resolved "https://mirrors.cloud.tencent.com/npm/magic-string/-/magic-string-0.30.14.tgz" + integrity sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + +merge2@^1.3.0: + version "1.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4, micromatch@^4.0.8: + version "4.0.8" + resolved "https://mirrors.cloud.tencent.com/npm/micromatch/-/micromatch-4.0.8.tgz" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://mirrors.cloud.tencent.com/npm/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://mirrors.cloud.tencent.com/npm/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.4: + version "9.0.5" + resolved "https://mirrors.cloud.tencent.com/npm/minimatch/-/minimatch-9.0.5.tgz" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/minipass/-/minipass-7.1.2.tgz" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +mri@^1.1.0: + version "1.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/mri/-/mri-1.2.0.tgz" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + +mrmime@^2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/mrmime/-/mrmime-2.0.0.tgz" + integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== + +ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://mirrors.cloud.tencent.com/npm/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +murmurhash3js@^3.0.1: + version "3.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/murmurhash3js/-/murmurhash3js-3.0.1.tgz" + integrity sha512-KL8QYUaxq7kUbcl0Yto51rMcYt7E/4N4BG3/c96Iqw1PQrTRspu8Cpx4TZ4Nunib1d4bEkIH3gjCYlP2RLBdow== + +mz@^2.7.0: + version "2.7.0" + resolved "https://mirrors.cloud.tencent.com/npm/mz/-/mz-2.7.0.tgz" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.7: + version "3.3.8" + resolved "https://mirrors.cloud.tencent.com/npm/nanoid/-/nanoid-3.3.8.tgz" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-fetch-native@^1.6.4: + version "1.6.4" + resolved "https://mirrors.cloud.tencent.com/npm/node-fetch-native/-/node-fetch-native-1.6.4.tgz" + integrity sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ== + +node-releases@^2.0.18: + version "2.0.18" + resolved "https://mirrors.cloud.tencent.com/npm/node-releases/-/node-releases-2.0.18.tgz" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/normalize-range/-/normalize-range-0.1.2.tgz" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/object-hash/-/object-hash-3.0.0.tgz" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +octokit@3.1.2: + version "3.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/octokit/-/octokit-3.1.2.tgz" + integrity sha512-MG5qmrTL5y8KYwFgE1A4JWmgfQBaIETE/lOlfwNYx1QOtCQHGVxkRJmdUJltFc1HVn73d61TlMhMyNTOtMl+ng== + dependencies: + "@octokit/app" "^14.0.2" + "@octokit/core" "^5.0.0" + "@octokit/oauth-app" "^6.0.0" + "@octokit/plugin-paginate-graphql" "^4.0.0" + "@octokit/plugin-paginate-rest" "^9.0.0" + "@octokit/plugin-rest-endpoint-methods" "^10.0.0" + "@octokit/plugin-retry" "^6.0.0" + "@octokit/plugin-throttling" "^8.0.0" + "@octokit/request-error" "^5.0.0" + "@octokit/types" "^12.0.0" + +ofetch@^1.4.1: + version "1.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/ofetch/-/ofetch-1.4.1.tgz" + integrity sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw== + dependencies: + destr "^2.0.3" + node-fetch-native "^1.6.4" + ufo "^1.5.4" + +once@^1.4.0: + version "1.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://mirrors.cloud.tencent.com/npm/optionator/-/optionator-0.9.4.tgz" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +pako@1.0.11: + version "1.0.11" + resolved "https://mirrors.cloud.tencent.com/npm/pako/-/pako-1.0.11.tgz" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +papaparse@^5.4.1: + version "5.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/papaparse/-/papaparse-5.4.1.tgz" + integrity sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://mirrors.cloud.tencent.com/npm/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://mirrors.cloud.tencent.com/npm/path-scurry/-/path-scurry-1.11.1.tgz" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +picocolors@^1, picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/picocolors/-/picocolors-1.1.1.tgz" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4: + version "2.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^2.2.1: + version "2.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +"picomatch@^3 || ^4": + version "4.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/picomatch/-/picomatch-4.0.2.tgz" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +pify@^2.3.0: + version "2.3.0" + resolved "https://mirrors.cloud.tencent.com/npm/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@5.0.0: + version "5.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/pify/-/pify-5.0.0.tgz" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pirates@^4.0.1: + version "4.0.6" + resolved "https://mirrors.cloud.tencent.com/npm/pirates/-/pirates-4.0.6.tgz" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-import/-/postcss-import-15.1.0.tgz" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4, postcss-js@^4.0.1: + version "4.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-js/-/postcss-js-4.0.1.tgz" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^3.1.4: + version "3.1.4" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-load-config/-/postcss-load-config-3.1.4.tgz" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== + dependencies: + lilconfig "^2.0.5" + yaml "^1.10.2" + +postcss-load-config@^4.0.2: + version "4.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-load-config/-/postcss-load-config-4.0.2.tgz" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== + dependencies: + lilconfig "^3.0.0" + yaml "^2.3.4" + +postcss-nested@^6.2.0: + version "6.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-nested/-/postcss-nested-6.2.0.tgz" + integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== + dependencies: + postcss-selector-parser "^6.1.1" + +postcss-safe-parser@^6.0.0: + version "6.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz" + integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== + +postcss-scss@^4.0.9: + version "4.0.9" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-scss/-/postcss-scss-4.0.9.tgz" + integrity sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A== + +postcss-selector-parser@^6.1.0, postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: + version "6.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.3.3, postcss@^8.4.21, postcss@^8.4.29, postcss@^8.4.38, postcss@^8.4.39, postcss@^8.4.43, postcss@^8.4.47, postcss@^8.4.49, postcss@>=8.0.9: + version "8.4.49" + resolved "https://mirrors.cloud.tencent.com/npm/postcss/-/postcss-8.4.49.tgz" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +posthog-node@^4.0.1: + version "4.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/posthog-node/-/posthog-node-4.3.1.tgz" + integrity sha512-By9SEGZxBLC7GVyVb+HlJlpxM/xI4iLUgwtsBS8f4bZ0wqYKiNHoYcFEwMJnTM9xQcQZztr6dqLmsJ7jCv0vxA== + dependencies: + axios "^1.7.4" + rusha "^0.8.14" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-plugin-svelte@^3.2.6: + version "3.3.2" + resolved "https://mirrors.cloud.tencent.com/npm/prettier-plugin-svelte/-/prettier-plugin-svelte-3.3.2.tgz" + integrity sha512-kRPjH8wSj2iu+dO+XaUv4vD8qr5mdDmlak3IT/7AOgGIMRG86z/EHOLauFcClKEnOUf4A4nOA7sre5KrJD4Raw== + +prettier@^3.0.0, prettier@^3.3.2: + version "3.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/prettier/-/prettier-3.4.1.tgz" + integrity sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://mirrors.cloud.tencent.com/npm/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/read-cache/-/read-cache-1.0.0.tgz" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readdirp@^4.0.1: + version "4.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/readdirp/-/readdirp-4.0.2.tgz" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://mirrors.cloud.tencent.com/npm/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.1.7, resolve@^1.22.8: + version "1.22.8" + resolved "https://mirrors.cloud.tencent.com/npm/resolve/-/resolve-1.22.8.tgz" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://mirrors.cloud.tencent.com/npm/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rollup@^4.20.0: + version "4.28.0" + resolved "https://mirrors.cloud.tencent.com/npm/rollup/-/rollup-4.28.0.tgz" + integrity sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ== + dependencies: + "@types/estree" "1.0.6" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.28.0" + "@rollup/rollup-android-arm64" "4.28.0" + "@rollup/rollup-darwin-arm64" "4.28.0" + "@rollup/rollup-darwin-x64" "4.28.0" + "@rollup/rollup-freebsd-arm64" "4.28.0" + "@rollup/rollup-freebsd-x64" "4.28.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.28.0" + "@rollup/rollup-linux-arm-musleabihf" "4.28.0" + "@rollup/rollup-linux-arm64-gnu" "4.28.0" + "@rollup/rollup-linux-arm64-musl" "4.28.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.28.0" + "@rollup/rollup-linux-riscv64-gnu" "4.28.0" + "@rollup/rollup-linux-s390x-gnu" "4.28.0" + "@rollup/rollup-linux-x64-gnu" "4.28.0" + "@rollup/rollup-linux-x64-musl" "4.28.0" + "@rollup/rollup-win32-arm64-msvc" "4.28.0" + "@rollup/rollup-win32-ia32-msvc" "4.28.0" + "@rollup/rollup-win32-x64-msvc" "4.28.0" + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rusha@^0.8.14: + version "0.8.14" + resolved "https://mirrors.cloud.tencent.com/npm/rusha/-/rusha-0.8.14.tgz" + integrity sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA== + +sade@^1.7.4, sade@^1.8.1: + version "1.8.1" + resolved "https://mirrors.cloud.tencent.com/npm/sade/-/sade-1.8.1.tgz" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + +safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +semver@^7.5.4, semver@^7.6.0, semver@^7.6.2: + version "7.6.3" + resolved "https://mirrors.cloud.tencent.com/npm/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +set-cookie-parser@^2.6.0: + version "2.7.1" + resolved "https://mirrors.cloud.tencent.com/npm/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz" + integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== + +sha.js@2.4.11: + version "2.4.11" + resolved "https://mirrors.cloud.tencent.com/npm/sha.js/-/sha.js-2.4.11.tgz" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sirv@^3.0.0: + version "3.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/sirv/-/sirv-3.0.0.tgz" + integrity sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg== + dependencies: + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" + +solid-js@1.6.12: + version "1.6.12" + resolved "https://mirrors.cloud.tencent.com/npm/solid-js/-/solid-js-1.6.12.tgz" + integrity sha512-JFqRobfG3q5r1l4RYVOAukk6+FWtHpXGIjgh/GEsHKweN/kK+iHOtzUALE6+P5t/jIcSNeGiVitX8gmJg+cYvQ== + dependencies: + csstype "^3.1.0" + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://mirrors.cloud.tencent.com/npm/source-map-js/-/source-map-js-1.2.1.tgz" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://mirrors.cloud.tencent.com/npm/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0: + version "4.2.3" + resolved "https://mirrors.cloud.tencent.com/npm/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/strip-ansi/-/strip-ansi-7.1.0.tgz" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +sucrase@^3.35.0: + version "3.35.0" + resolved "https://mirrors.cloud.tencent.com/npm/sucrase/-/sucrase-3.35.0.tgz" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "^10.3.10" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svelte-check@^4.0.0: + version "4.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/svelte-check/-/svelte-check-4.1.0.tgz" + integrity sha512-AflEZYqI578KuDZcpcorPSf597LStxlkN7XqXi38u09zlHODVKd7c+7OuubGzbhgGRUqNTdQCZ+Ga96iRXEf2g== + dependencies: + "@jridgewell/trace-mapping" "^0.3.25" + chokidar "^4.0.1" + fdir "^6.2.0" + picocolors "^1.0.0" + sade "^1.7.4" + +svelte-eslint-parser@^0.43.0: + version "0.43.0" + resolved "https://mirrors.cloud.tencent.com/npm/svelte-eslint-parser/-/svelte-eslint-parser-0.43.0.tgz" + integrity sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA== + dependencies: + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + postcss "^8.4.39" + postcss-scss "^4.0.9" + +svelte-persisted-store@^0.12.0: + version "0.12.0" + resolved "https://mirrors.cloud.tencent.com/npm/svelte-persisted-store/-/svelte-persisted-store-0.12.0.tgz" + integrity sha512-BdBQr2SGSJ+rDWH8/aEV5GthBJDapVP0GP3fuUCA7TjYG5ctcB+O9Mj9ZC0+Jo1oJMfZUd1y9H68NFRR5MyIJA== + +"svelte@^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0", "svelte@^3.37.0 || ^4.0.0 || ^5.0.0", "svelte@^3.48.0 || ^4 || ^5", "svelte@^4.0.0 || ^5.0.0-next.0", svelte@^5.0.0, "svelte@^5.0.0 || ^5.0.0-next.1 || ^5.0.0-rc.1", "svelte@^5.0.0-next.96 || ^5.0.0": + version "5.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/svelte/-/svelte-5.3.1.tgz" + integrity sha512-Y6PXppQhIZZ0HLZKj6UMV/VZPJbHiK98K8A5M7mJ+PGrz4erUmuDRUa8l7aw4La++Vl51YWzLUuuB0FZ7JPfnw== + dependencies: + "@ampproject/remapping" "^2.3.0" + "@jridgewell/sourcemap-codec" "^1.5.0" + "@types/estree" "^1.0.5" + acorn "^8.12.1" + acorn-typescript "^1.4.13" + aria-query "^5.3.1" + axobject-query "^4.1.0" + esm-env "^1.2.1" + esrap "^1.2.3" + is-reference "^3.0.3" + locate-character "^3.0.0" + magic-string "^0.30.11" + zimmerframe "^1.1.2" + +tailwindcss@^3.4.15: + version "3.4.15" + resolved "https://mirrors.cloud.tencent.com/npm/tailwindcss/-/tailwindcss-3.4.15.tgz" + integrity sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.6.0" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.3.2" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.21.6" + lilconfig "^2.1.0" + micromatch "^4.0.8" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.1.1" + postcss "^8.4.47" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.2" + postcss-nested "^6.2.0" + postcss-selector-parser "^6.1.2" + resolve "^1.22.8" + sucrase "^3.35.0" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://mirrors.cloud.tencent.com/npm/thenify-all/-/thenify-all-1.6.0.tgz" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://mirrors.cloud.tencent.com/npm/thenify/-/thenify-3.3.1.tgz" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +throttle-debounce@^5.0.0: + version "5.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/throttle-debounce/-/throttle-debounce-5.0.2.tgz" + integrity sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A== + +tiny-glob@^0.2.9: + version "0.2.9" + resolved "https://mirrors.cloud.tencent.com/npm/tiny-glob/-/tiny-glob-0.2.9.tgz" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== + dependencies: + globalyzer "0.1.0" + globrex "^0.1.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +totalist@^3.0.0: + version "3.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/totalist/-/totalist-3.0.1.tgz" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== + +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://mirrors.cloud.tencent.com/npm/ts-api-utils/-/ts-api-utils-1.4.3.tgz" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://mirrors.cloud.tencent.com/npm/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://mirrors.cloud.tencent.com/npm/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +typescript-eslint@^8.0.0: + version "8.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/typescript-eslint/-/typescript-eslint-8.16.0.tgz" + integrity sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ== + dependencies: + "@typescript-eslint/eslint-plugin" "8.16.0" + "@typescript-eslint/parser" "8.16.0" + "@typescript-eslint/utils" "8.16.0" + +typescript@^5.0.0, typescript@>=4.2.0, typescript@>=5.0.0: + version "5.7.2" + resolved "https://mirrors.cloud.tencent.com/npm/typescript/-/typescript-5.7.2.tgz" + integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== + +typescript@5.2.2: + version "5.2.2" + resolved "https://mirrors.cloud.tencent.com/npm/typescript/-/typescript-5.2.2.tgz" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + +ufo@^1.5.4: + version "1.5.4" + resolved "https://mirrors.cloud.tencent.com/npm/ufo/-/ufo-1.5.4.tgz" + integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== + +"ui@file:": + version "0.0.1" + resolved "file:" + dependencies: + "@inlang/paraglide-sveltekit" "0.12.1" + "@sveltejs/adapter-static" "^3.0.6" + "@types/lodash" "^4.17.13" + dayjs "^1.11.13" + klinecharts "^10.0.0-alpha1" + lodash "^4.17.21" + ofetch "^1.4.1" + papaparse "^5.4.1" + svelte-persisted-store "^0.12.0" + ui "file:" + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://mirrors.cloud.tencent.com/npm/undici-types/-/undici-types-6.20.0.tgz" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + +universal-github-app-jwt@^1.1.2: + version "1.2.0" + resolved "https://mirrors.cloud.tencent.com/npm/universal-github-app-jwt/-/universal-github-app-jwt-1.2.0.tgz" + integrity sha512-dncpMpnsKBk0eetwfN8D8OUHGfiDhhJ+mtsbMl+7PfW7mYjiH8LIcqRmYMtzYLgSh47HjfdBtrBwIQ/gizKR3g== + dependencies: + "@types/jsonwebtoken" "^9.0.0" + jsonwebtoken "^9.0.2" + +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://mirrors.cloud.tencent.com/npm/universal-user-agent/-/universal-user-agent-6.0.1.tgz" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== + +unplugin@^1.14.1: + version "1.16.0" + resolved "https://mirrors.cloud.tencent.com/npm/unplugin/-/unplugin-1.16.0.tgz" + integrity sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ== + dependencies: + acorn "^8.14.0" + webpack-virtual-modules "^0.6.2" + +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://mirrors.cloud.tencent.com/npm/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://mirrors.cloud.tencent.com/npm/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +"vite@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", vite@^5.0.0, vite@^5.0.3, "vite@^5.0.3 || ^6.0.0": + version "5.4.11" + resolved "https://mirrors.cloud.tencent.com/npm/vite/-/vite-5.4.11.tgz" + integrity sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q== + dependencies: + esbuild "^0.21.3" + postcss "^8.4.43" + rollup "^4.20.0" + optionalDependencies: + fsevents "~2.3.3" + +vitefu@^1.0.3: + version "1.0.4" + resolved "https://mirrors.cloud.tencent.com/npm/vitefu/-/vitefu-1.0.4.tgz" + integrity sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow== + +webpack-virtual-modules@^0.6.2: + version "0.6.2" + resolved "https://mirrors.cloud.tencent.com/npm/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz" + integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== + +which@^2.0.1: + version "2.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://mirrors.cloud.tencent.com/npm/word-wrap/-/word-wrap-1.2.5.tgz" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://mirrors.cloud.tencent.com/npm/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://mirrors.cloud.tencent.com/npm/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yaml@^1.10.2: + version "1.10.2" + resolved "https://mirrors.cloud.tencent.com/npm/yaml/-/yaml-1.10.2.tgz" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yaml@^2.3.4: + version "2.6.1" + resolved "https://mirrors.cloud.tencent.com/npm/yaml/-/yaml-2.6.1.tgz" + integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://mirrors.cloud.tencent.com/npm/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zimmerframe@^1.1.2: + version "1.1.2" + resolved "https://mirrors.cloud.tencent.com/npm/zimmerframe/-/zimmerframe-1.1.2.tgz" + integrity sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==