神代綺凛 commited on
Commit
b272e20
1 Parent(s): dbbebc7

feat: huggingface

Browse files
.eslintignore ADDED
@@ -0,0 +1 @@
 
 
1
+ dist
.github/workflows/huggingface.yml ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Sync to Hugging Face hub
2
+ on:
3
+ push:
4
+ branches: [master]
5
+ workflow_dispatch:
6
+
7
+ jobs:
8
+ sync-to-hub:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout
12
+ uses: actions/checkout@v4
13
+ with:
14
+ fetch-depth: 0
15
+ - name: Config readme
16
+ run: |
17
+ rm README.md
18
+ mv README.HF.md README.md
19
+ - name: Commit
20
+ uses: zwaldowski/git-commit-action@v1
21
+ with:
22
+ commit_message: "chore: config"
23
+ - name: Push to hub
24
+ env:
25
+ HF_TOKEN: ${{ secrets.HF_TOKEN }}
26
+ HF_USERNAME: ${{ secrets.HF_USERNAME }}
27
+ HF_SPACE_NAME: ${{ secrets.HF_SPACE_NAME }}
28
+ run: git push -f https://${HF_USERNAME}:${HF_TOKEN}@huggingface.co/spaces/${HF_USERNAME}/${HF_SPACE_NAME} master:main
.gitignore CHANGED
@@ -1,5 +1,3 @@
1
- .vercel/output
2
-
3
  # Logs
4
  logs
5
  *.log
 
 
 
1
  # Logs
2
  logs
3
  *.log
Dockerfile ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM node:20-alpine as build
2
+
3
+ WORKDIR /app
4
+
5
+ COPY . .
6
+
7
+ RUN yarn --frozen-lockfile \
8
+ && yarn build
9
+
10
+
11
+ FROM node:20-alpine
12
+
13
+ WORKDIR /app
14
+
15
+ COPY --from=build /app/dist .
16
+
17
+ RUN chmod -R 777 /app
18
+
19
+ CMD ["node", "index.js"]
README.HF.md ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Bilibili QR Login
3
+ emoji: 🌐
4
+ colorFrom: blue
5
+ colorTo: pink
6
+ sdk: docker
7
+ app_port: 3000
8
+ pinned: false
9
+ ---
README.md CHANGED
@@ -2,8 +2,6 @@
2
 
3
  扫码登录获取B站 cookie,用于各种开发场景
4
 
5
- Vercel 部署:[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FTsuk1ko%2Fbilibili-qr-login)
6
-
7
  ### TODO
8
 
9
  - [ ] iframe / 窗口 模式
 
2
 
3
  扫码登录获取B站 cookie,用于各种开发场景
4
 
 
 
5
  ### TODO
6
 
7
  - [ ] iframe / 窗口 模式
package.json CHANGED
@@ -5,7 +5,8 @@
5
  "license": "MIT",
6
  "scripts": {
7
  "dev": "vite",
8
- "build": "vue-tsc && vite build",
 
9
  "lint": "eslint .",
10
  "lint:fix": "eslint . --fix"
11
  },
@@ -17,6 +18,7 @@
17
  "@types/qrcode": "^1.5.5",
18
  "@typescript-eslint/eslint-plugin": "^6.17.0",
19
  "@typescript-eslint/parser": "^6.17.0",
 
20
  "@vitejs/plugin-vue": "^5.0.2",
21
  "@vue/eslint-config-prettier": "^9.0.0",
22
  "@vue/eslint-config-typescript": "^12.0.0",
@@ -33,8 +35,7 @@
33
  "qrcode": "^1.5.3",
34
  "tsx": "^4.7.0",
35
  "typescript": "^5.3.3",
36
- "vite": "^5.0.10",
37
- "vite-plugin-vercel": "^2.0.0",
38
  "vite-svg-loader": "^5.1.0",
39
  "vue": "^3.4.5",
40
  "vue-tsc": "^1.8.27",
 
5
  "license": "MIT",
6
  "scripts": {
7
  "dev": "vite",
8
+ "build": "vue-tsc && vite build && ncc build ./server/index.ts -m -o dist",
9
+ "preview": "cd dist && node index.js",
10
  "lint": "eslint .",
11
  "lint:fix": "eslint . --fix"
12
  },
 
18
  "@types/qrcode": "^1.5.5",
19
  "@typescript-eslint/eslint-plugin": "^6.17.0",
