├── .github ├── FUNDING.yml └── workflows │ ├── release.yml │ └── ci.yml ├── pnpm-workspace.yaml ├── .npmrc ├── .vscode └── settings.json ├── playground ├── integrity.txt ├── public │ └── favicon.ico ├── demo │ ├── test.js │ └── index.html ├── src │ ├── views │ │ ├── HomeView.vue │ │ └── AboutView.vue │ ├── assets │ │ ├── logo.svg │ │ ├── main.css │ │ └── base.css │ ├── main.js │ ├── components │ │ ├── icons │ │ │ ├── IconSupport.vue │ │ │ ├── IconTooling.vue │ │ │ ├── IconCommunity.vue │ │ │ ├── IconDocumentation.vue │ │ │ └── IconEcosystem.vue │ │ ├── HelloWorld.vue │ │ ├── WelcomeItem.vue │ │ └── TheWelcome.vue │ ├── stores │ │ └── counter.js │ ├── router │ │ └── index.js │ └── App.vue ├── index.html ├── README.md ├── bot.js ├── package.json ├── vite.config.js └── pnpm-lock.yaml ├── eslint.config.js ├── src ├── farm.ts ├── vite.ts ├── rollup.ts ├── rspack.ts ├── esbuild.ts ├── webpack.ts ├── astro.ts ├── types.ts ├── nuxt.ts ├── test.js └── index.ts ├── test └── index.test.ts ├── tsup.config.ts ├── tsconfig.json ├── LICENSE ├── .gitignore ├── package.json └── README.md /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [shengxj1] 2 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - playground 3 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | ignore-workspace-root-check=true 2 | shamefully-hoist=true 3 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "eslint.experimental.useFlatConfig": true 3 | } 4 | -------------------------------------------------------------------------------- /playground/integrity.txt: -------------------------------------------------------------------------------- 1 | 5a8bDdMgJ7U52l8v5VbeomQnTEcinroDVhCDWUhxWoFJCgNUIZE7XgsMXHC0yZN2 -------------------------------------------------------------------------------- /playground/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shengxj1/unplugin-sri/HEAD/playground/public/favicon.ico -------------------------------------------------------------------------------- /eslint.config.js: -------------------------------------------------------------------------------- 1 | import antfu from '@antfu/eslint-config' 2 | 3 | export default antfu({ 4 | type: 'lib', 5 | }) 6 | -------------------------------------------------------------------------------- /playground/demo/test.js: -------------------------------------------------------------------------------- 1 | document.write('hello world!1j'); 2 | 3 | 4 | // createHash('sha384').update('hello world!1j').digest('base64') -------------------------------------------------------------------------------- /src/farm.ts: -------------------------------------------------------------------------------- 1 | import { createFarmPlugin } from 'unplugin' 2 | import { unpluginFactory } from '.' 3 | 4 | export default createFarmPlugin(unpluginFactory) 5 | -------------------------------------------------------------------------------- /src/vite.ts: -------------------------------------------------------------------------------- 1 | import { createVitePlugin } from 'unplugin' 2 | import { unpluginFactory } from '.' 3 | 4 | export default createVitePlugin(unpluginFactory) 5 | -------------------------------------------------------------------------------- /src/rollup.ts: -------------------------------------------------------------------------------- 1 | import { createRollupPlugin } from 'unplugin' 2 | import { unpluginFactory } from '.' 3 | 4 | export default createRollupPlugin(unpluginFactory) 5 | -------------------------------------------------------------------------------- /src/rspack.ts: -------------------------------------------------------------------------------- 1 | import { createRspackPlugin } from 'unplugin' 2 | import { unpluginFactory } from '.' 3 | 4 | export default createRspackPlugin(unpluginFactory) 5 | -------------------------------------------------------------------------------- /src/esbuild.ts: -------------------------------------------------------------------------------- 1 | import { createEsbuildPlugin } from 'unplugin' 2 | import { unpluginFactory } from '.' 3 | 4 | export default createEsbuildPlugin(unpluginFactory) 5 | -------------------------------------------------------------------------------- /src/webpack.ts: -------------------------------------------------------------------------------- 1 | import { createWebpackPlugin } from 'unplugin' 2 | import { unpluginFactory } from '.' 3 | 4 | export default createWebpackPlugin(unpluginFactory) 5 | -------------------------------------------------------------------------------- /test/index.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | 3 | describe('index', () => { 4 | it('hi vitest', () => { 5 | expect(1).toBe(1) 6 | }) 7 | }) 8 | -------------------------------------------------------------------------------- /playground/src/views/HomeView.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import type { Options } from 'tsup' 2 | 3 | export default { 4 | entry: [ 5 | 'src/*.ts', 6 | ], 7 | clean: true, 8 | format: ['cjs', 'esm'], 9 | dts: true, 10 | cjsInterop: true, 11 | splitting: true, 12 | } 13 | -------------------------------------------------------------------------------- /playground/src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /playground/src/views/AboutView.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /playground/src/main.js: -------------------------------------------------------------------------------- 1 | import { createPinia } from 'pinia' 2 | 3 | import { createApp } from 'vue' 4 | import App from './App.vue' 5 | 6 | import router from './router' 7 | import './assets/main.css' 8 | 9 | const app = createApp(App) 10 | 11 | app.use(createPinia()) 12 | app.use(router) 13 | 14 | app.mount('#app') 15 | -------------------------------------------------------------------------------- /playground/src/components/icons/IconSupport.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2017", 4 | "lib": ["esnext", "DOM"], 5 | "module": "esnext", 6 | "moduleResolution": "node", 7 | "resolveJsonModule": true, 8 | "strict": true, 9 | "strictNullChecks": true, 10 | "esModuleInterop": true 11 | }, 12 | "exclude": ["dist", "eslint.config.js"] 13 | } 14 | -------------------------------------------------------------------------------- /src/astro.ts: -------------------------------------------------------------------------------- 1 | import type { Options } from './types' 2 | 3 | import unplugin from '.' 4 | 5 | export default (options: Options): any => ({ 6 | name: 'unplugin-sri', 7 | hooks: { 8 | 'astro:config:setup': async (astro: any) => { 9 | astro.config.vite.plugins ||= [] 10 | astro.config.vite.plugins.push(unplugin.vite(options)) 11 | }, 12 | }, 13 | }) 14 | -------------------------------------------------------------------------------- /playground/demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Document 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /playground/src/stores/counter.js: -------------------------------------------------------------------------------- 1 | import { defineStore } from 'pinia' 2 | import { computed, ref } from 'vue' 3 | 4 | export const useCounterStore = defineStore('counter', () => { 5 | const count = ref(0) 6 | const doubleCount = computed(() => count.value * 2) 7 | function increment() { 8 | count.value++ 9 | } 10 | 11 | return { count, doubleCount, increment } 12 | }) 13 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export interface Options { 2 | /** 3 | * 哈希算法,默认为 sha384 4 | * @default 'sha384' 5 | */ 6 | algorithm?: string 7 | 8 | /** 9 | * 要处理的文件扩展名 10 | * @default ['.js', '.css'] 11 | */ 12 | extensions?: string[] 13 | 14 | /** 15 | * 是否包含图片文件 16 | * @default false 17 | */ 18 | includeImages?: boolean 19 | 20 | /** 21 | * 插件执行完成后的回调函数 22 | * @default null 23 | */ 24 | onComplete?: () => Promise | void 25 | } 26 | -------------------------------------------------------------------------------- /playground/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v*' 7 | 8 | jobs: 9 | release: 10 | runs-on: ubuntu-latest 11 | permissions: 12 | contents: write 13 | steps: 14 | - uses: actions/checkout@v3 15 | with: 16 | fetch-depth: 0 17 | 18 | - uses: actions/setup-node@v3 19 | with: 20 | node-version: lts/* 21 | 22 | - run: npx changelogithub 23 | env: 24 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} 25 | -------------------------------------------------------------------------------- /playground/README.md: -------------------------------------------------------------------------------- 1 | # vue-project 2 | 3 | This template should help get you started developing with Vue 3 in Vite. 4 | 5 | ## Recommended IDE Setup 6 | 7 | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). 8 | 9 | ## Customize configuration 10 | 11 | See [Vite Configuration Reference](https://vite.dev/config/). 12 | 13 | ## Project Setup 14 | 15 | ```sh 16 | pnpm install 17 | ``` 18 | 19 | ### Compile and Hot-Reload for Development 20 | 21 | ```sh 22 | pnpm dev 23 | ``` 24 | 25 | ### Compile and Minify for Production 26 | 27 | ```sh 28 | pnpm build 29 | ``` 30 | -------------------------------------------------------------------------------- /src/nuxt.ts: -------------------------------------------------------------------------------- 1 | import type { Options } from './types' 2 | import { addVitePlugin, addWebpackPlugin, defineNuxtModule } from '@nuxt/kit' 3 | import vite from './vite' 4 | import webpack from './webpack' 5 | import '@nuxt/schema' 6 | 7 | export interface ModuleOptions extends Options { 8 | 9 | } 10 | 11 | export default defineNuxtModule({ 12 | meta: { 13 | name: 'nuxt-unplugin-sri', 14 | configKey: 'unpluginSRI', 15 | }, 16 | defaults: { 17 | // ...default options 18 | }, 19 | setup(options, _nuxt) { 20 | addVitePlugin(() => vite(options)) 21 | addWebpackPlugin(() => webpack(options)) 22 | 23 | // ... 24 | }, 25 | }) 26 | -------------------------------------------------------------------------------- /playground/src/assets/main.css: -------------------------------------------------------------------------------- 1 | @import './base.css'; 2 | 3 | #app { 4 | max-width: 1280px; 5 | margin: 0 auto; 6 | padding: 2rem; 7 | font-weight: normal; 8 | } 9 | 10 | a, 11 | .green { 12 | text-decoration: none; 13 | color: hsla(160, 100%, 37%, 1); 14 | transition: 0.4s; 15 | padding: 3px; 16 | } 17 | 18 | @media (hover: hover) { 19 | a:hover { 20 | background-color: hsla(160, 100%, 37%, 0.2); 21 | } 22 | } 23 | 24 | @media (min-width: 1024px) { 25 | body { 26 | display: flex; 27 | place-items: center; 28 | } 29 | 30 | #app { 31 | display: grid; 32 | grid-template-columns: 1fr 1fr; 33 | padding: 0 2rem; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /playground/src/router/index.js: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory } from 'vue-router' 2 | import HomeView from '../views/HomeView.vue' 3 | 4 | const router = createRouter({ 5 | history: createWebHistory(import.meta.env.BASE_URL), 6 | routes: [ 7 | { 8 | path: '/', 9 | name: 'home', 10 | component: HomeView, 11 | }, 12 | { 13 | path: '/about', 14 | name: 'about', 15 | // route level code-splitting 16 | // this generates a separate chunk (About.[hash].js) for this route 17 | // which is lazy-loaded when the route is visited. 18 | component: () => import('../views/AboutView.vue'), 19 | }, 20 | ], 21 | }) 22 | 23 | export default router 24 | -------------------------------------------------------------------------------- /playground/bot.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import fs from 'node:fs' 3 | import crypto from 'node:crypto' 4 | 5 | 6 | 7 | 8 | 9 | async function getHtmlContent(){ 10 | const response = await axios.get('http://localhost:4173/') 11 | return response.data 12 | } 13 | 14 | async function start(){ 15 | const htmlContent = await getHtmlContent() 16 | const algo = 'sha384' 17 | const hash = crypto.createHash(algo).update(htmlContent).digest('base64') 18 | const integrity = fs.readFileSync('./integrity.txt', 'utf-8') 19 | if(integrity !== hash){ 20 | console.log('文件可能被入侵,报警邮件,短信') 21 | }else{ 22 | console.log('文件未被入侵', new Date().toISOString()) 23 | } 24 | 25 | } 26 | 27 | setInterval(start, 1000) 28 | 29 | 30 | -------------------------------------------------------------------------------- /playground/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-project", 3 | "type": "module", 4 | "version": "0.0.0", 5 | "private": true, 6 | "packageManager": "pnpm@8.15.9+sha512.499434c9d8fdd1a2794ebf4552b3b25c0a633abcee5bb15e7b5de90f32f47b513aca98cd5cfd001c31f0db454bc3804edccd578501e4ca293a6816166bbd9f81", 7 | "scripts": { 8 | "dev": "vite", 9 | "build": "vite build", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "axios": "^1.8.1", 14 | "cheerio": "^1.0.0", 15 | "node-fetch": "^3.3.2", 16 | "pinia": "^3.0.1", 17 | "unplugin-sri": "workspace:*", 18 | "vue": "^3.5.13", 19 | "vue-router": "^4.5.0" 20 | }, 21 | "devDependencies": { 22 | "@vitejs/plugin-vue": "^5.2.1", 23 | "vite": "^6.2.0", 24 | "vite-plugin-vue-devtools": "^7.7.2" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /playground/vite.config.js: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'node:url' 2 | 3 | import vue from '@vitejs/plugin-vue' 4 | import { defineConfig } from 'vite' 5 | import vueDevTools from 'vite-plugin-vue-devtools' 6 | import SRI from 'unplugin-sri/vite' 7 | import fs from 'node:fs' 8 | import crypto from 'node:crypto' 9 | // https://vite.dev/config/ 10 | export default defineConfig({ 11 | plugins: [ 12 | vue(), 13 | vueDevTools(), 14 | SRI({ 15 | onComplete() { 16 | const fileContent = fs.readFileSync('./dist/index.html', 'utf-8') 17 | const algo = 'sha384' 18 | const hash = crypto.createHash(algo).update(fileContent).digest('base64') 19 | // 实际情况应该存数据库里,带上每次打包的时间戳和细节 20 | fs.writeFileSync('./integrity.txt', hash, 'utf-8') 21 | } 22 | }) 23 | ], 24 | resolve: { 25 | alias: { 26 | '@': fileURLToPath(new URL('./src', import.meta.url)), 27 | }, 28 | }, 29 | }) 30 | -------------------------------------------------------------------------------- /playground/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 22 | 23 | 47 | -------------------------------------------------------------------------------- /playground/src/components/icons/IconTooling.vue: -------------------------------------------------------------------------------- 1 | 2 | 20 | -------------------------------------------------------------------------------- /playground/src/components/icons/IconCommunity.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Anthony Fu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | pull_request: 9 | branches: 10 | - main 11 | 12 | jobs: 13 | lint: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v4 17 | - name: Set node 18 | uses: actions/setup-node@v4 19 | with: 20 | node-version: lts/* 21 | 22 | - name: Setup 23 | run: npm i -g @antfu/ni 24 | 25 | - name: Install 26 | run: nci 27 | 28 | - name: Lint 29 | run: nr lint 30 | 31 | test: 32 | runs-on: ${{ matrix.os }} 33 | 34 | strategy: 35 | matrix: 36 | node: [lts/*] 37 | os: [ubuntu-latest, windows-latest, macos-latest] 38 | fail-fast: false 39 | 40 | steps: 41 | - uses: actions/checkout@v4 42 | - name: Set node ${{ matrix.node }} 43 | uses: actions/setup-node@v4 44 | with: 45 | node-version: ${{ matrix.node }} 46 | 47 | - name: Setup 48 | run: npm i -g @antfu/ni 49 | 50 | - name: Install 51 | run: nci 52 | 53 | - name: Build 54 | run: nr build 55 | 56 | - name: Test 57 | run: nr test 58 | -------------------------------------------------------------------------------- /playground/src/components/icons/IconDocumentation.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Node template 3 | # Logs 4 | logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | *.pid.lock 15 | 16 | # Directory for instrumented libs generated by jscoverage/JSCover 17 | lib-cov 18 | 19 | # Coverage directory used by tools like istanbul 20 | coverage 21 | 22 | # nyc test coverage 23 | .nyc_output 24 | 25 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 26 | .grunt 27 | 28 | # Bower dependency directory (https://bower.io/) 29 | bower_components 30 | 31 | # node-waf configuration 32 | .lock-wscript 33 | 34 | # Compiled binary addons (https://nodejs.org/api/addons.html) 35 | build/Release 36 | 37 | # Dependency directories 38 | node_modules/ 39 | jspm_packages/ 40 | 41 | # TypeScript v1 declaration files 42 | typings/ 43 | 44 | # Optional npm cache directory 45 | .npm 46 | 47 | # Optional eslint cache 48 | .eslintcache 49 | 50 | # Optional REPL history 51 | .node_repl_history 52 | 53 | # Output of 'npm pack' 54 | *.tgz 55 | 56 | # Yarn Integrity file 57 | .yarn-integrity 58 | 59 | # dotenv environment variables file 60 | .env 61 | 62 | # parcel-bundler cache (https://parceljs.org/) 63 | .cache 64 | 65 | # next.js build output 66 | .next 67 | 68 | # nuxt.js build output 69 | .nuxt 70 | 71 | # Nuxt generate 72 | dist 73 | 74 | # vuepress build output 75 | .vuepress/dist 76 | 77 | # Serverless directories 78 | .serverless 79 | 80 | # IDE 81 | .idea 82 | -------------------------------------------------------------------------------- /playground/src/components/WelcomeItem.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 87 | -------------------------------------------------------------------------------- /playground/src/App.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 26 | 27 | 90 | -------------------------------------------------------------------------------- /playground/src/components/icons/IconEcosystem.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /playground/src/assets/base.css: -------------------------------------------------------------------------------- 1 | /* color palette from */ 2 | :root { 3 | --vt-c-white: #ffffff; 4 | --vt-c-white-soft: #f8f8f8; 5 | --vt-c-white-mute: #f2f2f2; 6 | 7 | --vt-c-black: #181818; 8 | --vt-c-black-soft: #222222; 9 | --vt-c-black-mute: #282828; 10 | 11 | --vt-c-indigo: #2c3e50; 12 | 13 | --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); 14 | --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); 15 | --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); 16 | --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); 17 | 18 | --vt-c-text-light-1: var(--vt-c-indigo); 19 | --vt-c-text-light-2: rgba(60, 60, 60, 0.66); 20 | --vt-c-text-dark-1: var(--vt-c-white); 21 | --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); 22 | } 23 | 24 | /* semantic color variables for this project */ 25 | :root { 26 | --color-background: var(--vt-c-white); 27 | --color-background-soft: var(--vt-c-white-soft); 28 | --color-background-mute: var(--vt-c-white-mute); 29 | 30 | --color-border: var(--vt-c-divider-light-2); 31 | --color-border-hover: var(--vt-c-divider-light-1); 32 | 33 | --color-heading: var(--vt-c-text-light-1); 34 | --color-text: var(--vt-c-text-light-1); 35 | 36 | --section-gap: 160px; 37 | } 38 | 39 | @media (prefers-color-scheme: dark) { 40 | :root { 41 | --color-background: var(--vt-c-black); 42 | --color-background-soft: var(--vt-c-black-soft); 43 | --color-background-mute: var(--vt-c-black-mute); 44 | 45 | --color-border: var(--vt-c-divider-dark-2); 46 | --color-border-hover: var(--vt-c-divider-dark-1); 47 | 48 | --color-heading: var(--vt-c-text-dark-1); 49 | --color-text: var(--vt-c-text-dark-2); 50 | } 51 | } 52 | 53 | *, 54 | *::before, 55 | *::after { 56 | box-sizing: border-box; 57 | margin: 0; 58 | font-weight: normal; 59 | } 60 | 61 | body { 62 | min-height: 100vh; 63 | color: var(--color-text); 64 | background: var(--color-background); 65 | transition: 66 | color 0.5s, 67 | background-color 0.5s; 68 | line-height: 1.6; 69 | font-family: 70 | Inter, 71 | -apple-system, 72 | BlinkMacSystemFont, 73 | 'Segoe UI', 74 | Roboto, 75 | Oxygen, 76 | Ubuntu, 77 | Cantarell, 78 | 'Fira Sans', 79 | 'Droid Sans', 80 | 'Helvetica Neue', 81 | sans-serif; 82 | font-size: 15px; 83 | text-rendering: optimizeLegibility; 84 | -webkit-font-smoothing: antialiased; 85 | -moz-osx-font-smoothing: grayscale; 86 | } 87 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "unplugin-sri", 3 | "type": "module", 4 | "version": "0.0.11", 5 | "packageManager": "pnpm@10.3.0", 6 | "description": "", 7 | "license": "MIT", 8 | "homepage": "https://github.com/shengxj1/unplugin-sri#readme", 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/shengxj1/unplugin-sri.git" 12 | }, 13 | "bugs": { 14 | "url": "https://github.com/shengxj1/unplugin-sri/issues" 15 | }, 16 | "keywords": [ 17 | "unplugin", 18 | "vite", 19 | "webpack", 20 | "rollup", 21 | "transform" 22 | ], 23 | "exports": { 24 | ".": { 25 | "import": "./dist/index.js", 26 | "require": "./dist/index.cjs" 27 | }, 28 | "./astro": { 29 | "import": "./dist/astro.js", 30 | "require": "./dist/astro.cjs" 31 | }, 32 | "./rspack": { 33 | "import": "./dist/rspack.js", 34 | "require": "./dist/rspack.cjs" 35 | }, 36 | "./vite": { 37 | "import": "./dist/vite.js", 38 | "require": "./dist/vite.cjs" 39 | }, 40 | "./webpack": { 41 | "import": "./dist/webpack.js", 42 | "require": "./dist/webpack.cjs" 43 | }, 44 | "./rollup": { 45 | "import": "./dist/rollup.js", 46 | "require": "./dist/rollup.cjs" 47 | }, 48 | "./esbuild": { 49 | "import": "./dist/esbuild.js", 50 | "require": "./dist/esbuild.cjs" 51 | }, 52 | "./nuxt": { 53 | "import": "./dist/nuxt.js", 54 | "require": "./dist/nuxt.cjs" 55 | }, 56 | "./farm": { 57 | "import": "./dist/farm.js", 58 | "require": "./dist/farm.cjs" 59 | }, 60 | "./types": { 61 | "import": "./dist/types.js", 62 | "require": "./dist/types.cjs" 63 | }, 64 | "./*": "./*" 65 | }, 66 | "main": "dist/index.cjs", 67 | "module": "dist/index.js", 68 | "types": "dist/index.d.ts", 69 | "typesVersions": { 70 | "*": { 71 | "*": [ 72 | "./dist/*", 73 | "./*" 74 | ] 75 | } 76 | }, 77 | "files": [ 78 | "dist" 79 | ], 80 | "scripts": { 81 | "build": "tsup", 82 | "dev": "tsup --watch src", 83 | "lint": "eslint . --fix", 84 | "play": "npm -C playground run dev", 85 | "prepublishOnly": "npm run build", 86 | "release": "bumpp && pnpm publish", 87 | "start": "tsx src/index.ts", 88 | "test": "vitest" 89 | }, 90 | "peerDependencies": { 91 | "@farmfe/core": ">=1", 92 | "@nuxt/kit": "^3", 93 | "@nuxt/schema": "^3", 94 | "esbuild": "*", 95 | "rollup": "^3", 96 | "vite": ">=3", 97 | "webpack": "^4 || ^5" 98 | }, 99 | "peerDependenciesMeta": { 100 | "@farmfe/core": { 101 | "optional": true 102 | }, 103 | "@nuxt/kit": { 104 | "optional": true 105 | }, 106 | "@nuxt/schema": { 107 | "optional": true 108 | }, 109 | "esbuild": { 110 | "optional": true 111 | }, 112 | "rollup": { 113 | "optional": true 114 | }, 115 | "vite": { 116 | "optional": true 117 | }, 118 | "webpack": { 119 | "optional": true 120 | } 121 | }, 122 | "dependencies": { 123 | "unplugin": "^2.1.2" 124 | }, 125 | "devDependencies": { 126 | "@antfu/eslint-config": "^4.2.0", 127 | "@nuxt/kit": "^3.15.4", 128 | "@nuxt/schema": "^3.15.4", 129 | "@types/node": "^22.13.1", 130 | "bumpp": "^10.0.2", 131 | "eslint": "^9.20.0", 132 | "nodemon": "^3.1.9", 133 | "rollup": "^4.34.6", 134 | "tsup": "^8.3.6", 135 | "tsx": "^4.19.2", 136 | "typescript": "^5.7.3", 137 | "vite": "^6.1.0", 138 | "vitest": "^3.0.5", 139 | "webpack": "^5.97.1" 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /playground/src/components/TheWelcome.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 102 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # unplugin-sri 2 | 3 | [![NPM version](https://img.shields.io/npm/v/unplugin-sri?color=a1b858&label=)](https://www.npmjs.com/package/unplugin-sri) 4 | 5 | [Video](https://www.youtube.com/watch?v=X-Thc5G7oU0) 6 | 7 | A universal plugin for adding Subresource Integrity (SRI) attributes to your HTML files. 8 | 9 | ## Features 10 | 11 | - 🔒 Automatically adds integrity attributes to script and link tags 12 | - 🔄 Supports various hash algorithms (default: sha384) 13 | - 🖼️ Optional support for image files 14 | - 🛠️ Works with Vite, Webpack, Rollup, and more 15 | - 🔍 Supports remote resources (URLs starting with `http` or `//`) 16 | 17 | ## Installation 18 | 19 | ``` 20 | pnpm install unplugin-sri 21 | ``` 22 | 23 | ## Usage 24 | 25 |
26 | Vite 27 | 28 | ```js 29 | import SRI from 'unplugin-sri/vite' 30 | // vite.config.js 31 | import { defineConfig } from 'vite' 32 | 33 | export default defineConfig({ 34 | plugins: [ 35 | SRI({ 36 | // options 37 | }), 38 | ], 39 | }) 40 | ``` 41 |
42 | 43 |
44 | Webpack 45 | 46 | ```js 47 | // webpack.config.js 48 | module.exports = { 49 | plugins: [ 50 | require('unplugin-sri/webpack')({ 51 | // options 52 | }), 53 | ], 54 | } 55 | ``` 56 |
57 | 58 |
59 | Rollup 60 | 61 | ```js 62 | // rollup.config.js 63 | import SRI from 'unplugin-sri/rollup' 64 | 65 | export default { 66 | plugins: [ 67 | SRI({ 68 | // options 69 | }), 70 | ], 71 | } 72 | ``` 73 |
74 | 75 |
76 | esbuild 77 | 78 | ```js 79 | // esbuild.config.js 80 | import { build } from 'esbuild' 81 | import SRI from 'unplugin-sri/esbuild' 82 | 83 | build({ 84 | plugins: [ 85 | SRI({ 86 | // options 87 | }), 88 | ], 89 | }) 90 | ``` 91 |
92 | 93 |
94 | Nuxt 95 | 96 | ```js 97 | // nuxt.config.js 98 | export default { 99 | buildModules: [ 100 | ['unplugin-sri/nuxt', { 101 | // options 102 | }], 103 | ], 104 | } 105 | ``` 106 |
107 | 108 |
109 | Vue CLI 110 | 111 | ```js 112 | // vue.config.js 113 | module.exports = { 114 | configureWebpack: { 115 | plugins: [ 116 | require('unplugin-sri/webpack')({ 117 | // options 118 | }), 119 | ], 120 | }, 121 | } 122 | ``` 123 |
124 | 125 | ## Options 126 | ```typescript 127 | interface Options { 128 | /** 129 | * Hash algorithm to use for SRI 130 | * @default 'sha384' 131 | */ 132 | algorithm?: string 133 | 134 | /** 135 | * File extensions to process 136 | * @default ['.js', '.css'] 137 | */ 138 | extensions?: string[] 139 | 140 | /** 141 | * Whether to include image files 142 | * @default false 143 | */ 144 | includeImages?: boolean 145 | 146 | /** 147 | * Callback function to execute when processing is complete 148 | */ 149 | onComplete?: () => void 150 | } 151 | ``` 152 | ## How It Works 153 | 154 | The plugin works by: 155 | 156 | 1. Waiting for the build process to complete 157 | 2. Finding all HTML files in the output directory (defaults to `dist`) 158 | 3. Processing each HTML file to: 159 | - Find all ` 179 | ``` 180 | 181 | After: 182 | ```html 183 | 184 | 185 | ``` 186 | 187 | ## License 188 | 189 | [MIT](./LICENSE) 190 | -------------------------------------------------------------------------------- /src/test.js: -------------------------------------------------------------------------------- 1 | import { createHash } from 'node:crypto' 2 | import fs from 'node:fs' 3 | import path from 'node:path' 4 | 5 | // createHash('sha384').update('filecontent').digest('base64') 6 | /** 7 | * 生成子资源完整性验证的 Vite 插件 8 | * @param {object} options 插件配置选项 9 | * @param {string[]} options.algorithms 哈希算法,默认为 ['sha384'] 10 | * @param {string[]} options.extensions 需要处理的文件扩展名,默认为 ['.js', '.css'] 11 | * @param {boolean} options.includeImages 是否包含图片文件,默认为 false 12 | * @returns {import('vite').Plugin} 13 | */ 14 | export default function vitePluginSRI(options = {}) { 15 | const { 16 | algorithms = ['sha384'], 17 | extensions = ['.js', '.css'], 18 | includeImages = false, 19 | } = options 20 | 21 | // 图片扩展名 22 | const imageExtensions = includeImages ? ['.png', '.jpg', '.jpeg', '.gif', '.svg', '.webp'] : [] 23 | const allExtensions = [...extensions, ...imageExtensions] 24 | 25 | return { 26 | name: 'vite-plugin-sri', 27 | apply: 'build', 28 | enforce: 'post', 29 | 30 | // 在构建完成后执行 31 | closeBundle: async () => { 32 | const outDir = path.resolve(process.cwd(), 'dist') 33 | 34 | // 查找所有 HTML 文件 35 | const htmlFiles = findFiles(outDir, ['.html']) 36 | 37 | for (const htmlFile of htmlFiles) { 38 | let htmlContent = fs.readFileSync(htmlFile, 'utf-8') 39 | 40 | // 处理 script 标签 41 | htmlContent = processScriptTags(htmlContent, outDir, algorithms, allExtensions) 42 | 43 | // 处理 link 标签 (CSS) 44 | htmlContent = processLinkTags(htmlContent, outDir, algorithms, allExtensions) 45 | 46 | // 写回文件 47 | fs.writeFileSync(htmlFile, htmlContent, 'utf-8') 48 | 49 | console.log(`${htmlFile} 处理完成, 生成 integrity 值: ${generateIntegrity(htmlFile, algorithms)}`) 50 | // html文件存数据库,每分钟获取一次官网的html文件,计算integrity和数据库对比 51 | // 不一致直接群里发通知or邮件预警 52 | // 用本地文件模拟数据库 53 | fs.writeFileSync('./sri', generateIntegrity(htmlFile, algorithms), 'utf-8') 54 | } 55 | }, 56 | } 57 | } 58 | 59 | /** 60 | * 查找指定目录下的所有符合扩展名的文件 61 | * @param {string} dir 目录路径 62 | * @param {string[]} extensions 文件扩展名 63 | * @returns {string[]} 文件路径列表 64 | */ 65 | function findFiles(dir, extensions) { 66 | let results = [] 67 | const list = fs.readdirSync(dir) 68 | 69 | for (const file of list) { 70 | const filePath = path.join(dir, file) 71 | const stat = fs.statSync(filePath) 72 | 73 | if (stat.isDirectory()) { 74 | results = results.concat(findFiles(filePath, extensions)) 75 | } 76 | else { 77 | const ext = path.extname(file).toLowerCase() 78 | if (extensions.includes(ext)) { 79 | results.push(filePath) 80 | } 81 | } 82 | } 83 | 84 | return results 85 | } 86 | 87 | /** 88 | * 处理 HTML 中的 script 标签 89 | * @param {string} htmlContent HTML 内容 90 | * @param {string} outDir 输出目录 91 | * @param {string[]} algorithms 哈希算法 92 | * @param {string[]} extensions 文件扩展名 93 | * @returns {string} 处理后的 HTML 内容 94 | */ 95 | function processScriptTags(htmlContent, outDir, algorithms, extensions) { 96 | const scriptRegex = /]*src="([^"]+)"[^>]*><\/script>/g 97 | 98 | return htmlContent.replace(scriptRegex, (match, src) => { 99 | // 跳过外部链接和已有 integrity 属性的标签 100 | if (src.startsWith('http') || match.includes('integrity=')) { 101 | return match 102 | } 103 | 104 | const ext = path.extname(src).toLowerCase() 105 | if (!extensions.includes(ext)) { 106 | return match 107 | } 108 | 109 | try { 110 | // 获取文件的绝对路径 111 | const filePath = path.join(outDir, src.startsWith('/') ? src.slice(1) : src) 112 | 113 | // 计算 integrity 值 114 | const integrity = generateIntegrity(filePath, algorithms) 115 | 116 | // 在标签中添加 integrity 属性 117 | return match.replace(']*href="([^"]+)"[^>]*>/g 136 | 137 | return htmlContent.replace(linkRegex, (match, href) => { 138 | // 跳过外部链接和已有 integrity 属性的标签 139 | if (href.startsWith('http') || match.includes('integrity=')) { 140 | return match 141 | } 142 | 143 | const ext = path.extname(href).toLowerCase() 144 | if (!extensions.includes(ext)) { 145 | return match 146 | } 147 | 148 | try { 149 | // 获取文件的绝对路径 150 | const filePath = path.join(outDir, href.startsWith('/') ? href.slice(1) : href) 151 | 152 | // 计算 integrity 值 153 | const integrity = generateIntegrity(filePath, algorithms) 154 | 155 | // 在标签中添加 integrity 属性 156 | return match.replace(' { 175 | const hash = createHash(algo).update(fileContent).digest('base64') 176 | return `${algo}-${hash}` 177 | }) 178 | 179 | return hashes.join(' ') 180 | } 181 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import type { UnpluginFactory } from 'unplugin' 2 | import type { Options } from './types' 3 | import { createHash } from 'node:crypto' 4 | import fs from 'node:fs' 5 | import path from 'node:path' 6 | import { createUnplugin } from 'unplugin' 7 | import process from 'node:process' 8 | import https from 'node:https' 9 | import http from 'node:http' 10 | 11 | export const unpluginFactory: UnpluginFactory = (options) => { 12 | const defaultOptions = { 13 | algorithm: 'sha384', 14 | extensions: ['.js', '.css'], 15 | includeImages: false, 16 | ...options, 17 | } 18 | 19 | // 图片扩展名 20 | const imageExtensions = defaultOptions.includeImages ? ['.png', '.jpg', '.jpeg', '.gif', '.svg', '.webp'] : [] 21 | const allExtensions = [...defaultOptions.extensions, ...imageExtensions] 22 | 23 | return { 24 | name: 'unplugin-sri', 25 | 26 | // 构建完成后处理HTML文件 27 | async closeBundle() { 28 | try { 29 | // 处理HTML文件 30 | await processHtmlFiles() 31 | } 32 | catch (error) { 33 | console.error('Failed to process HTML:', error) 34 | } 35 | }, 36 | 37 | // 提供验证函数供运行时使用 38 | vite: { 39 | configureServer(server) { 40 | // 在开发服务器中添加中间件来验证完整性 41 | server.middlewares.use(async (req, res, next) => { 42 | // 这里可以添加验证逻辑 43 | next() 44 | }) 45 | }, 46 | }, 47 | } 48 | 49 | // 处理HTML文件的函数 50 | async function processHtmlFiles(): Promise { 51 | const outDir = path.resolve(process.cwd(), 'dist') // 假设输出目录是dist 52 | 53 | try { 54 | // 查找所有HTML文件 55 | const htmlFiles = await findFiles(outDir, ['.html']) 56 | for (const htmlFile of htmlFiles) { 57 | let htmlContent = await fs.promises.readFile(htmlFile, 'utf-8') 58 | // 处理script标签 59 | htmlContent = await processScriptTags(htmlContent, outDir) 60 | // 处理link标签 61 | htmlContent = await processLinkTags(htmlContent, outDir) 62 | // 写回文件 63 | await fs.promises.writeFile(htmlFile, htmlContent, 'utf-8') 64 | console.log(`${htmlFile} finished`) 65 | defaultOptions.onComplete && defaultOptions.onComplete() 66 | } 67 | } 68 | catch (error) { 69 | console.error('处理HTML文件时出错:', error) 70 | } 71 | } 72 | 73 | // 查找指定目录下的所有符合扩展名的文件 74 | async function findFiles(dir: string, extensions: string[]): Promise { 75 | let results: string[] = [] 76 | 77 | try { 78 | const list = await fs.promises.readdir(dir) 79 | 80 | for (const file of list) { 81 | const filePath = path.join(dir, file) 82 | const stat = await fs.promises.stat(filePath) 83 | 84 | if (stat.isDirectory()) { 85 | const subResults = await findFiles(filePath, extensions) 86 | results = results.concat(subResults) 87 | } 88 | else { 89 | const ext = path.extname(file).toLowerCase() 90 | if (extensions.includes(ext)) { 91 | results.push(filePath) 92 | } 93 | } 94 | } 95 | } 96 | catch (error) { 97 | console.error(`查找文件时出错: ${dir}`, error) 98 | } 99 | 100 | return results 101 | } 102 | 103 | function generateIntegrity(fileContent: string, algorithm: string): string { 104 | const hash = createHash(algorithm).update(fileContent).digest('base64') 105 | return `${algorithm}-${hash}` 106 | } 107 | 108 | // 处理HTML中的script标签 109 | async function processScriptTags(htmlContent: string, outDir: string): Promise { 110 | const scriptRegex = /]*src="([^"]+)"[^>]*><\/script>/g 111 | let result = htmlContent 112 | let match 113 | 114 | while ((match = scriptRegex.exec(htmlContent)) !== null) { 115 | const fullMatch = match[0] 116 | const src = match[1] 117 | 118 | // 跳过已有integrity属性的标签 119 | if (fullMatch.includes('integrity=')) { 120 | continue 121 | } 122 | 123 | try { 124 | let fileContent: string 125 | 126 | // 处理远程文件 127 | if (src.startsWith('http') || src.startsWith('//')) { 128 | // 确保URL格式正确 129 | const url = src.startsWith('//') ? `https:${src}` : src 130 | fileContent = await downloadFile(url) 131 | } else { 132 | const ext = path.extname(src).toLowerCase() 133 | if (!allExtensions.includes(ext)) { 134 | continue 135 | } 136 | 137 | // 获取本地文件的绝对路径 138 | const filePath = path.join(outDir, src.startsWith('/') ? src.slice(1) : src) 139 | fileContent = await fs.promises.readFile(filePath, 'utf-8') 140 | } 141 | 142 | const integrity = generateIntegrity(fileContent, defaultOptions.algorithm) 143 | 144 | // 修复:正确处理 crossorigin 属性 145 | const crossoriginAttr = fullMatch.includes('crossorigin') ? '' : ' crossorigin="anonymous"' 146 | const newTag = fullMatch.replace(' { 159 | return new Promise((resolve, reject) => { 160 | const client = url.startsWith('https') ? https : http 161 | 162 | client.get(url, (res) => { 163 | if (res.statusCode !== 200) { 164 | reject(new Error(`请求失败,状态码: ${res.statusCode}`)) 165 | return 166 | } 167 | 168 | let data = '' 169 | res.on('data', (chunk) => { 170 | data += chunk 171 | }) 172 | 173 | res.on('end', () => { 174 | resolve(data) 175 | }) 176 | }).on('error', (err) => { 177 | reject(err) 178 | }) 179 | }) 180 | } 181 | 182 | // 处理HTML中的link标签 183 | async function processLinkTags(htmlContent: string, outDir: string): Promise { 184 | const linkRegex = /]*href="([^"]+)"[^>]*>/g 185 | let result = htmlContent 186 | let match 187 | 188 | while ((match = linkRegex.exec(htmlContent)) !== null) { 189 | const fullMatch = match[0] 190 | const href = match[1] 191 | 192 | // 跳过已有integrity属性的标签 193 | if (fullMatch.includes('integrity=')) { 194 | continue 195 | } 196 | 197 | try { 198 | let fileContent: string 199 | 200 | // 处理远程文件 201 | if (href.startsWith('http') || href.startsWith('//')) { 202 | // 确保URL格式正确 203 | const url = href.startsWith('//') ? `https:${href}` : href 204 | fileContent = await downloadFile(url) 205 | } else { 206 | const ext = path.extname(href).toLowerCase() 207 | if (!allExtensions.includes(ext)) { 208 | continue 209 | } 210 | 211 | // 获取本地文件的绝对路径 212 | const filePath = path.join(outDir, href.startsWith('/') ? href.slice(1) : href) 213 | fileContent = await fs.promises.readFile(filePath, 'utf-8') 214 | } 215 | 216 | // 计算 integrity 值 217 | const integrity = generateIntegrity(fileContent, defaultOptions.algorithm) 218 | 219 | // 修复:正确处理 crossorigin 属性 220 | const crossoriginAttr = fullMatch.includes('crossorigin') ? '' : ' crossorigin="anonymous"' 221 | const newTag = fullMatch.replace('=6.0.0'} 49 | dependencies: 50 | '@jridgewell/gen-mapping': 0.3.8 51 | '@jridgewell/trace-mapping': 0.3.25 52 | dev: true 53 | 54 | /@antfu/utils@0.7.10: 55 | resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} 56 | dev: true 57 | 58 | /@babel/code-frame@7.26.2: 59 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 60 | engines: {node: '>=6.9.0'} 61 | dependencies: 62 | '@babel/helper-validator-identifier': 7.25.9 63 | js-tokens: 4.0.0 64 | picocolors: 1.1.1 65 | dev: true 66 | 67 | /@babel/compat-data@7.26.8: 68 | resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} 69 | engines: {node: '>=6.9.0'} 70 | dev: true 71 | 72 | /@babel/core@7.26.9: 73 | resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} 74 | engines: {node: '>=6.9.0'} 75 | dependencies: 76 | '@ampproject/remapping': 2.3.0 77 | '@babel/code-frame': 7.26.2 78 | '@babel/generator': 7.26.9 79 | '@babel/helper-compilation-targets': 7.26.5 80 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) 81 | '@babel/helpers': 7.26.9 82 | '@babel/parser': 7.26.9 83 | '@babel/template': 7.26.9 84 | '@babel/traverse': 7.26.9 85 | '@babel/types': 7.26.9 86 | convert-source-map: 2.0.0 87 | debug: 4.4.0 88 | gensync: 1.0.0-beta.2 89 | json5: 2.2.3 90 | semver: 6.3.1 91 | transitivePeerDependencies: 92 | - supports-color 93 | dev: true 94 | 95 | /@babel/generator@7.26.9: 96 | resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} 97 | engines: {node: '>=6.9.0'} 98 | dependencies: 99 | '@babel/parser': 7.26.9 100 | '@babel/types': 7.26.9 101 | '@jridgewell/gen-mapping': 0.3.8 102 | '@jridgewell/trace-mapping': 0.3.25 103 | jsesc: 3.1.0 104 | dev: true 105 | 106 | /@babel/helper-annotate-as-pure@7.25.9: 107 | resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} 108 | engines: {node: '>=6.9.0'} 109 | dependencies: 110 | '@babel/types': 7.26.9 111 | dev: true 112 | 113 | /@babel/helper-compilation-targets@7.26.5: 114 | resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} 115 | engines: {node: '>=6.9.0'} 116 | dependencies: 117 | '@babel/compat-data': 7.26.8 118 | '@babel/helper-validator-option': 7.25.9 119 | browserslist: 4.24.4 120 | lru-cache: 5.1.1 121 | semver: 6.3.1 122 | dev: true 123 | 124 | /@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.9): 125 | resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==} 126 | engines: {node: '>=6.9.0'} 127 | peerDependencies: 128 | '@babel/core': ^7.0.0 129 | dependencies: 130 | '@babel/core': 7.26.9 131 | '@babel/helper-annotate-as-pure': 7.25.9 132 | '@babel/helper-member-expression-to-functions': 7.25.9 133 | '@babel/helper-optimise-call-expression': 7.25.9 134 | '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9) 135 | '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 136 | '@babel/traverse': 7.26.9 137 | semver: 6.3.1 138 | transitivePeerDependencies: 139 | - supports-color 140 | dev: true 141 | 142 | /@babel/helper-member-expression-to-functions@7.25.9: 143 | resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} 144 | engines: {node: '>=6.9.0'} 145 | dependencies: 146 | '@babel/traverse': 7.26.9 147 | '@babel/types': 7.26.9 148 | transitivePeerDependencies: 149 | - supports-color 150 | dev: true 151 | 152 | /@babel/helper-module-imports@7.25.9: 153 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 154 | engines: {node: '>=6.9.0'} 155 | dependencies: 156 | '@babel/traverse': 7.26.9 157 | '@babel/types': 7.26.9 158 | transitivePeerDependencies: 159 | - supports-color 160 | dev: true 161 | 162 | /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9): 163 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 164 | engines: {node: '>=6.9.0'} 165 | peerDependencies: 166 | '@babel/core': ^7.0.0 167 | dependencies: 168 | '@babel/core': 7.26.9 169 | '@babel/helper-module-imports': 7.25.9 170 | '@babel/helper-validator-identifier': 7.25.9 171 | '@babel/traverse': 7.26.9 172 | transitivePeerDependencies: 173 | - supports-color 174 | dev: true 175 | 176 | /@babel/helper-optimise-call-expression@7.25.9: 177 | resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} 178 | engines: {node: '>=6.9.0'} 179 | dependencies: 180 | '@babel/types': 7.26.9 181 | dev: true 182 | 183 | /@babel/helper-plugin-utils@7.26.5: 184 | resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} 185 | engines: {node: '>=6.9.0'} 186 | dev: true 187 | 188 | /@babel/helper-replace-supers@7.26.5(@babel/core@7.26.9): 189 | resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} 190 | engines: {node: '>=6.9.0'} 191 | peerDependencies: 192 | '@babel/core': ^7.0.0 193 | dependencies: 194 | '@babel/core': 7.26.9 195 | '@babel/helper-member-expression-to-functions': 7.25.9 196 | '@babel/helper-optimise-call-expression': 7.25.9 197 | '@babel/traverse': 7.26.9 198 | transitivePeerDependencies: 199 | - supports-color 200 | dev: true 201 | 202 | /@babel/helper-skip-transparent-expression-wrappers@7.25.9: 203 | resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} 204 | engines: {node: '>=6.9.0'} 205 | dependencies: 206 | '@babel/traverse': 7.26.9 207 | '@babel/types': 7.26.9 208 | transitivePeerDependencies: 209 | - supports-color 210 | dev: true 211 | 212 | /@babel/helper-string-parser@7.25.9: 213 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 214 | engines: {node: '>=6.9.0'} 215 | 216 | /@babel/helper-validator-identifier@7.25.9: 217 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 218 | engines: {node: '>=6.9.0'} 219 | 220 | /@babel/helper-validator-option@7.25.9: 221 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 222 | engines: {node: '>=6.9.0'} 223 | dev: true 224 | 225 | /@babel/helpers@7.26.9: 226 | resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} 227 | engines: {node: '>=6.9.0'} 228 | dependencies: 229 | '@babel/template': 7.26.9 230 | '@babel/types': 7.26.9 231 | dev: true 232 | 233 | /@babel/parser@7.26.9: 234 | resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} 235 | engines: {node: '>=6.0.0'} 236 | hasBin: true 237 | dependencies: 238 | '@babel/types': 7.26.9 239 | 240 | /@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.9): 241 | resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} 242 | engines: {node: '>=6.9.0'} 243 | peerDependencies: 244 | '@babel/core': ^7.0.0-0 245 | dependencies: 246 | '@babel/core': 7.26.9 247 | '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) 248 | '@babel/helper-plugin-utils': 7.26.5 249 | '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.9) 250 | transitivePeerDependencies: 251 | - supports-color 252 | dev: true 253 | 254 | /@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.9): 255 | resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} 256 | engines: {node: '>=6.9.0'} 257 | peerDependencies: 258 | '@babel/core': ^7.0.0-0 259 | dependencies: 260 | '@babel/core': 7.26.9 261 | '@babel/helper-plugin-utils': 7.26.5 262 | dev: true 263 | 264 | /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.9): 265 | resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} 266 | engines: {node: '>=6.9.0'} 267 | peerDependencies: 268 | '@babel/core': ^7.0.0-0 269 | dependencies: 270 | '@babel/core': 7.26.9 271 | '@babel/helper-plugin-utils': 7.26.5 272 | dev: true 273 | 274 | /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.9): 275 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 276 | peerDependencies: 277 | '@babel/core': ^7.0.0-0 278 | dependencies: 279 | '@babel/core': 7.26.9 280 | '@babel/helper-plugin-utils': 7.26.5 281 | dev: true 282 | 283 | /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9): 284 | resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} 285 | engines: {node: '>=6.9.0'} 286 | peerDependencies: 287 | '@babel/core': ^7.0.0-0 288 | dependencies: 289 | '@babel/core': 7.26.9 290 | '@babel/helper-plugin-utils': 7.26.5 291 | dev: true 292 | 293 | /@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.9): 294 | resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} 295 | engines: {node: '>=6.9.0'} 296 | peerDependencies: 297 | '@babel/core': ^7.0.0-0 298 | dependencies: 299 | '@babel/core': 7.26.9 300 | '@babel/helper-plugin-utils': 7.26.5 301 | dev: true 302 | 303 | /@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.9): 304 | resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==} 305 | engines: {node: '>=6.9.0'} 306 | peerDependencies: 307 | '@babel/core': ^7.0.0-0 308 | dependencies: 309 | '@babel/core': 7.26.9 310 | '@babel/helper-annotate-as-pure': 7.25.9 311 | '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) 312 | '@babel/helper-plugin-utils': 7.26.5 313 | '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 314 | '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) 315 | transitivePeerDependencies: 316 | - supports-color 317 | dev: true 318 | 319 | /@babel/template@7.26.9: 320 | resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} 321 | engines: {node: '>=6.9.0'} 322 | dependencies: 323 | '@babel/code-frame': 7.26.2 324 | '@babel/parser': 7.26.9 325 | '@babel/types': 7.26.9 326 | dev: true 327 | 328 | /@babel/traverse@7.26.9: 329 | resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} 330 | engines: {node: '>=6.9.0'} 331 | dependencies: 332 | '@babel/code-frame': 7.26.2 333 | '@babel/generator': 7.26.9 334 | '@babel/parser': 7.26.9 335 | '@babel/template': 7.26.9 336 | '@babel/types': 7.26.9 337 | debug: 4.4.0 338 | globals: 11.12.0 339 | transitivePeerDependencies: 340 | - supports-color 341 | dev: true 342 | 343 | /@babel/types@7.26.9: 344 | resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} 345 | engines: {node: '>=6.9.0'} 346 | dependencies: 347 | '@babel/helper-string-parser': 7.25.9 348 | '@babel/helper-validator-identifier': 7.25.9 349 | 350 | /@esbuild/aix-ppc64@0.25.0: 351 | resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} 352 | engines: {node: '>=18'} 353 | cpu: [ppc64] 354 | os: [aix] 355 | requiresBuild: true 356 | optional: true 357 | 358 | /@esbuild/android-arm64@0.25.0: 359 | resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} 360 | engines: {node: '>=18'} 361 | cpu: [arm64] 362 | os: [android] 363 | requiresBuild: true 364 | optional: true 365 | 366 | /@esbuild/android-arm@0.25.0: 367 | resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} 368 | engines: {node: '>=18'} 369 | cpu: [arm] 370 | os: [android] 371 | requiresBuild: true 372 | optional: true 373 | 374 | /@esbuild/android-x64@0.25.0: 375 | resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} 376 | engines: {node: '>=18'} 377 | cpu: [x64] 378 | os: [android] 379 | requiresBuild: true 380 | optional: true 381 | 382 | /@esbuild/darwin-arm64@0.25.0: 383 | resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} 384 | engines: {node: '>=18'} 385 | cpu: [arm64] 386 | os: [darwin] 387 | requiresBuild: true 388 | optional: true 389 | 390 | /@esbuild/darwin-x64@0.25.0: 391 | resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} 392 | engines: {node: '>=18'} 393 | cpu: [x64] 394 | os: [darwin] 395 | requiresBuild: true 396 | optional: true 397 | 398 | /@esbuild/freebsd-arm64@0.25.0: 399 | resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} 400 | engines: {node: '>=18'} 401 | cpu: [arm64] 402 | os: [freebsd] 403 | requiresBuild: true 404 | optional: true 405 | 406 | /@esbuild/freebsd-x64@0.25.0: 407 | resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} 408 | engines: {node: '>=18'} 409 | cpu: [x64] 410 | os: [freebsd] 411 | requiresBuild: true 412 | optional: true 413 | 414 | /@esbuild/linux-arm64@0.25.0: 415 | resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} 416 | engines: {node: '>=18'} 417 | cpu: [arm64] 418 | os: [linux] 419 | requiresBuild: true 420 | optional: true 421 | 422 | /@esbuild/linux-arm@0.25.0: 423 | resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} 424 | engines: {node: '>=18'} 425 | cpu: [arm] 426 | os: [linux] 427 | requiresBuild: true 428 | optional: true 429 | 430 | /@esbuild/linux-ia32@0.25.0: 431 | resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} 432 | engines: {node: '>=18'} 433 | cpu: [ia32] 434 | os: [linux] 435 | requiresBuild: true 436 | optional: true 437 | 438 | /@esbuild/linux-loong64@0.25.0: 439 | resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} 440 | engines: {node: '>=18'} 441 | cpu: [loong64] 442 | os: [linux] 443 | requiresBuild: true 444 | optional: true 445 | 446 | /@esbuild/linux-mips64el@0.25.0: 447 | resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} 448 | engines: {node: '>=18'} 449 | cpu: [mips64el] 450 | os: [linux] 451 | requiresBuild: true 452 | optional: true 453 | 454 | /@esbuild/linux-ppc64@0.25.0: 455 | resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} 456 | engines: {node: '>=18'} 457 | cpu: [ppc64] 458 | os: [linux] 459 | requiresBuild: true 460 | optional: true 461 | 462 | /@esbuild/linux-riscv64@0.25.0: 463 | resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} 464 | engines: {node: '>=18'} 465 | cpu: [riscv64] 466 | os: [linux] 467 | requiresBuild: true 468 | optional: true 469 | 470 | /@esbuild/linux-s390x@0.25.0: 471 | resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} 472 | engines: {node: '>=18'} 473 | cpu: [s390x] 474 | os: [linux] 475 | requiresBuild: true 476 | optional: true 477 | 478 | /@esbuild/linux-x64@0.25.0: 479 | resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} 480 | engines: {node: '>=18'} 481 | cpu: [x64] 482 | os: [linux] 483 | requiresBuild: true 484 | optional: true 485 | 486 | /@esbuild/netbsd-arm64@0.25.0: 487 | resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} 488 | engines: {node: '>=18'} 489 | cpu: [arm64] 490 | os: [netbsd] 491 | requiresBuild: true 492 | optional: true 493 | 494 | /@esbuild/netbsd-x64@0.25.0: 495 | resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} 496 | engines: {node: '>=18'} 497 | cpu: [x64] 498 | os: [netbsd] 499 | requiresBuild: true 500 | optional: true 501 | 502 | /@esbuild/openbsd-arm64@0.25.0: 503 | resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} 504 | engines: {node: '>=18'} 505 | cpu: [arm64] 506 | os: [openbsd] 507 | requiresBuild: true 508 | optional: true 509 | 510 | /@esbuild/openbsd-x64@0.25.0: 511 | resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} 512 | engines: {node: '>=18'} 513 | cpu: [x64] 514 | os: [openbsd] 515 | requiresBuild: true 516 | optional: true 517 | 518 | /@esbuild/sunos-x64@0.25.0: 519 | resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} 520 | engines: {node: '>=18'} 521 | cpu: [x64] 522 | os: [sunos] 523 | requiresBuild: true 524 | optional: true 525 | 526 | /@esbuild/win32-arm64@0.25.0: 527 | resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} 528 | engines: {node: '>=18'} 529 | cpu: [arm64] 530 | os: [win32] 531 | requiresBuild: true 532 | optional: true 533 | 534 | /@esbuild/win32-ia32@0.25.0: 535 | resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} 536 | engines: {node: '>=18'} 537 | cpu: [ia32] 538 | os: [win32] 539 | requiresBuild: true 540 | optional: true 541 | 542 | /@esbuild/win32-x64@0.25.0: 543 | resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} 544 | engines: {node: '>=18'} 545 | cpu: [x64] 546 | os: [win32] 547 | requiresBuild: true 548 | optional: true 549 | 550 | /@jridgewell/gen-mapping@0.3.8: 551 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 552 | engines: {node: '>=6.0.0'} 553 | dependencies: 554 | '@jridgewell/set-array': 1.2.1 555 | '@jridgewell/sourcemap-codec': 1.5.0 556 | '@jridgewell/trace-mapping': 0.3.25 557 | dev: true 558 | 559 | /@jridgewell/resolve-uri@3.1.2: 560 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 561 | engines: {node: '>=6.0.0'} 562 | dev: true 563 | 564 | /@jridgewell/set-array@1.2.1: 565 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 566 | engines: {node: '>=6.0.0'} 567 | dev: true 568 | 569 | /@jridgewell/sourcemap-codec@1.5.0: 570 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 571 | 572 | /@jridgewell/trace-mapping@0.3.25: 573 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 574 | dependencies: 575 | '@jridgewell/resolve-uri': 3.1.2 576 | '@jridgewell/sourcemap-codec': 1.5.0 577 | dev: true 578 | 579 | /@polka/url@1.0.0-next.28: 580 | resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} 581 | dev: true 582 | 583 | /@rollup/pluginutils@5.1.4: 584 | resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} 585 | engines: {node: '>=14.0.0'} 586 | peerDependencies: 587 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 588 | peerDependenciesMeta: 589 | rollup: 590 | optional: true 591 | dependencies: 592 | '@types/estree': 1.0.6 593 | estree-walker: 2.0.2 594 | picomatch: 4.0.2 595 | dev: true 596 | 597 | /@rollup/rollup-android-arm-eabi@4.34.9: 598 | resolution: {integrity: sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==} 599 | cpu: [arm] 600 | os: [android] 601 | requiresBuild: true 602 | optional: true 603 | 604 | /@rollup/rollup-android-arm64@4.34.9: 605 | resolution: {integrity: sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==} 606 | cpu: [arm64] 607 | os: [android] 608 | requiresBuild: true 609 | optional: true 610 | 611 | /@rollup/rollup-darwin-arm64@4.34.9: 612 | resolution: {integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==} 613 | cpu: [arm64] 614 | os: [darwin] 615 | requiresBuild: true 616 | optional: true 617 | 618 | /@rollup/rollup-darwin-x64@4.34.9: 619 | resolution: {integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==} 620 | cpu: [x64] 621 | os: [darwin] 622 | requiresBuild: true 623 | optional: true 624 | 625 | /@rollup/rollup-freebsd-arm64@4.34.9: 626 | resolution: {integrity: sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==} 627 | cpu: [arm64] 628 | os: [freebsd] 629 | requiresBuild: true 630 | optional: true 631 | 632 | /@rollup/rollup-freebsd-x64@4.34.9: 633 | resolution: {integrity: sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==} 634 | cpu: [x64] 635 | os: [freebsd] 636 | requiresBuild: true 637 | optional: true 638 | 639 | /@rollup/rollup-linux-arm-gnueabihf@4.34.9: 640 | resolution: {integrity: sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==} 641 | cpu: [arm] 642 | os: [linux] 643 | requiresBuild: true 644 | optional: true 645 | 646 | /@rollup/rollup-linux-arm-musleabihf@4.34.9: 647 | resolution: {integrity: sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==} 648 | cpu: [arm] 649 | os: [linux] 650 | requiresBuild: true 651 | optional: true 652 | 653 | /@rollup/rollup-linux-arm64-gnu@4.34.9: 654 | resolution: {integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==} 655 | cpu: [arm64] 656 | os: [linux] 657 | requiresBuild: true 658 | optional: true 659 | 660 | /@rollup/rollup-linux-arm64-musl@4.34.9: 661 | resolution: {integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==} 662 | cpu: [arm64] 663 | os: [linux] 664 | requiresBuild: true 665 | optional: true 666 | 667 | /@rollup/rollup-linux-loongarch64-gnu@4.34.9: 668 | resolution: {integrity: sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==} 669 | cpu: [loong64] 670 | os: [linux] 671 | requiresBuild: true 672 | optional: true 673 | 674 | /@rollup/rollup-linux-powerpc64le-gnu@4.34.9: 675 | resolution: {integrity: sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==} 676 | cpu: [ppc64] 677 | os: [linux] 678 | requiresBuild: true 679 | optional: true 680 | 681 | /@rollup/rollup-linux-riscv64-gnu@4.34.9: 682 | resolution: {integrity: sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==} 683 | cpu: [riscv64] 684 | os: [linux] 685 | requiresBuild: true 686 | optional: true 687 | 688 | /@rollup/rollup-linux-s390x-gnu@4.34.9: 689 | resolution: {integrity: sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==} 690 | cpu: [s390x] 691 | os: [linux] 692 | requiresBuild: true 693 | optional: true 694 | 695 | /@rollup/rollup-linux-x64-gnu@4.34.9: 696 | resolution: {integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==} 697 | cpu: [x64] 698 | os: [linux] 699 | requiresBuild: true 700 | optional: true 701 | 702 | /@rollup/rollup-linux-x64-musl@4.34.9: 703 | resolution: {integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==} 704 | cpu: [x64] 705 | os: [linux] 706 | requiresBuild: true 707 | optional: true 708 | 709 | /@rollup/rollup-win32-arm64-msvc@4.34.9: 710 | resolution: {integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==} 711 | cpu: [arm64] 712 | os: [win32] 713 | requiresBuild: true 714 | optional: true 715 | 716 | /@rollup/rollup-win32-ia32-msvc@4.34.9: 717 | resolution: {integrity: sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==} 718 | cpu: [ia32] 719 | os: [win32] 720 | requiresBuild: true 721 | optional: true 722 | 723 | /@rollup/rollup-win32-x64-msvc@4.34.9: 724 | resolution: {integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==} 725 | cpu: [x64] 726 | os: [win32] 727 | requiresBuild: true 728 | optional: true 729 | 730 | /@sec-ant/readable-stream@0.4.1: 731 | resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} 732 | dev: true 733 | 734 | /@sindresorhus/merge-streams@4.0.0: 735 | resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} 736 | engines: {node: '>=18'} 737 | dev: true 738 | 739 | /@small-tech/vite-plugin-sri@1.0.1: 740 | resolution: {integrity: sha512-UoX0fiE5wIHWRLC5zJ4avI6YzyBxSWvc8rqbs7FkAaXiPaYYfLUuOI1zGXEztPzqgFLRps2AAwyBRhSf7Iik6g==} 741 | dependencies: 742 | cheerio: 1.0.0 743 | node-fetch: 2.7.0 744 | transitivePeerDependencies: 745 | - encoding 746 | dev: true 747 | 748 | /@types/estree@1.0.6: 749 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 750 | 751 | /@vitejs/plugin-vue@5.2.1(vite@6.2.0)(vue@3.5.13): 752 | resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} 753 | engines: {node: ^18.0.0 || >=20.0.0} 754 | peerDependencies: 755 | vite: ^5.0.0 || ^6.0.0 756 | vue: ^3.2.25 757 | dependencies: 758 | vite: 6.2.0 759 | vue: 3.5.13 760 | dev: true 761 | 762 | /@vue/babel-helper-vue-transform-on@1.3.0: 763 | resolution: {integrity: sha512-vrNyYNQcz1gfc87uuN+Z+On9fFOBQTYRlTUEDovpeCmjuwH83lAm6YM0VBvTx6eRTHg3SU5jP2CD+kSXY30PGg==} 764 | dev: true 765 | 766 | /@vue/babel-plugin-jsx@1.3.0(@babel/core@7.26.9): 767 | resolution: {integrity: sha512-ODZSs93FCxLMOiMFAGJXe7QMJp1tk8hkMbk84OcHOTVwYU2cFwFu1z7jjrRv44wCCfPNkflqn6hnexVprb+G7A==} 768 | peerDependencies: 769 | '@babel/core': ^7.0.0-0 770 | peerDependenciesMeta: 771 | '@babel/core': 772 | optional: true 773 | dependencies: 774 | '@babel/core': 7.26.9 775 | '@babel/helper-module-imports': 7.25.9 776 | '@babel/helper-plugin-utils': 7.26.5 777 | '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) 778 | '@babel/template': 7.26.9 779 | '@babel/traverse': 7.26.9 780 | '@babel/types': 7.26.9 781 | '@vue/babel-helper-vue-transform-on': 1.3.0 782 | '@vue/babel-plugin-resolve-type': 1.3.0(@babel/core@7.26.9) 783 | '@vue/shared': 3.5.13 784 | transitivePeerDependencies: 785 | - supports-color 786 | dev: true 787 | 788 | /@vue/babel-plugin-resolve-type@1.3.0(@babel/core@7.26.9): 789 | resolution: {integrity: sha512-3SmusE11QKNKtnVfbsKegUEArpf1fXE85Dzi/Q6lvaz3MA3tmL8BXyq/vA7GJeZ183XeNpLIZHrHDdUh9V348A==} 790 | peerDependencies: 791 | '@babel/core': ^7.0.0-0 792 | dependencies: 793 | '@babel/code-frame': 7.26.2 794 | '@babel/core': 7.26.9 795 | '@babel/helper-module-imports': 7.25.9 796 | '@babel/helper-plugin-utils': 7.26.5 797 | '@babel/parser': 7.26.9 798 | '@vue/compiler-sfc': 3.5.13 799 | transitivePeerDependencies: 800 | - supports-color 801 | dev: true 802 | 803 | /@vue/compiler-core@3.5.13: 804 | resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} 805 | dependencies: 806 | '@babel/parser': 7.26.9 807 | '@vue/shared': 3.5.13 808 | entities: 4.5.0 809 | estree-walker: 2.0.2 810 | source-map-js: 1.2.1 811 | 812 | /@vue/compiler-dom@3.5.13: 813 | resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} 814 | dependencies: 815 | '@vue/compiler-core': 3.5.13 816 | '@vue/shared': 3.5.13 817 | 818 | /@vue/compiler-sfc@3.5.13: 819 | resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} 820 | dependencies: 821 | '@babel/parser': 7.26.9 822 | '@vue/compiler-core': 3.5.13 823 | '@vue/compiler-dom': 3.5.13 824 | '@vue/compiler-ssr': 3.5.13 825 | '@vue/shared': 3.5.13 826 | estree-walker: 2.0.2 827 | magic-string: 0.30.17 828 | postcss: 8.5.3 829 | source-map-js: 1.2.1 830 | 831 | /@vue/compiler-ssr@3.5.13: 832 | resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} 833 | dependencies: 834 | '@vue/compiler-dom': 3.5.13 835 | '@vue/shared': 3.5.13 836 | 837 | /@vue/devtools-api@6.6.4: 838 | resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} 839 | dev: false 840 | 841 | /@vue/devtools-api@7.7.2: 842 | resolution: {integrity: sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==} 843 | dependencies: 844 | '@vue/devtools-kit': 7.7.2 845 | dev: false 846 | 847 | /@vue/devtools-core@7.7.2(vite@6.2.0)(vue@3.5.13): 848 | resolution: {integrity: sha512-lexREWj1lKi91Tblr38ntSsy6CvI8ba7u+jmwh2yruib/ltLUcsIzEjCnrkh1yYGGIKXbAuYV2tOG10fGDB9OQ==} 849 | peerDependencies: 850 | vue: ^3.0.0 851 | dependencies: 852 | '@vue/devtools-kit': 7.7.2 853 | '@vue/devtools-shared': 7.7.2 854 | mitt: 3.0.1 855 | nanoid: 5.1.2 856 | pathe: 2.0.3 857 | vite-hot-client: 0.2.4(vite@6.2.0) 858 | vue: 3.5.13 859 | transitivePeerDependencies: 860 | - vite 861 | dev: true 862 | 863 | /@vue/devtools-kit@7.7.2: 864 | resolution: {integrity: sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==} 865 | dependencies: 866 | '@vue/devtools-shared': 7.7.2 867 | birpc: 0.2.19 868 | hookable: 5.5.3 869 | mitt: 3.0.1 870 | perfect-debounce: 1.0.0 871 | speakingurl: 14.0.1 872 | superjson: 2.2.2 873 | 874 | /@vue/devtools-shared@7.7.2: 875 | resolution: {integrity: sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==} 876 | dependencies: 877 | rfdc: 1.4.1 878 | 879 | /@vue/reactivity@3.5.13: 880 | resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} 881 | dependencies: 882 | '@vue/shared': 3.5.13 883 | 884 | /@vue/runtime-core@3.5.13: 885 | resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} 886 | dependencies: 887 | '@vue/reactivity': 3.5.13 888 | '@vue/shared': 3.5.13 889 | 890 | /@vue/runtime-dom@3.5.13: 891 | resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} 892 | dependencies: 893 | '@vue/reactivity': 3.5.13 894 | '@vue/runtime-core': 3.5.13 895 | '@vue/shared': 3.5.13 896 | csstype: 3.1.3 897 | 898 | /@vue/server-renderer@3.5.13(vue@3.5.13): 899 | resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} 900 | peerDependencies: 901 | vue: 3.5.13 902 | dependencies: 903 | '@vue/compiler-ssr': 3.5.13 904 | '@vue/shared': 3.5.13 905 | vue: 3.5.13 906 | 907 | /@vue/shared@3.5.13: 908 | resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} 909 | 910 | /acorn@8.14.1: 911 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 912 | engines: {node: '>=0.4.0'} 913 | hasBin: true 914 | dev: false 915 | 916 | /asynckit@0.4.0: 917 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 918 | dev: false 919 | 920 | /axios@1.8.1: 921 | resolution: {integrity: sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==} 922 | dependencies: 923 | follow-redirects: 1.15.9 924 | form-data: 4.0.2 925 | proxy-from-env: 1.1.0 926 | transitivePeerDependencies: 927 | - debug 928 | dev: false 929 | 930 | /birpc@0.2.19: 931 | resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} 932 | 933 | /boolbase@1.0.0: 934 | resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 935 | 936 | /browserslist@4.24.4: 937 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} 938 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 939 | hasBin: true 940 | dependencies: 941 | caniuse-lite: 1.0.30001702 942 | electron-to-chromium: 1.5.112 943 | node-releases: 2.0.19 944 | update-browserslist-db: 1.1.3(browserslist@4.24.4) 945 | dev: true 946 | 947 | /bundle-name@4.1.0: 948 | resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} 949 | engines: {node: '>=18'} 950 | dependencies: 951 | run-applescript: 7.0.0 952 | dev: true 953 | 954 | /call-bind-apply-helpers@1.0.2: 955 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 956 | engines: {node: '>= 0.4'} 957 | dependencies: 958 | es-errors: 1.3.0 959 | function-bind: 1.1.2 960 | dev: false 961 | 962 | /caniuse-lite@1.0.30001702: 963 | resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} 964 | dev: true 965 | 966 | /cheerio-select@2.1.0: 967 | resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} 968 | dependencies: 969 | boolbase: 1.0.0 970 | css-select: 5.1.0 971 | css-what: 6.1.0 972 | domelementtype: 2.3.0 973 | domhandler: 5.0.3 974 | domutils: 3.2.2 975 | 976 | /cheerio@1.0.0: 977 | resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} 978 | engines: {node: '>=18.17'} 979 | dependencies: 980 | cheerio-select: 2.1.0 981 | dom-serializer: 2.0.0 982 | domhandler: 5.0.3 983 | domutils: 3.2.2 984 | encoding-sniffer: 0.2.0 985 | htmlparser2: 9.1.0 986 | parse5: 7.2.1 987 | parse5-htmlparser2-tree-adapter: 7.1.0 988 | parse5-parser-stream: 7.1.2 989 | undici: 6.21.1 990 | whatwg-mimetype: 4.0.0 991 | 992 | /combined-stream@1.0.8: 993 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 994 | engines: {node: '>= 0.8'} 995 | dependencies: 996 | delayed-stream: 1.0.0 997 | dev: false 998 | 999 | /convert-source-map@2.0.0: 1000 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 1001 | dev: true 1002 | 1003 | /copy-anything@3.0.5: 1004 | resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} 1005 | engines: {node: '>=12.13'} 1006 | dependencies: 1007 | is-what: 4.1.16 1008 | 1009 | /cross-spawn@7.0.6: 1010 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 1011 | engines: {node: '>= 8'} 1012 | dependencies: 1013 | path-key: 3.1.1 1014 | shebang-command: 2.0.0 1015 | which: 2.0.2 1016 | dev: true 1017 | 1018 | /css-select@5.1.0: 1019 | resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} 1020 | dependencies: 1021 | boolbase: 1.0.0 1022 | css-what: 6.1.0 1023 | domhandler: 5.0.3 1024 | domutils: 3.2.2 1025 | nth-check: 2.1.1 1026 | 1027 | /css-what@6.1.0: 1028 | resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} 1029 | engines: {node: '>= 6'} 1030 | 1031 | /csstype@3.1.3: 1032 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 1033 | 1034 | /data-uri-to-buffer@4.0.1: 1035 | resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} 1036 | engines: {node: '>= 12'} 1037 | dev: false 1038 | 1039 | /debug@4.4.0: 1040 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 1041 | engines: {node: '>=6.0'} 1042 | peerDependencies: 1043 | supports-color: '*' 1044 | peerDependenciesMeta: 1045 | supports-color: 1046 | optional: true 1047 | dependencies: 1048 | ms: 2.1.3 1049 | dev: true 1050 | 1051 | /default-browser-id@5.0.0: 1052 | resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} 1053 | engines: {node: '>=18'} 1054 | dev: true 1055 | 1056 | /default-browser@5.2.1: 1057 | resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} 1058 | engines: {node: '>=18'} 1059 | dependencies: 1060 | bundle-name: 4.1.0 1061 | default-browser-id: 5.0.0 1062 | dev: true 1063 | 1064 | /define-lazy-prop@3.0.0: 1065 | resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} 1066 | engines: {node: '>=12'} 1067 | dev: true 1068 | 1069 | /delayed-stream@1.0.0: 1070 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1071 | engines: {node: '>=0.4.0'} 1072 | dev: false 1073 | 1074 | /dom-serializer@2.0.0: 1075 | resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 1076 | dependencies: 1077 | domelementtype: 2.3.0 1078 | domhandler: 5.0.3 1079 | entities: 4.5.0 1080 | 1081 | /domelementtype@2.3.0: 1082 | resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 1083 | 1084 | /domhandler@5.0.3: 1085 | resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 1086 | engines: {node: '>= 4'} 1087 | dependencies: 1088 | domelementtype: 2.3.0 1089 | 1090 | /domutils@3.2.2: 1091 | resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} 1092 | dependencies: 1093 | dom-serializer: 2.0.0 1094 | domelementtype: 2.3.0 1095 | domhandler: 5.0.3 1096 | 1097 | /dunder-proto@1.0.1: 1098 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 1099 | engines: {node: '>= 0.4'} 1100 | dependencies: 1101 | call-bind-apply-helpers: 1.0.2 1102 | es-errors: 1.3.0 1103 | gopd: 1.2.0 1104 | dev: false 1105 | 1106 | /electron-to-chromium@1.5.112: 1107 | resolution: {integrity: sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==} 1108 | dev: true 1109 | 1110 | /encoding-sniffer@0.2.0: 1111 | resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} 1112 | dependencies: 1113 | iconv-lite: 0.6.3 1114 | whatwg-encoding: 3.1.1 1115 | 1116 | /entities@4.5.0: 1117 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1118 | engines: {node: '>=0.12'} 1119 | 1120 | /error-stack-parser-es@0.1.5: 1121 | resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} 1122 | dev: true 1123 | 1124 | /es-define-property@1.0.1: 1125 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 1126 | engines: {node: '>= 0.4'} 1127 | dev: false 1128 | 1129 | /es-errors@1.3.0: 1130 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 1131 | engines: {node: '>= 0.4'} 1132 | dev: false 1133 | 1134 | /es-object-atoms@1.1.1: 1135 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 1136 | engines: {node: '>= 0.4'} 1137 | dependencies: 1138 | es-errors: 1.3.0 1139 | dev: false 1140 | 1141 | /es-set-tostringtag@2.1.0: 1142 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 1143 | engines: {node: '>= 0.4'} 1144 | dependencies: 1145 | es-errors: 1.3.0 1146 | get-intrinsic: 1.3.0 1147 | has-tostringtag: 1.0.2 1148 | hasown: 2.0.2 1149 | dev: false 1150 | 1151 | /esbuild@0.25.0: 1152 | resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} 1153 | engines: {node: '>=18'} 1154 | hasBin: true 1155 | requiresBuild: true 1156 | optionalDependencies: 1157 | '@esbuild/aix-ppc64': 0.25.0 1158 | '@esbuild/android-arm': 0.25.0 1159 | '@esbuild/android-arm64': 0.25.0 1160 | '@esbuild/android-x64': 0.25.0 1161 | '@esbuild/darwin-arm64': 0.25.0 1162 | '@esbuild/darwin-x64': 0.25.0 1163 | '@esbuild/freebsd-arm64': 0.25.0 1164 | '@esbuild/freebsd-x64': 0.25.0 1165 | '@esbuild/linux-arm': 0.25.0 1166 | '@esbuild/linux-arm64': 0.25.0 1167 | '@esbuild/linux-ia32': 0.25.0 1168 | '@esbuild/linux-loong64': 0.25.0 1169 | '@esbuild/linux-mips64el': 0.25.0 1170 | '@esbuild/linux-ppc64': 0.25.0 1171 | '@esbuild/linux-riscv64': 0.25.0 1172 | '@esbuild/linux-s390x': 0.25.0 1173 | '@esbuild/linux-x64': 0.25.0 1174 | '@esbuild/netbsd-arm64': 0.25.0 1175 | '@esbuild/netbsd-x64': 0.25.0 1176 | '@esbuild/openbsd-arm64': 0.25.0 1177 | '@esbuild/openbsd-x64': 0.25.0 1178 | '@esbuild/sunos-x64': 0.25.0 1179 | '@esbuild/win32-arm64': 0.25.0 1180 | '@esbuild/win32-ia32': 0.25.0 1181 | '@esbuild/win32-x64': 0.25.0 1182 | 1183 | /escalade@3.2.0: 1184 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 1185 | engines: {node: '>=6'} 1186 | dev: true 1187 | 1188 | /estree-walker@2.0.2: 1189 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1190 | 1191 | /execa@9.5.2: 1192 | resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} 1193 | engines: {node: ^18.19.0 || >=20.5.0} 1194 | dependencies: 1195 | '@sindresorhus/merge-streams': 4.0.0 1196 | cross-spawn: 7.0.6 1197 | figures: 6.1.0 1198 | get-stream: 9.0.1 1199 | human-signals: 8.0.0 1200 | is-plain-obj: 4.1.0 1201 | is-stream: 4.0.1 1202 | npm-run-path: 6.0.0 1203 | pretty-ms: 9.2.0 1204 | signal-exit: 4.1.0 1205 | strip-final-newline: 4.0.0 1206 | yoctocolors: 2.1.1 1207 | dev: true 1208 | 1209 | /fetch-blob@3.2.0: 1210 | resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} 1211 | engines: {node: ^12.20 || >= 14.13} 1212 | dependencies: 1213 | node-domexception: 1.0.0 1214 | web-streams-polyfill: 3.3.3 1215 | dev: false 1216 | 1217 | /figures@6.1.0: 1218 | resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} 1219 | engines: {node: '>=18'} 1220 | dependencies: 1221 | is-unicode-supported: 2.1.0 1222 | dev: true 1223 | 1224 | /follow-redirects@1.15.9: 1225 | resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} 1226 | engines: {node: '>=4.0'} 1227 | peerDependencies: 1228 | debug: '*' 1229 | peerDependenciesMeta: 1230 | debug: 1231 | optional: true 1232 | dev: false 1233 | 1234 | /form-data@4.0.2: 1235 | resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} 1236 | engines: {node: '>= 6'} 1237 | dependencies: 1238 | asynckit: 0.4.0 1239 | combined-stream: 1.0.8 1240 | es-set-tostringtag: 2.1.0 1241 | mime-types: 2.1.35 1242 | dev: false 1243 | 1244 | /formdata-polyfill@4.0.10: 1245 | resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} 1246 | engines: {node: '>=12.20.0'} 1247 | dependencies: 1248 | fetch-blob: 3.2.0 1249 | dev: false 1250 | 1251 | /fs-extra@11.3.0: 1252 | resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} 1253 | engines: {node: '>=14.14'} 1254 | dependencies: 1255 | graceful-fs: 4.2.11 1256 | jsonfile: 6.1.0 1257 | universalify: 2.0.1 1258 | dev: true 1259 | 1260 | /fsevents@2.3.3: 1261 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1262 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1263 | os: [darwin] 1264 | requiresBuild: true 1265 | optional: true 1266 | 1267 | /function-bind@1.1.2: 1268 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1269 | dev: false 1270 | 1271 | /gensync@1.0.0-beta.2: 1272 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1273 | engines: {node: '>=6.9.0'} 1274 | dev: true 1275 | 1276 | /get-intrinsic@1.3.0: 1277 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 1278 | engines: {node: '>= 0.4'} 1279 | dependencies: 1280 | call-bind-apply-helpers: 1.0.2 1281 | es-define-property: 1.0.1 1282 | es-errors: 1.3.0 1283 | es-object-atoms: 1.1.1 1284 | function-bind: 1.1.2 1285 | get-proto: 1.0.1 1286 | gopd: 1.2.0 1287 | has-symbols: 1.1.0 1288 | hasown: 2.0.2 1289 | math-intrinsics: 1.1.0 1290 | dev: false 1291 | 1292 | /get-proto@1.0.1: 1293 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 1294 | engines: {node: '>= 0.4'} 1295 | dependencies: 1296 | dunder-proto: 1.0.1 1297 | es-object-atoms: 1.1.1 1298 | dev: false 1299 | 1300 | /get-stream@9.0.1: 1301 | resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} 1302 | engines: {node: '>=18'} 1303 | dependencies: 1304 | '@sec-ant/readable-stream': 0.4.1 1305 | is-stream: 4.0.1 1306 | dev: true 1307 | 1308 | /globals@11.12.0: 1309 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1310 | engines: {node: '>=4'} 1311 | dev: true 1312 | 1313 | /gopd@1.2.0: 1314 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 1315 | engines: {node: '>= 0.4'} 1316 | dev: false 1317 | 1318 | /graceful-fs@4.2.11: 1319 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1320 | dev: true 1321 | 1322 | /has-symbols@1.1.0: 1323 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 1324 | engines: {node: '>= 0.4'} 1325 | dev: false 1326 | 1327 | /has-tostringtag@1.0.2: 1328 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 1329 | engines: {node: '>= 0.4'} 1330 | dependencies: 1331 | has-symbols: 1.1.0 1332 | dev: false 1333 | 1334 | /hasown@2.0.2: 1335 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1336 | engines: {node: '>= 0.4'} 1337 | dependencies: 1338 | function-bind: 1.1.2 1339 | dev: false 1340 | 1341 | /hookable@5.5.3: 1342 | resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} 1343 | 1344 | /htmlparser2@9.1.0: 1345 | resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} 1346 | dependencies: 1347 | domelementtype: 2.3.0 1348 | domhandler: 5.0.3 1349 | domutils: 3.2.2 1350 | entities: 4.5.0 1351 | 1352 | /human-signals@8.0.0: 1353 | resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} 1354 | engines: {node: '>=18.18.0'} 1355 | dev: true 1356 | 1357 | /iconv-lite@0.6.3: 1358 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1359 | engines: {node: '>=0.10.0'} 1360 | dependencies: 1361 | safer-buffer: 2.1.2 1362 | 1363 | /is-docker@3.0.0: 1364 | resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} 1365 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1366 | hasBin: true 1367 | dev: true 1368 | 1369 | /is-inside-container@1.0.0: 1370 | resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} 1371 | engines: {node: '>=14.16'} 1372 | hasBin: true 1373 | dependencies: 1374 | is-docker: 3.0.0 1375 | dev: true 1376 | 1377 | /is-plain-obj@4.1.0: 1378 | resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 1379 | engines: {node: '>=12'} 1380 | dev: true 1381 | 1382 | /is-stream@4.0.1: 1383 | resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} 1384 | engines: {node: '>=18'} 1385 | dev: true 1386 | 1387 | /is-unicode-supported@2.1.0: 1388 | resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} 1389 | engines: {node: '>=18'} 1390 | dev: true 1391 | 1392 | /is-what@4.1.16: 1393 | resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 1394 | engines: {node: '>=12.13'} 1395 | 1396 | /is-wsl@3.1.0: 1397 | resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} 1398 | engines: {node: '>=16'} 1399 | dependencies: 1400 | is-inside-container: 1.0.0 1401 | dev: true 1402 | 1403 | /isexe@2.0.0: 1404 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1405 | dev: true 1406 | 1407 | /js-tokens@4.0.0: 1408 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1409 | dev: true 1410 | 1411 | /jsesc@3.1.0: 1412 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1413 | engines: {node: '>=6'} 1414 | hasBin: true 1415 | dev: true 1416 | 1417 | /json5@2.2.3: 1418 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1419 | engines: {node: '>=6'} 1420 | hasBin: true 1421 | dev: true 1422 | 1423 | /jsonfile@6.1.0: 1424 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1425 | dependencies: 1426 | universalify: 2.0.1 1427 | optionalDependencies: 1428 | graceful-fs: 4.2.11 1429 | dev: true 1430 | 1431 | /kolorist@1.8.0: 1432 | resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} 1433 | dev: true 1434 | 1435 | /lru-cache@5.1.1: 1436 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1437 | dependencies: 1438 | yallist: 3.1.1 1439 | dev: true 1440 | 1441 | /magic-string@0.30.17: 1442 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 1443 | dependencies: 1444 | '@jridgewell/sourcemap-codec': 1.5.0 1445 | 1446 | /math-intrinsics@1.1.0: 1447 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1448 | engines: {node: '>= 0.4'} 1449 | dev: false 1450 | 1451 | /mime-db@1.52.0: 1452 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1453 | engines: {node: '>= 0.6'} 1454 | dev: false 1455 | 1456 | /mime-types@2.1.35: 1457 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1458 | engines: {node: '>= 0.6'} 1459 | dependencies: 1460 | mime-db: 1.52.0 1461 | dev: false 1462 | 1463 | /mitt@3.0.1: 1464 | resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} 1465 | 1466 | /mrmime@2.0.1: 1467 | resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 1468 | engines: {node: '>=10'} 1469 | dev: true 1470 | 1471 | /ms@2.1.3: 1472 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1473 | dev: true 1474 | 1475 | /nanoid@3.3.8: 1476 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 1477 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1478 | hasBin: true 1479 | 1480 | /nanoid@5.1.2: 1481 | resolution: {integrity: sha512-b+CiXQCNMUGe0Ri64S9SXFcP9hogjAJ2Rd6GdVxhPLRm7mhGaM7VgOvCAJ1ZshfHbqVDI3uqTI5C8/GaKuLI7g==} 1482 | engines: {node: ^18 || >=20} 1483 | hasBin: true 1484 | dev: true 1485 | 1486 | /node-domexception@1.0.0: 1487 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} 1488 | engines: {node: '>=10.5.0'} 1489 | dev: false 1490 | 1491 | /node-fetch@2.7.0: 1492 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1493 | engines: {node: 4.x || >=6.0.0} 1494 | peerDependencies: 1495 | encoding: ^0.1.0 1496 | peerDependenciesMeta: 1497 | encoding: 1498 | optional: true 1499 | dependencies: 1500 | whatwg-url: 5.0.0 1501 | dev: true 1502 | 1503 | /node-fetch@3.3.2: 1504 | resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} 1505 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1506 | dependencies: 1507 | data-uri-to-buffer: 4.0.1 1508 | fetch-blob: 3.2.0 1509 | formdata-polyfill: 4.0.10 1510 | dev: false 1511 | 1512 | /node-releases@2.0.19: 1513 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 1514 | dev: true 1515 | 1516 | /npm-run-path@6.0.0: 1517 | resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} 1518 | engines: {node: '>=18'} 1519 | dependencies: 1520 | path-key: 4.0.0 1521 | unicorn-magic: 0.3.0 1522 | dev: true 1523 | 1524 | /nth-check@2.1.1: 1525 | resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 1526 | dependencies: 1527 | boolbase: 1.0.0 1528 | 1529 | /open@10.1.0: 1530 | resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} 1531 | engines: {node: '>=18'} 1532 | dependencies: 1533 | default-browser: 5.2.1 1534 | define-lazy-prop: 3.0.0 1535 | is-inside-container: 1.0.0 1536 | is-wsl: 3.1.0 1537 | dev: true 1538 | 1539 | /parse-ms@4.0.0: 1540 | resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} 1541 | engines: {node: '>=18'} 1542 | dev: true 1543 | 1544 | /parse5-htmlparser2-tree-adapter@7.1.0: 1545 | resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} 1546 | dependencies: 1547 | domhandler: 5.0.3 1548 | parse5: 7.2.1 1549 | 1550 | /parse5-parser-stream@7.1.2: 1551 | resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} 1552 | dependencies: 1553 | parse5: 7.2.1 1554 | 1555 | /parse5@7.2.1: 1556 | resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} 1557 | dependencies: 1558 | entities: 4.5.0 1559 | 1560 | /path-key@3.1.1: 1561 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1562 | engines: {node: '>=8'} 1563 | dev: true 1564 | 1565 | /path-key@4.0.0: 1566 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1567 | engines: {node: '>=12'} 1568 | dev: true 1569 | 1570 | /pathe@2.0.3: 1571 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1572 | dev: true 1573 | 1574 | /perfect-debounce@1.0.0: 1575 | resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} 1576 | 1577 | /picocolors@1.1.1: 1578 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1579 | 1580 | /picomatch@4.0.2: 1581 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1582 | engines: {node: '>=12'} 1583 | dev: true 1584 | 1585 | /pinia@3.0.1(vue@3.5.13): 1586 | resolution: {integrity: sha512-WXglsDzztOTH6IfcJ99ltYZin2mY8XZCXujkYWVIJlBjqsP6ST7zw+Aarh63E1cDVYeyUcPCxPHzJpEOmzB6Wg==} 1587 | peerDependencies: 1588 | typescript: '>=4.4.4' 1589 | vue: ^2.7.0 || ^3.5.11 1590 | peerDependenciesMeta: 1591 | typescript: 1592 | optional: true 1593 | dependencies: 1594 | '@vue/devtools-api': 7.7.2 1595 | vue: 3.5.13 1596 | dev: false 1597 | 1598 | /postcss@8.5.3: 1599 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 1600 | engines: {node: ^10 || ^12 || >=14} 1601 | dependencies: 1602 | nanoid: 3.3.8 1603 | picocolors: 1.1.1 1604 | source-map-js: 1.2.1 1605 | 1606 | /pretty-ms@9.2.0: 1607 | resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} 1608 | engines: {node: '>=18'} 1609 | dependencies: 1610 | parse-ms: 4.0.0 1611 | dev: true 1612 | 1613 | /proxy-from-env@1.1.0: 1614 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 1615 | dev: false 1616 | 1617 | /rfdc@1.4.1: 1618 | resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} 1619 | 1620 | /rollup@4.34.9: 1621 | resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==} 1622 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1623 | hasBin: true 1624 | dependencies: 1625 | '@types/estree': 1.0.6 1626 | optionalDependencies: 1627 | '@rollup/rollup-android-arm-eabi': 4.34.9 1628 | '@rollup/rollup-android-arm64': 4.34.9 1629 | '@rollup/rollup-darwin-arm64': 4.34.9 1630 | '@rollup/rollup-darwin-x64': 4.34.9 1631 | '@rollup/rollup-freebsd-arm64': 4.34.9 1632 | '@rollup/rollup-freebsd-x64': 4.34.9 1633 | '@rollup/rollup-linux-arm-gnueabihf': 4.34.9 1634 | '@rollup/rollup-linux-arm-musleabihf': 4.34.9 1635 | '@rollup/rollup-linux-arm64-gnu': 4.34.9 1636 | '@rollup/rollup-linux-arm64-musl': 4.34.9 1637 | '@rollup/rollup-linux-loongarch64-gnu': 4.34.9 1638 | '@rollup/rollup-linux-powerpc64le-gnu': 4.34.9 1639 | '@rollup/rollup-linux-riscv64-gnu': 4.34.9 1640 | '@rollup/rollup-linux-s390x-gnu': 4.34.9 1641 | '@rollup/rollup-linux-x64-gnu': 4.34.9 1642 | '@rollup/rollup-linux-x64-musl': 4.34.9 1643 | '@rollup/rollup-win32-arm64-msvc': 4.34.9 1644 | '@rollup/rollup-win32-ia32-msvc': 4.34.9 1645 | '@rollup/rollup-win32-x64-msvc': 4.34.9 1646 | fsevents: 2.3.3 1647 | 1648 | /run-applescript@7.0.0: 1649 | resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} 1650 | engines: {node: '>=18'} 1651 | dev: true 1652 | 1653 | /safer-buffer@2.1.2: 1654 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1655 | 1656 | /semver@6.3.1: 1657 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1658 | hasBin: true 1659 | dev: true 1660 | 1661 | /shebang-command@2.0.0: 1662 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1663 | engines: {node: '>=8'} 1664 | dependencies: 1665 | shebang-regex: 3.0.0 1666 | dev: true 1667 | 1668 | /shebang-regex@3.0.0: 1669 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1670 | engines: {node: '>=8'} 1671 | dev: true 1672 | 1673 | /signal-exit@4.1.0: 1674 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1675 | engines: {node: '>=14'} 1676 | dev: true 1677 | 1678 | /sirv@3.0.1: 1679 | resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} 1680 | engines: {node: '>=18'} 1681 | dependencies: 1682 | '@polka/url': 1.0.0-next.28 1683 | mrmime: 2.0.1 1684 | totalist: 3.0.1 1685 | dev: true 1686 | 1687 | /source-map-js@1.2.1: 1688 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1689 | engines: {node: '>=0.10.0'} 1690 | 1691 | /speakingurl@14.0.1: 1692 | resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} 1693 | engines: {node: '>=0.10.0'} 1694 | 1695 | /strip-final-newline@4.0.0: 1696 | resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} 1697 | engines: {node: '>=18'} 1698 | dev: true 1699 | 1700 | /superjson@2.2.2: 1701 | resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} 1702 | engines: {node: '>=16'} 1703 | dependencies: 1704 | copy-anything: 3.0.5 1705 | 1706 | /totalist@3.0.1: 1707 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 1708 | engines: {node: '>=6'} 1709 | dev: true 1710 | 1711 | /tr46@0.0.3: 1712 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1713 | dev: true 1714 | 1715 | /undici@6.21.1: 1716 | resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} 1717 | engines: {node: '>=18.17'} 1718 | 1719 | /unicorn-magic@0.3.0: 1720 | resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} 1721 | engines: {node: '>=18'} 1722 | dev: true 1723 | 1724 | /universalify@2.0.1: 1725 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 1726 | engines: {node: '>= 10.0.0'} 1727 | dev: true 1728 | 1729 | /unplugin-sri@0.0.5(vite@6.2.0): 1730 | resolution: {integrity: sha512-15Ca++ySUHKoMX+YXhgQIjUd4VTvPOXcrvalEh8jhzYSYGVnznNwnMnqd68VUS2321pwe2sze4ATZi801+oKxw==} 1731 | peerDependencies: 1732 | '@farmfe/core': '>=1' 1733 | '@nuxt/kit': ^3 1734 | '@nuxt/schema': ^3 1735 | esbuild: '*' 1736 | rollup: ^3 1737 | vite: '>=3' 1738 | webpack: ^4 || ^5 1739 | peerDependenciesMeta: 1740 | '@farmfe/core': 1741 | optional: true 1742 | '@nuxt/kit': 1743 | optional: true 1744 | '@nuxt/schema': 1745 | optional: true 1746 | esbuild: 1747 | optional: true 1748 | rollup: 1749 | optional: true 1750 | vite: 1751 | optional: true 1752 | webpack: 1753 | optional: true 1754 | dependencies: 1755 | unplugin: 2.2.0 1756 | vite: 6.2.0 1757 | dev: false 1758 | 1759 | /unplugin@2.2.0: 1760 | resolution: {integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw==} 1761 | engines: {node: '>=18.12.0'} 1762 | dependencies: 1763 | acorn: 8.14.1 1764 | webpack-virtual-modules: 0.6.2 1765 | dev: false 1766 | 1767 | /update-browserslist-db@1.1.3(browserslist@4.24.4): 1768 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 1769 | hasBin: true 1770 | peerDependencies: 1771 | browserslist: '>= 4.21.0' 1772 | dependencies: 1773 | browserslist: 4.24.4 1774 | escalade: 3.2.0 1775 | picocolors: 1.1.1 1776 | dev: true 1777 | 1778 | /vite-hot-client@0.2.4(vite@6.2.0): 1779 | resolution: {integrity: sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==} 1780 | peerDependencies: 1781 | vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 1782 | dependencies: 1783 | vite: 6.2.0 1784 | dev: true 1785 | 1786 | /vite-plugin-inspect@0.8.9(vite@6.2.0): 1787 | resolution: {integrity: sha512-22/8qn+LYonzibb1VeFZmISdVao5kC22jmEKm24vfFE8siEn47EpVcCLYMv6iKOYMJfjSvSJfueOwcFCkUnV3A==} 1788 | engines: {node: '>=14'} 1789 | peerDependencies: 1790 | '@nuxt/kit': '*' 1791 | vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1 1792 | peerDependenciesMeta: 1793 | '@nuxt/kit': 1794 | optional: true 1795 | dependencies: 1796 | '@antfu/utils': 0.7.10 1797 | '@rollup/pluginutils': 5.1.4 1798 | debug: 4.4.0 1799 | error-stack-parser-es: 0.1.5 1800 | fs-extra: 11.3.0 1801 | open: 10.1.0 1802 | perfect-debounce: 1.0.0 1803 | picocolors: 1.1.1 1804 | sirv: 3.0.1 1805 | vite: 6.2.0 1806 | transitivePeerDependencies: 1807 | - rollup 1808 | - supports-color 1809 | dev: true 1810 | 1811 | /vite-plugin-vue-devtools@7.7.2(vite@6.2.0)(vue@3.5.13): 1812 | resolution: {integrity: sha512-5V0UijQWiSBj32blkyPEqIbzc6HO9c1bwnBhx+ay2dzU0FakH+qMdNUT8nF9BvDE+i6I1U8CqCuJiO20vKEdQw==} 1813 | engines: {node: '>=v14.21.3'} 1814 | peerDependencies: 1815 | vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 1816 | dependencies: 1817 | '@vue/devtools-core': 7.7.2(vite@6.2.0)(vue@3.5.13) 1818 | '@vue/devtools-kit': 7.7.2 1819 | '@vue/devtools-shared': 7.7.2 1820 | execa: 9.5.2 1821 | sirv: 3.0.1 1822 | vite: 6.2.0 1823 | vite-plugin-inspect: 0.8.9(vite@6.2.0) 1824 | vite-plugin-vue-inspector: 5.3.1(vite@6.2.0) 1825 | transitivePeerDependencies: 1826 | - '@nuxt/kit' 1827 | - rollup 1828 | - supports-color 1829 | - vue 1830 | dev: true 1831 | 1832 | /vite-plugin-vue-inspector@5.3.1(vite@6.2.0): 1833 | resolution: {integrity: sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==} 1834 | peerDependencies: 1835 | vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 1836 | dependencies: 1837 | '@babel/core': 7.26.9 1838 | '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.9) 1839 | '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9) 1840 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.9) 1841 | '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9) 1842 | '@vue/babel-plugin-jsx': 1.3.0(@babel/core@7.26.9) 1843 | '@vue/compiler-dom': 3.5.13 1844 | kolorist: 1.8.0 1845 | magic-string: 0.30.17 1846 | vite: 6.2.0 1847 | transitivePeerDependencies: 1848 | - supports-color 1849 | dev: true 1850 | 1851 | /vite@6.2.0: 1852 | resolution: {integrity: sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==} 1853 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1854 | hasBin: true 1855 | peerDependencies: 1856 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1857 | jiti: '>=1.21.0' 1858 | less: '*' 1859 | lightningcss: ^1.21.0 1860 | sass: '*' 1861 | sass-embedded: '*' 1862 | stylus: '*' 1863 | sugarss: '*' 1864 | terser: ^5.16.0 1865 | tsx: ^4.8.1 1866 | yaml: ^2.4.2 1867 | peerDependenciesMeta: 1868 | '@types/node': 1869 | optional: true 1870 | jiti: 1871 | optional: true 1872 | less: 1873 | optional: true 1874 | lightningcss: 1875 | optional: true 1876 | sass: 1877 | optional: true 1878 | sass-embedded: 1879 | optional: true 1880 | stylus: 1881 | optional: true 1882 | sugarss: 1883 | optional: true 1884 | terser: 1885 | optional: true 1886 | tsx: 1887 | optional: true 1888 | yaml: 1889 | optional: true 1890 | dependencies: 1891 | esbuild: 0.25.0 1892 | postcss: 8.5.3 1893 | rollup: 4.34.9 1894 | optionalDependencies: 1895 | fsevents: 2.3.3 1896 | 1897 | /vue-router@4.5.0(vue@3.5.13): 1898 | resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==} 1899 | peerDependencies: 1900 | vue: ^3.2.0 1901 | dependencies: 1902 | '@vue/devtools-api': 6.6.4 1903 | vue: 3.5.13 1904 | dev: false 1905 | 1906 | /vue@3.5.13: 1907 | resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} 1908 | peerDependencies: 1909 | typescript: '*' 1910 | peerDependenciesMeta: 1911 | typescript: 1912 | optional: true 1913 | dependencies: 1914 | '@vue/compiler-dom': 3.5.13 1915 | '@vue/compiler-sfc': 3.5.13 1916 | '@vue/runtime-dom': 3.5.13 1917 | '@vue/server-renderer': 3.5.13(vue@3.5.13) 1918 | '@vue/shared': 3.5.13 1919 | 1920 | /web-streams-polyfill@3.3.3: 1921 | resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} 1922 | engines: {node: '>= 8'} 1923 | dev: false 1924 | 1925 | /webidl-conversions@3.0.1: 1926 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1927 | dev: true 1928 | 1929 | /webpack-virtual-modules@0.6.2: 1930 | resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} 1931 | dev: false 1932 | 1933 | /whatwg-encoding@3.1.1: 1934 | resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} 1935 | engines: {node: '>=18'} 1936 | dependencies: 1937 | iconv-lite: 0.6.3 1938 | 1939 | /whatwg-mimetype@4.0.0: 1940 | resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} 1941 | engines: {node: '>=18'} 1942 | 1943 | /whatwg-url@5.0.0: 1944 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1945 | dependencies: 1946 | tr46: 0.0.3 1947 | webidl-conversions: 3.0.1 1948 | dev: true 1949 | 1950 | /which@2.0.2: 1951 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1952 | engines: {node: '>= 8'} 1953 | hasBin: true 1954 | dependencies: 1955 | isexe: 2.0.0 1956 | dev: true 1957 | 1958 | /yallist@3.1.1: 1959 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1960 | dev: true 1961 | 1962 | /yoctocolors@2.1.1: 1963 | resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} 1964 | engines: {node: '>=18'} 1965 | dev: true 1966 | --------------------------------------------------------------------------------