20
  "@typescript-eslint/parser": "^6.17.0",
21
+ "@vercel/ncc": "^0.38.1",
22
  "@vitejs/plugin-vue": "^5.0.2",
23
  "@vue/eslint-config-prettier": "^9.0.0",
24
  "@vue/eslint-config-typescript": "^12.0.0",
 
35
  "qrcode": "^1.5.3",
36
  "tsx": "^4.7.0",
37
  "typescript": "^5.3.3",
38
+ "vite": "^5.0.11",
 
39
  "vite-svg-loader": "^5.1.0",
40
  "vue": "^3.4.5",
41
  "vue-tsc": "^1.8.27",
_api/qr.ts → server/app.ts RENAMED
@@ -1,5 +1,4 @@
1
  import { Hono } from 'hono';
2
- import { handle } from 'hono/vercel';
3
  import { streamSSE } from 'hono/streaming';
4
  import type { StreamingApi } from 'hono/utils/stream';
5
 
@@ -18,11 +17,9 @@ enum PollQrResultCode {
18
 
19
  const keepPollQrResultCode = new Set([PollQrResultCode.NOT_CONFIRMED, PollQrResultCode.NOT_SCANNED]);
20
 
21
- export const runtime = 'edge';
22
 
23
- export const app = new Hono().basePath('/api');
24
-
25
- app.get('/qr', c => {
26
  if (process.env.NODE_ENV !== 'development') {
27
  try {
28
  const referer = c.req.header('Referer');
@@ -49,7 +46,7 @@ app.get('/qr', c => {
49
  const qr = new LoginQr(c.req.header('User-Agent'), lastEventID);
50
  if (!lastEventID) {
51
  const genRes = await qr.generate();
52
- console.log('generate', Date.now());
53
  await stream.writeSSE({ data: JSON.stringify(genRes), event: SSEEvent.GENERATE, id: genRes.key });
54
  if (genRes.code !== 0) {
55
  await stream.writeSSE({ data: '', event: SSEEvent.END });
@@ -61,7 +58,7 @@ app.get('/qr', c => {
61
 
62
  // 轮询
63
  for (let i = 0; i < 100 && !streamClosed; i++) {
64
- console.log('poll', i, Date.now());
65
  const result = await qr.poll();
66
  await stream.writeSSE({ data: JSON.stringify(result), event: SSEEvent.POLL });
67
  if (!keepPollQrResultCode.has(result.code)) {
@@ -77,8 +74,6 @@ app.get('/qr', c => {
77
  });
78
  });
79
 
80
- export const GET = handle(app);
81
-
82
  interface GenerateQrResp {
83
  code: number;
84
  message: string;
@@ -109,10 +104,10 @@ interface PollQrResult {
109
  }
110
 
111
  class LoginQr {
112
- private readonly header: Record<string, string | undefined> = {};
113
 
114
  public constructor(
115
- userAgent?: string,
116
  private key = '',
117
  ) {
118
  this.header = {
 
1
  import { Hono } from 'hono';
 
2
  import { streamSSE } from 'hono/streaming';
3
  import type { StreamingApi } from 'hono/utils/stream';
4
 
 
17
 
18
  const keepPollQrResultCode = new Set([PollQrResultCode.NOT_CONFIRMED, PollQrResultCode.NOT_SCANNED]);
19
 
20
+ export const app = new Hono();
21
 
22
+ app.get('/api/qr', c => {
 
 
23
  if (process.env.NODE_ENV !== 'development') {
24
  try {
25
  const referer = c.req.header('Referer');
 
46
  const qr = new LoginQr(c.req.header('User-Agent'), lastEventID);
47
  if (!lastEventID) {
48
  const genRes = await qr.generate();
49
+ console.log(Date.now(), 'generate');
50
  await stream.writeSSE({ data: JSON.stringify(genRes), event: SSEEvent.GENERATE, id: genRes.key });
51
  if (genRes.code !== 0) {
52
  await stream.writeSSE({ data: '', event: SSEEvent.END });
 
58
 
59
  // 轮询
60
  for (let i = 0; i < 100 && !streamClosed; i++) {
61
+ console.log(Date.now(), 'poll', i);
62
  const result = await qr.poll();
63
  await stream.writeSSE({ data: JSON.stringify(result), event: SSEEvent.POLL });
64
  if (!keepPollQrResultCode.has(result.code)) {
 
74
  });
75
  });
76
 
 
 
77
  interface GenerateQrResp {
78
  code: number;
79
  message: string;
 
104
  }
105
 
106
  class LoginQr {
107
+ private readonly header: Record<string, string> = {};
108
 
109
  public constructor(
110
+ userAgent = '',
111
  private key = '',
112
  ) {
113
  this.header = {
server/dev.ts ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ import { serve } from '@hono/node-server';
2
+ import { app } from './app';
3
+
4
+ serve(app, () => {
5
+ console.log('API server start running.');
6
+ });
server/index.ts CHANGED
@@ -1,10 +1,9 @@
1
  import { serve } from '@hono/node-server';
2
- import { Hono } from 'hono';
3
- import { app as qr } from '../_api/qr';
4
 
5
- const app = new Hono();
6
- app.route('/', qr);
7
 
8
  serve(app, () => {
9
- console.log('API server start running.');
10
  });
 
1
  import { serve } from '@hono/node-server';
2
+ import { serveStatic } from '@hono/node-server/serve-static';
3
+ import { app } from './app';
4
 
5
+ app.get('*', serveStatic({ root: './static' }));
 
6
 
7
  serve(app, () => {
8
+ console.log('Server start.');
9
  });
server/tsconfig.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "skipLibCheck": true,
4
+ "target": "ESNext",
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "allowSyntheticDefaultImports": true,
8
+ "isolatedModules": true,
9
+
10
+ /* Linting */
11
+ "strict": true,
12
+ "noUnusedParameters": true,
13
+ "noFallthroughCasesInSwitch": true
14
+ },
15
+ "include": ["**/*.ts"]
16
+ }
server/utils.ts CHANGED
@@ -1,9 +1,10 @@
1
  import { createServer } from 'net';
2
  import nodemon from 'nodemon';
 
3
 
4
  const checkPortInUse = (port = 3000) =>
5
  new Promise<boolean>(resolve => {
6
- const tester = createServer()
7
  .once('error', (err: any) => {
8
  resolve(err.code === 'EADDRINUSE');
9
  })
@@ -14,9 +15,9 @@ const checkPortInUse = (port = 3000) =>
14
  export const startApiServer = async () => {
15
  if (await checkPortInUse()) return;
16
  nodemon({
17
- script: 'server/index.ts',
18
  ext: 'ts',
19
- watch: ['_api', 'server'],
20
  execMap: {
21
  ts: 'tsx',
22
  },
 
1
  import { createServer } from 'net';
2
  import nodemon from 'nodemon';
3
+ import type { Server } from 'net';
4
 
5
  const checkPortInUse = (port = 3000) =>
6
  new Promise<boolean>(resolve => {
7
+ const tester: Server = createServer()
8
  .once('error', (err: any) => {
9
  resolve(err.code === 'EADDRINUSE');
10
  })
 
15
  export const startApiServer = async () => {
16
  if (await checkPortInUse()) return;
17
  nodemon({
18
+ script: 'server/dev.ts',
19
  ext: 'ts',
20
+ watch: ['server'],
21
  execMap: {
22
  ts: 'tsx',
23
  },
tsconfig.node.json CHANGED
@@ -2,10 +2,9 @@
2
  "compilerOptions": {
3
  "composite": true,
4
  "skipLibCheck": true,
5
- "target": "ES2022",
6
  "module": "ESNext",
7
  "moduleResolution": "bundler",
8
  "allowSyntheticDefaultImports": true
9
  },
10
- "include": ["vite.config.ts", "_api/**/*.ts", "server/**/*.ts"]
11
  }
 
2
  "compilerOptions": {
3
  "composite": true,
4
  "skipLibCheck": true,
 
5
  "module": "ESNext",
6
  "moduleResolution": "bundler",
7
  "allowSyntheticDefaultImports": true
8
  },
9
+ "include": ["vite.config.ts", "server/**/*.ts"]
10
  }
vercel.json DELETED
@@ -1,5 +0,0 @@
1
- {
2
- "github": {
3
- "silent": true
4
- }
5
- }
 
 
 
 
 
 
vite.config.ts CHANGED
@@ -1,26 +1,20 @@
1
- import { rename } from 'fs/promises';
2
  import { defineConfig } from 'vite';
3
  import vue from '@vitejs/plugin-vue';
4
- import vercel from 'vite-plugin-vercel';
5
  import svgLoader from 'vite-svg-loader';
6
  import { startApiServer } from './server/utils';
7
- import type { ViteVercelConfig } from 'vite-plugin-vercel';
8
 
9
  // https://vitejs.dev/config/
10
  export default defineConfig(({ command }) => {
11
  if (command === 'serve') startApiServer();
12
  return {
13
- plugins: [vue(), svgLoader(), vercel()],
14
  server: {
15
  proxy: {
16
  '/api': 'http://127.0.0.1:3000',
17
  },
18
  },
19
- vercel: {
20
- prerender: async () => {
21
- await rename('dist', '.vercel/output/static');
22
- return {};
23
- },
24
- } as ViteVercelConfig,
25
  };
26
  });
 
 
1
  import { defineConfig } from 'vite';
2
  import vue from '@vitejs/plugin-vue';
 
3
  import svgLoader from 'vite-svg-loader';
4
  import { startApiServer } from './server/utils';
 
5
 
6
  // https://vitejs.dev/config/
7
  export default defineConfig(({ command }) => {
8
  if (command === 'serve') startApiServer();
9
  return {
10
+ plugins: [vue(), svgLoader()],
11
  server: {
12
  proxy: {
13
  '/api': 'http://127.0.0.1:3000',
14
  },
15
  },
16
+ build: {
17
+ outDir: 'dist/static',
18
+ },
 
 
 
19
  };
20
  });
yarn.lock CHANGED
@@ -7,35 +7,11 @@
7
  resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
8
  integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
9
 
10
- "@babel/helper-string-parser@^7.23.4":
11
- version "7.23.4"
12
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83"
13
- integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==
14
-
15
- "@babel/helper-validator-identifier@^7.22.20":
16
- version "7.22.20"
17
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
18
- integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
19
-
20
- "@babel/parser@^7.23.3", "@babel/parser@^7.23.6":
21
  version "7.23.6"
22
  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b"
23
  integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==
24
 
25
- "@babel/types@^7.23.3":
26
- version "7.23.6"
27
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd"
28
- integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==
29
- dependencies:
30
- "@babel/helper-string-parser" "^7.23.4"
31
- "@babel/helper-validator-identifier" "^7.22.20"
32
- to-fast-properties "^2.0.0"
33
-
34
- "@brillout/libassert@^0.5.8":
35
- version "0.5.8"
36
- resolved "https://registry.yarnpkg.com/@brillout/libassert/-/libassert-0.5.8.tgz#d0f78e5c0ee53aaae8c2aa675f0b0dfb544e32b0"
37
- integrity sha512-u/fu+jTRUdNdbLONGq1plCfh+k2/XjSbGVTfnF3rHnSPZd+ABWp0XinR5ifrFkyGOzMbzv8IiQ44lZ4U6ZGrGA==
38
-
39
  "@chenfengyuan/vue-qrcode@^2.0.0":
40
  version "2.0.0"
41
  resolved "https://registry.yarnpkg.com/@chenfengyuan/vue-qrcode/-/vue-qrcode-2.0.0.tgz#8cd01f6fc528d471680ebe812ec47c830aea7e63"
@@ -440,19 +416,10 @@
440
  resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
441
  integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
442
 
443
- "@vercel/build-utils@^7.2.2":
444
- version "7.4.1"
445
- resolved "https://registry.yarnpkg.com/@vercel/build-utils/-/build-utils-7.4.1.tgz#5274e79e6ec64606cf262bb43108e028212825cb"
446
- integrity sha512-Tg35Zl3r68h/Tg4TVb+gIVUKGsL5XVbtSI7gUYNZyq/811CVX7zlCV5ZHAmEkG7J5+nBoaUJc/eoYP6HkzcNIg==
447
-
448
- "@vercel/routing-utils@^3.0.0":
449
- version "3.1.0"
450
- resolved "https://registry.yarnpkg.com/@vercel/routing-utils/-/routing-utils-3.1.0.tgz#6a71903f4106006b2cb52add9d3b708b59acaaaf"
451
- integrity sha512-Ci5xTjVTJY/JLZXpCXpLehMft97i9fH34nu9PGav6DtwkVUF6TOPX86U0W0niQjMZ5n6/ZP0BwcJK2LOozKaGw==
452
- dependencies:
453
- path-to-regexp "6.1.0"
454
- optionalDependencies:
455
- ajv "^6.0.0"
456
 
457
  "@vitejs/plugin-vue@^5.0.2":
458
  version "5.0.2"
@@ -631,7 +598,7 @@ acorn@^8.9.0:
631
  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
632
  integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
633
 
634
- ajv@^6.0.0, ajv@^6.12.4:
635
  version "6.12.6"
636
  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
637
  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -1188,7 +1155,7 @@ es-to-primitive@^1.2.1:
1188
  is-date-object "^1.0.1"
1189
  is-symbol "^1.0.2"
1190
 
1191
- esbuild@^0.19.3, esbuild@^0.19.4, esbuild@~0.19.10:
1192
  version "0.19.11"
1193
  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96"
1194
  integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==
@@ -1395,14 +1362,6 @@ esutils@^2.0.2:
1395
  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
1396
  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
1397
 
1398
- eval@^0.1.8:
1399
- version "0.1.8"
1400
- resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85"
1401
- integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==
1402
- dependencies:
1403
- "@types/node" "*"
1404
- require-like ">= 0.1.1"
1405
-
1406
  eventemitter3@^5.0.1:
1407
  version "5.0.1"
1408
  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
@@ -2114,15 +2073,6 @@ magic-string@^0.30.5:
2114
  dependencies:
2115
  "@jridgewell/sourcemap-codec" "^1.4.15"
2116
 
2117
- magicast@^0.3.0:
2118
- version "0.3.2"
2119
- resolved "https://registry.yarnpkg.com/magicast/-/magicast-0.3.2.tgz#42dcade5573ed8f10f5540f9d04964e21dba9130"
2120
- integrity sha512-Fjwkl6a0syt9TFN0JSYpOybxiMCkYNEeOTnOTNRbjphirLakznZXAqrXgj/7GG3D1dvETONNwrBfinvAbpunDg==
2121
- dependencies:
2122
- "@babel/parser" "^7.23.3"
2123
- "@babel/types" "^7.23.3"
2124
- source-map-js "^1.0.2"
2125
-
2126
  make-dir@^2.1.0:
2127
  version "2.1.0"
2128
  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
@@ -2446,11 +2396,6 @@ path-parse@^1.0.7:
2446
  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
2447
  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
2448
 
2449
- path-to-regexp@6.1.0:
2450
- version "6.1.0"
2451
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.1.0.tgz#0b18f88b7a0ce0bfae6a25990c909ab86f512427"
2452
- integrity sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw==
2453
-
2454
  path-type@^4.0.0:
2455
  version "4.0.0"
2456
  resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
@@ -2571,11 +2516,6 @@ require-directory@^2.1.1:
2571
  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
2572
  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
2573
 
2574
- "require-like@>= 0.1.1":
2575
- version "0.1.2"
2576
- resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa"
2577
- integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==
2578
-
2579
  require-main-filename@^2.0.0:
2580
  version "2.0.0"
2581
  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
@@ -2942,11 +2882,6 @@ text-table@^0.2.0:
2942
  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
2943
  integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
2944
 
2945
- to-fast-properties@^2.0.0:
2946
- version "2.0.0"
2947
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
2948
- integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
2949
-
2950
  to-regex-range@^5.0.1:
2951
  version "5.0.1"
2952
  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -3084,20 +3019,6 @@ util-deprecate@^1.0.2:
3084
  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
3085
  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
3086
 
3087
- vite-plugin-vercel@^2.0.0:
3088
- version "2.0.0"
3089
- resolved "https://registry.yarnpkg.com/vite-plugin-vercel/-/vite-plugin-vercel-2.0.0.tgz#8b463eec1302f087438aebd0b1663829aa235562"
3090
- integrity sha512-Zyyz+RnZpfM6RZUlHXrf3/sGWUSPAWmME87tIONZ5Lezt4LgmYrX3l/9gYxWE7yFMqMIR5VCSGX0fy7ITPWD0Q==
3091
- dependencies:
3092
- "@brillout/libassert" "^0.5.8"
3093
- "@vercel/build-utils" "^7.2.2"
3094
- "@vercel/routing-utils" "^3.0.0"
3095
- esbuild "^0.19.4"
3096
- eval "^0.1.8"
3097
- fast-glob "^3.3.1"
3098
- magicast "^0.3.0"
3099
- zod "^3.22.4"
3100
-
3101
  vite-svg-loader@^5.1.0:
3102
  version "5.1.0"
3103
  resolved "https://registry.yarnpkg.com/vite-svg-loader/-/vite-svg-loader-5.1.0.tgz#b0b89bd8024bc0f707d0e8d7422446ac01576d94"
@@ -3105,10 +3026,10 @@ vite-svg-loader@^5.1.0:
3105
  dependencies:
3106
  svgo "^3.0.2"
3107
 
3108
- vite@^5.0.10:
3109
- version "5.0.10"
3110
- resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.10.tgz#1e13ef5c3cf5aa4eed81f5df6d107b3c3f1f6356"
3111
- integrity sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==
3112
  dependencies:
3113
  esbuild "^0.19.3"
3114
  postcss "^8.4.32"
@@ -3285,8 +3206,3 @@ yorkie@^2.0.0:
3285
  is-ci "^1.0.10"
3286
  normalize-path "^1.0.0"
3287
  strip-indent "^2.0.0"
3288
-
3289
- zod@^3.22.4:
3290
- version "3.22.4"
3291
- resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff"
3292
- integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==
 
7
  resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
8
  integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
9
 
10
+ "@babel/parser@^7.23.6":
 
 
 
 
 
 
 
 
 
 
11
  version "7.23.6"
12
  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b"
13
  integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  "@chenfengyuan/vue-qrcode@^2.0.0":
16
  version "2.0.0"
17
  resolved "https://registry.yarnpkg.com/@chenfengyuan/vue-qrcode/-/vue-qrcode-2.0.0.tgz#8cd01f6fc528d471680ebe812ec47c830aea7e63"
 
416
  resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
417
  integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
418
 
419
+ "@vercel/ncc@^0.38.1":
420
+ version "0.38.1"
421
+ resolved "https://registry.yarnpkg.com/@vercel/ncc/-/ncc-0.38.1.tgz#13f08738111e1d9e8a22fd6141f3590e54d9a60e"
422
+ integrity sha512-IBBb+iI2NLu4VQn3Vwldyi2QwaXt5+hTyh58ggAMoCGE6DJmPvwL3KPBWcJl1m9LYPChBLE980Jw+CS4Wokqxw==
 
 
 
 
 
 
 
 
 
423
 
424
  "@vitejs/plugin-vue@^5.0.2":
425
  version "5.0.2"
 
598
  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
599
  integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
600
 
601
+ ajv@^6.12.4:
602
  version "6.12.6"
603
  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
604
  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
 
1155
  is-date-object "^1.0.1"
1156
  is-symbol "^1.0.2"
1157
 
1158
+ esbuild@^0.19.3, esbuild@~0.19.10:
1159
  version "0.19.11"
1160
  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96"
1161
  integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==
 
1362
  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
1363
  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
1364
 
 
 
 
 
 
 
 
 
1365
  eventemitter3@^5.0.1:
1366
  version "5.0.1"
1367
  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
 
2073
  dependencies:
2074
  "@jridgewell/sourcemap-codec" "^1.4.15"
2075
 
 
 
 
 
 
 
 
 
 
2076
  make-dir@^2.1.0:
2077
  version "2.1.0"
2078
  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
 
2396
  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
2397
  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
2398
 
 
 
 
 
 
2399
  path-type@^4.0.0:
2400
  version "4.0.0"
2401
  resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
 
2516
  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
2517
  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
2518
 
 
 
 
 
 
2519
  require-main-filename@^2.0.0:
2520
  version "2.0.0"
2521
  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
 
2882
  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
2883
  integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
2884
 
 
 
 
 
 
2885
  to-regex-range@^5.0.1:
2886
  version "5.0.1"
2887
  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
 
3019
  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
3020
  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
3021
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3022
  vite-svg-loader@^5.1.0:
3023
  version "5.1.0"
3024
  resolved "https://registry.yarnpkg.com/vite-svg-loader/-/vite-svg-loader-5.1.0.tgz#b0b89bd8024bc0f707d0e8d7422446ac01576d94"
 
3026
  dependencies:
3027
  svgo "^3.0.2"
3028
 
3029
+ vite@^5.0.11:
3030
+ version "5.0.11"
3031
+ resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.11.tgz#31562e41e004cb68e1d51f5d2c641ab313b289e4"
3032
+ integrity sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==
3033
  dependencies:
3034
  esbuild "^0.19.3"
3035
  postcss "^8.4.32"
 
3206
  is-ci "^1.0.10"
3207
  normalize-path "^1.0.0"
3208
  strip-indent "^2.0.0"