From 23e5272fc740a55bc562cc8a6a8e825214ef88c4 Mon Sep 17 00:00:00 2001 From: rwv <7891383+rwv@users.noreply.github.com> Date: Tue, 31 Dec 2024 10:35:03 +0800 Subject: [PATCH] feat: setup how-to site and build pdfs (#1) * feat: add zh-CN view for example view * feat: add fonts * feat: add icon * feat: add @vueuse/core dependency and update ExampleView to use computedAsync for markdown processing * feat: add @page style * refactor: simplify ExampleView header by removing dynamic style binding from h1 * feat: use how to use lookscanned as example pdf * refactor: move to markdown content container * feat: add title to page * feat: integrate @unhead/vue for head management and add meta description to MarkdownContent component * feat: make view like real paper * refactor: move site title to individual file * feat: enhance zh-CN.md with multi-page processing support and clarify local data handling * refactor: replace ExampleView with HowToUseView and update routing * feat: add en markdown * fix: update font family in SiteTitle component from 'Noto Sans' to 'Noto Serif' * refactor: move markdown to how to use folder * docs: update README * refactor: update MarkdownContent and SiteTitle components for improved structure and styling; enhance markdown documentation with consistent header levels * refactor: wrap SiteTitle in RouterLink for improved navigation and add styling for link behavior * feat: add home view * chore: update page title in index.html from 'Vite App' to 'Look Scanned Examples' * fix: fix page padding * feat: add page controls and update font styling in App.vue * feat: build pages to pdfs * refactor: update PDF generation script to dynamically include languages from markdowns and change build command in package.json * chore: update .gitignore to include public/pdfs directory and modify PDF output path in build-pdfs.ts script * feat: add PDF download link to ThePageControls component * style: justify text alignment for paragraphs in MarkdownContent component * feat: add more langs how to use markdown * feat: update font styles and add support for multiple languages in MarkdownContent component * chore: enhance font loading in index.html and improve language display in HomeView.vue * feat: add multiple favicon options and apple-touch-icon to enhance site branding * feat: add headers for cloudflare pages * feat: enhance language support and styling in locale and HomeView components * fix: update font-family declarations in locale-font.css to include fallback 'Noto Serif' for better language support * feat: enhance MarkdownContent component to support text direction based on language * feat: add Git commit timestamp logging and update PDF metadata with commit time * refactor: replace anchor tags with router-link in HomeView.vue for improved navigation * feat: implement scroll behavior in router for improved navigation experience * feat: add Git commit information to Vite config and include footer component in App.vue * ci: add cloudflare and github pages ci * fix: fix typo * ci: add installation of system dependencies in CI workflow * ci: add release please and deps auto merge * chore: rename package and update setting in package.json * docs: update README.md * ci: install chrome before build pdfs * ci: update Chrome installation command in CI workflow * fix: update page title from "Look Scanned Examples" to "Look Scanned How To" * chore: install husky and commit lint * feat: add dark mode support and import darkmode styles * ci: add npm publishing step to CI workflow for release events * ci: add GPR publishing step to CI workflow * ci: conditionally trigger GPR publishing step on release events --- .github/dependabot.yml | 16 + .github/workflows/ci.yml | 247 ++ .github/workflows/deps-auto-merge.yml | 29 + .github/workflows/release-please.yml | 24 + .gitignore | 2 + .husky/commit-msg | 1 + .husky/pre-commit | 1 + .prettierignore | 2 + README.md | 41 +- commitlint.config.js | 1 + env.d.ts | 3 + index.html | 20 +- package.json | 55 +- pnpm-lock.yaml | 2943 ++++++++++++++++++++- public/_headers | 2 + public/apple-touch-icon.png | Bin 0 -> 2000 bytes public/favicon.ico | Bin 4286 -> 2528 bytes public/favicon.svg | 1 + public/pwa-192x192.png | Bin 0 -> 3391 bytes public/pwa-512x512.png | Bin 0 -> 12175 bytes public/pwa-maskable-192x192.png | Bin 0 -> 1796 bytes public/pwa-maskable-512x512.png | Bin 0 -> 6032 bytes scripts/build-pdfs.ts | 118 + src/App.vue | 51 +- src/assets/darkmode.css | 6 + src/assets/locale-font.css | 44 + src/components/MarkdownContent.vue | 81 + src/components/ScannerSvg.vue | 73 + src/components/SiteTitle.vue | 46 + src/components/TheFooter.vue | 37 + src/components/ThePageControls.vue | 55 + src/locales/display.ts | 27 + src/locales/how-to-use/markdowns/ar.md | 21 + src/locales/how-to-use/markdowns/de.md | 21 + src/locales/how-to-use/markdowns/en.md | 21 + src/locales/how-to-use/markdowns/es.md | 21 + src/locales/how-to-use/markdowns/fr.md | 21 + src/locales/how-to-use/markdowns/he.md | 21 + src/locales/how-to-use/markdowns/hi.md | 21 + src/locales/how-to-use/markdowns/id.md | 21 + src/locales/how-to-use/markdowns/index.ts | 52 + src/locales/how-to-use/markdowns/it.md | 21 + src/locales/how-to-use/markdowns/ja.md | 21 + src/locales/how-to-use/markdowns/ko.md | 21 + src/locales/how-to-use/markdowns/ms.md | 21 + src/locales/how-to-use/markdowns/nl.md | 21 + src/locales/how-to-use/markdowns/no.md | 21 + src/locales/how-to-use/markdowns/pl.md | 21 + src/locales/how-to-use/markdowns/pt.md | 21 + src/locales/how-to-use/markdowns/ru.md | 21 + src/locales/how-to-use/markdowns/sv.md | 21 + src/locales/how-to-use/markdowns/th.md | 21 + src/locales/how-to-use/markdowns/tr.md | 21 + src/locales/how-to-use/markdowns/vi.md | 21 + src/locales/how-to-use/markdowns/zh-CN.md | 21 + src/locales/how-to-use/markdowns/zh-HK.md | 21 + src/locales/how-to-use/markdowns/zh-TW.md | 21 + src/main.ts | 5 + src/router/index.ts | 13 + src/views/HomeView.vue | 51 +- src/views/HowToUseView.vue | 11 + vite.config.ts | 18 +- 62 files changed, 4458 insertions(+), 122 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/deps-auto-merge.yml create mode 100644 .github/workflows/release-please.yml create mode 100644 .husky/commit-msg create mode 100644 .husky/pre-commit create mode 100644 .prettierignore create mode 100644 commitlint.config.js create mode 100644 public/_headers create mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon.svg create mode 100644 public/pwa-192x192.png create mode 100644 public/pwa-512x512.png create mode 100644 public/pwa-maskable-192x192.png create mode 100644 public/pwa-maskable-512x512.png create mode 100644 scripts/build-pdfs.ts create mode 100644 src/assets/darkmode.css create mode 100644 src/assets/locale-font.css create mode 100644 src/components/MarkdownContent.vue create mode 100644 src/components/ScannerSvg.vue create mode 100644 src/components/SiteTitle.vue create mode 100644 src/components/TheFooter.vue create mode 100644 src/components/ThePageControls.vue create mode 100644 src/locales/display.ts create mode 100644 src/locales/how-to-use/markdowns/ar.md create mode 100644 src/locales/how-to-use/markdowns/de.md create mode 100644 src/locales/how-to-use/markdowns/en.md create mode 100644 src/locales/how-to-use/markdowns/es.md create mode 100644 src/locales/how-to-use/markdowns/fr.md create mode 100644 src/locales/how-to-use/markdowns/he.md create mode 100644 src/locales/how-to-use/markdowns/hi.md create mode 100644 src/locales/how-to-use/markdowns/id.md create mode 100644 src/locales/how-to-use/markdowns/index.ts create mode 100644 src/locales/how-to-use/markdowns/it.md create mode 100644 src/locales/how-to-use/markdowns/ja.md create mode 100644 src/locales/how-to-use/markdowns/ko.md create mode 100644 src/locales/how-to-use/markdowns/ms.md create mode 100644 src/locales/how-to-use/markdowns/nl.md create mode 100644 src/locales/how-to-use/markdowns/no.md create mode 100644 src/locales/how-to-use/markdowns/pl.md create mode 100644 src/locales/how-to-use/markdowns/pt.md create mode 100644 src/locales/how-to-use/markdowns/ru.md create mode 100644 src/locales/how-to-use/markdowns/sv.md create mode 100644 src/locales/how-to-use/markdowns/th.md create mode 100644 src/locales/how-to-use/markdowns/tr.md create mode 100644 src/locales/how-to-use/markdowns/vi.md create mode 100644 src/locales/how-to-use/markdowns/zh-CN.md create mode 100644 src/locales/how-to-use/markdowns/zh-HK.md create mode 100644 src/locales/how-to-use/markdowns/zh-TW.md create mode 100644 src/views/HowToUseView.vue diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..07c2054 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,16 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: 'npm' # See documentation for possible values + directory: '/' # Location of package manifests + schedule: + interval: 'daily' + + - package-ecosystem: 'github-actions' # See documentation for possible values + directory: '/' # Location of package manifests + schedule: + interval: 'daily' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..1697b37 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,247 @@ +name: CI + +on: + pull_request: + push: + branches: + - main + release: + types: [published] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Install system dependencies + run: sudo apt-get update && sudo apt-get install -y exiftool mupdf-tools + + - name: ESLint Check + run: pnpm run lint-check + + - name: Format Check + run: pnpm run format-check + + - name: TypeScript Check + run: pnpm run type-check + + - name: Install Chrome + run: pnpm dlx puppeteer browsers install + + - name: Build PDFs + run: pnpm run build:pdfs + + - name: Run build + run: pnpm run build + + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: dist + path: dist + + deploy-to-cloudflare-pages-staging: + runs-on: ubuntu-latest + needs: + - build + + environment: + name: cloudflare-pages-staging + url: ${{ steps.deployment.outputs.deployment-url }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + name: dist + path: dist + + - name: Deploy to Cloudflare Pages + uses: cloudflare/wrangler-action@v3 + id: deployment + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy dist --project-name=how-to-lookscanned + + deploy-to-cloudflare-pages: + runs-on: ubuntu-latest + needs: + - build + if: github.event_name == 'release' + environment: + name: cloudflare-pages + url: ${{ steps.deployment.outputs.deployment-url }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + name: dist + path: dist + + - name: Deploy to Cloudflare Pages Release + uses: cloudflare/wrangler-action@v3 + id: deployment + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + command: pages deploy dist --project-name=how-to-lookscanned --branch=release + + deploy-to-github-pages: + runs-on: ubuntu-latest + needs: + - build + if: github.event_name == 'release' + permissions: + contents: read + pages: write + id-token: write + + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + name: dist + path: dist + + - name: Setup Pages + uses: actions/configure-pages@v5 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + # Upload entire repository + path: 'dist' + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 + + publish-to-npm: + runs-on: ubuntu-latest + needs: + - build + if: github.event_name == 'release' + environment: + name: npm + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + name: dist + path: dist + + - name: Publish Assets + run: pnpm publish --provenance --no-git-checks + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + publish-gpr: + needs: build + runs-on: ubuntu-latest + if: github.event_name == 'release' + permissions: + contents: read + packages: write + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + run_install: false + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + name: dist + path: dist + + - run: npm publish + env: + NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.github/workflows/deps-auto-merge.yml b/.github/workflows/deps-auto-merge.yml new file mode 100644 index 0000000..987098a --- /dev/null +++ b/.github/workflows/deps-auto-merge.yml @@ -0,0 +1,29 @@ +name: Dependabot auto-merge + +on: pull_request_target + +permissions: + contents: read + pull-requests: read + +jobs: + dependabot: + runs-on: ubuntu-latest + + if: github.event.pull_request.user.login == 'dependabot[bot]' + + steps: + - name: Dependabot metadata + id: dependabot_metadata + uses: dependabot/fetch-metadata@v2.2.0 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Authenticate cli with a PAT + run: echo "${{ secrets.DEPENDABOT_TOKEN }}" | gh auth login --with-token + + - name: Enable auto-merge for Dependabot PRs + if: steps.dependabot_metadata.outputs.update-type == 'version-update:semver-minor' || steps.dependabot_metadata.outputs.update-type == 'version-update:semver-patch' + run: gh pr merge --auto --squash "$PR_URL" + env: + PR_URL: ${{ github.event.pull_request.html_url }} diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 0000000..41a76b0 --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,24 @@ +on: + push: + branches: + - main + +permissions: + contents: write + pull-requests: write + +name: Release Please + +jobs: + release-please: + runs-on: ubuntu-latest + steps: + - uses: googleapis/release-please-action@v4 + with: + # this assumes that you have created a personal access token + # (PAT) and configured it as a GitHub action secret named + # `MY_RELEASE_PLEASE_TOKEN` (this secret name is not important). + token: ${{ secrets.RELEASE_PLEASE_TOKEN }} + # this is a built-in strategy in release-please, see "Action Inputs" + # for more options + release-type: node diff --git a/.gitignore b/.gitignore index 8ee54e8..cab8a28 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,5 @@ coverage *.sw? *.tsbuildinfo + +public/pdfs/ diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..0a4b97d --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +npx --no -- commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..dff836d --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +pnpm exec lint-staged \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..e21987e --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +CHANGELOG.md +pnpm-lock.yaml \ No newline at end of file diff --git a/README.md b/README.md index de93adc..a76d491 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,16 @@ -# lookscanned-example-pdfs +# Look Scanned How To -This template should help get you started developing with Vue 3 in Vite. +[![CI](https://github.com/lookscanned/how-to/actions/workflows/ci.yml/badge.svg)](https://github.com/lookscanned/how-to/actions/workflows/ci.yml) -## Recommended IDE Setup +[how-to.lookscanned.io](https://how-to.lookscanned.io) -[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). +This is a repository for the how-to-use documentation used in the Look Scanned project. -## Type Support for `.vue` Imports in TS +## How to add a new language -TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. +1. Add the corresponding markdown file to the `src/locales/how-to-use/markdowns` directory. +2. Update the `src/locales/how-to-use/markdowns/index.ts` file to include the new markdown file. -## Customize configuration +## License -See [Vite Configuration Reference](https://vite.dev/config/). - -## Project Setup - -```sh -pnpm install -``` - -### Compile and Hot-Reload for Development - -```sh -pnpm dev -``` - -### Type-Check, Compile and Minify for Production - -```sh -pnpm build -``` - -### Lint with [ESLint](https://eslint.org/) - -```sh -pnpm lint -``` +MIT License diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..7c4ff4d --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1 @@ +export default { extends: ['@commitlint/config-conventional'] } diff --git a/env.d.ts b/env.d.ts index 11f02fe..aa66467 100644 --- a/env.d.ts +++ b/env.d.ts @@ -1 +1,4 @@ /// + +declare const __GIT_COMMIT__: string +declare const __GIT_COMMIT_TIME__: number diff --git a/index.html b/index.html index 9e5fc8f..75811cf 100644 --- a/index.html +++ b/index.html @@ -1,10 +1,20 @@ - + - - - - Vite App + + + Look Scanned How To + + + + + + + +
diff --git a/package.json b/package.json index 551ea97..1fef5f9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "lookscanned-example-pdfs", + "name": "@lookscanned/how-to", "version": "0.0.0", - "private": true, + "private": false, "type": "module", "scripts": { "dev": "vite", @@ -10,14 +10,51 @@ "build-only": "vite build", "type-check": "vue-tsc --build", "lint": "eslint . --fix", - "format": "prettier --write src/" + "lint-check": "eslint . --no-fix", + "format": "prettier --write src/", + "format-check": "prettier --check src/", + "build:pdfs": "vite-node scripts/build-pdfs.ts", + "prepare": "husky" }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/lookscanned/how-to.git" + }, + "homepage": "https://github.com/lookscanned/how-to", + "bugs": { + "url": "https://github.com/lookscanned/how-to/issues" + }, + "keywords": [ + "lookscanned", + "how-to", + "documentation", + "pdf", + "markdown" + ], + "author": "lookscanned", + "license": "MIT", + "files": [ + "dist" + ], "dependencies": { + "@unhead/vue": "^1.11.14", + "@vueuse/core": "^12.2.0", + "dompurify": "^3.2.2", + "express": "^4.21.2", + "marked": "^15.0.3", + "puppeteer": "^23.11.1", + "vite-node": "^2.1.8", "vue": "^3.5.13", "vue-router": "^4.4.5" }, "devDependencies": { + "@commitlint/cli": "^19.6.1", + "@commitlint/config-conventional": "^19.6.0", "@tsconfig/node22": "^22.0.0", + "@types/express": "^5.0.0", "@types/node": "^22.9.3", "@vitejs/plugin-vue": "^5.2.1", "@vue/eslint-config-prettier": "^10.1.0", @@ -25,6 +62,8 @@ "@vue/tsconfig": "^0.7.0", "eslint": "^9.14.0", "eslint-plugin-vue": "^9.30.0", + "husky": "^9.1.7", + "lint-staged": "^15.3.0", "npm-run-all2": "^7.0.1", "prettier": "^3.3.3", "typescript": "~5.6.3", @@ -32,5 +71,11 @@ "vite-plugin-vue-devtools": "^7.6.5", "vue-tsc": "^2.1.10" }, - "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee" -} + "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee", + "lint-staged": { + "*.{js,ts,jsx,tsx,vue}": [ + "eslint --fix", + "prettier --write" + ] + } +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a855301..d9aa55f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,27 @@ importers: .: dependencies: + '@unhead/vue': + specifier: ^1.11.14 + version: 1.11.14(vue@3.5.13(typescript@5.6.3)) + '@vueuse/core': + specifier: ^12.2.0 + version: 12.2.0(typescript@5.6.3) + dompurify: + specifier: ^3.2.2 + version: 3.2.2 + express: + specifier: ^4.21.2 + version: 4.21.2 + marked: + specifier: ^15.0.3 + version: 15.0.3 + puppeteer: + specifier: ^23.11.1 + version: 23.11.1(typescript@5.6.3) + vite-node: + specifier: ^2.1.8 + version: 2.1.8(@types/node@22.10.1) vue: specifier: ^3.5.13 version: 3.5.13(typescript@5.6.3) @@ -15,30 +36,45 @@ importers: specifier: ^4.4.5 version: 4.5.0(vue@3.5.13(typescript@5.6.3)) devDependencies: + '@commitlint/cli': + specifier: ^19.6.1 + version: 19.6.1(@types/node@22.10.1)(typescript@5.6.3) + '@commitlint/config-conventional': + specifier: ^19.6.0 + version: 19.6.0 '@tsconfig/node22': specifier: ^22.0.0 version: 22.0.0 + '@types/express': + specifier: ^5.0.0 + version: 5.0.0 '@types/node': specifier: ^22.9.3 version: 22.10.1 '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.0.2(@types/node@22.10.1))(vue@3.5.13(typescript@5.6.3)) + version: 5.2.1(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3)) '@vue/eslint-config-prettier': specifier: ^10.1.0 - version: 10.1.0(eslint@9.16.0)(prettier@3.4.1) + version: 10.1.0(eslint@9.16.0(jiti@2.4.2))(prettier@3.4.1) '@vue/eslint-config-typescript': specifier: ^14.1.3 - version: 14.1.4(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.3))(eslint-plugin-vue@9.32.0(eslint@9.16.0))(eslint@9.16.0)(typescript@5.6.3) + version: 14.1.4(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3))(eslint-plugin-vue@9.32.0(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) '@vue/tsconfig': specifier: ^0.7.0 version: 0.7.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3)) eslint: specifier: ^9.14.0 - version: 9.16.0 + version: 9.16.0(jiti@2.4.2) eslint-plugin-vue: specifier: ^9.30.0 - version: 9.32.0(eslint@9.16.0) + version: 9.32.0(eslint@9.16.0(jiti@2.4.2)) + husky: + specifier: ^9.1.7 + version: 9.1.7 + lint-staged: + specifier: ^15.3.0 + version: 15.3.0 npm-run-all2: specifier: ^7.0.1 version: 7.0.1 @@ -50,10 +86,10 @@ importers: version: 5.6.3 vite: specifier: ^6.0.1 - version: 6.0.2(@types/node@22.10.1) + version: 6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1) vite-plugin-vue-devtools: specifier: ^7.6.5 - version: 7.6.7(rollup@4.28.0)(vite@6.0.2(@types/node@22.10.1))(vue@3.5.13(typescript@5.6.3)) + version: 7.6.7(rollup@4.28.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3)) vue-tsc: specifier: ^2.1.10 version: 2.1.10(typescript@5.6.3) @@ -203,144 +239,495 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} + '@commitlint/cli@19.6.1': + resolution: {integrity: sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ==} + engines: {node: '>=v18'} + hasBin: true + + '@commitlint/config-conventional@19.6.0': + resolution: {integrity: sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ==} + engines: {node: '>=v18'} + + '@commitlint/config-validator@19.5.0': + resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==} + engines: {node: '>=v18'} + + '@commitlint/ensure@19.5.0': + resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==} + engines: {node: '>=v18'} + + '@commitlint/execute-rule@19.5.0': + resolution: {integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==} + engines: {node: '>=v18'} + + '@commitlint/format@19.5.0': + resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==} + engines: {node: '>=v18'} + + '@commitlint/is-ignored@19.6.0': + resolution: {integrity: sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==} + engines: {node: '>=v18'} + + '@commitlint/lint@19.6.0': + resolution: {integrity: sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==} + engines: {node: '>=v18'} + + '@commitlint/load@19.6.1': + resolution: {integrity: sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==} + engines: {node: '>=v18'} + + '@commitlint/message@19.5.0': + resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==} + engines: {node: '>=v18'} + + '@commitlint/parse@19.5.0': + resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==} + engines: {node: '>=v18'} + + '@commitlint/read@19.5.0': + resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==} + engines: {node: '>=v18'} + + '@commitlint/resolve-extends@19.5.0': + resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==} + engines: {node: '>=v18'} + + '@commitlint/rules@19.6.0': + resolution: {integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==} + engines: {node: '>=v18'} + + '@commitlint/to-lines@19.5.0': + resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==} + engines: {node: '>=v18'} + + '@commitlint/top-level@19.5.0': + resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==} + engines: {node: '>=v18'} + + '@commitlint/types@19.5.0': + resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} + engines: {node: '>=v18'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.24.0': resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.24.0': resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.24.0': resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.24.0': resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.24.0': resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.24.0': resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.24.0': resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.24.0': resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.24.0': resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.24.0': resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.24.0': resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.24.0': resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.24.0': resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.24.0': resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.24.0': resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.24.0': resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.24.0': resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.24.0': resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.24.0': resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.24.0': resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.24.0': resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.24.0': resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.24.0': resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.24.0': resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} engines: {node: '>=18'} @@ -438,6 +825,11 @@ packages: '@polka/url@1.0.0-next.28': resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@puppeteer/browsers@2.6.1': + resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==} + engines: {node: '>=18'} + hasBin: true + '@rollup/pluginutils@5.1.3': resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} @@ -544,18 +936,63 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@tsconfig/node22@22.0.0': resolution: {integrity: sha512-twLQ77zevtxobBOD4ToAtVmuYrpeYUh3qh+TEp+08IWhpsrIflVHqQ1F1CiPxQGL7doCdBIOOCF+1Tm833faNg==} + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/conventional-commits-parser@5.0.1': + resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/express-serve-static-core@5.0.2': + resolution: {integrity: sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==} + + '@types/express@5.0.0': + resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/node@22.10.1': resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} + '@types/qs@6.9.17': + resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@typescript-eslint/eslint-plugin@8.17.0': resolution: {integrity: sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -618,6 +1055,20 @@ packages: resolution: {integrity: sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unhead/dom@1.11.14': + resolution: {integrity: sha512-FaHCWo9JR4h7PCpSRaXuMC6ifXOuBzlI0PD1MmUcxND2ayDl1d6DauIbN8TUf9TDRxNkrK1Ehb0OCXjC1ZJtrg==} + + '@unhead/schema@1.11.14': + resolution: {integrity: sha512-V9W9u5tF1/+TiLqxu+Qvh1ShoMDkPEwHoEo4DKdDG6ko7YlbzFfDxV6el9JwCren45U/4Vy/4Xi7j8OH02wsiA==} + + '@unhead/shared@1.11.14': + resolution: {integrity: sha512-41Qt4PJKYVrEGOTXgBJLRYrEu3S7n5stoB4TFC6312CIBVedXqg7voHQurn32LVDjpfJftjLa2ggCjpqdqoRDw==} + + '@unhead/vue@1.11.14': + resolution: {integrity: sha512-6nfi7FsZ936gscmj+1nUB1pybiFMFbnuEFo7B/OY2klpLWsYDUOVvpsJhbu7C3u7wkTlJXglmAk6jdd8I7WgZA==} + peerDependencies: + vue: '>=2.7 || >=3' + '@vitejs/plugin-vue@5.2.1': resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} engines: {node: ^18.0.0 || >=20.0.0} @@ -732,6 +1183,23 @@ packages: vue: optional: true + '@vueuse/core@12.2.0': + resolution: {integrity: sha512-jksyNu+5EGwggNkRWd6xX+8qBkYbmrwdFQMgCABsz+wq8bKF6w3soPFLB8vocFp3wFIzn0OYkSPM9JP+AFKwsg==} + + '@vueuse/metadata@12.2.0': + resolution: {integrity: sha512-x6zynZtTh1l52m0y8d/EgzpshnMjg8cNZ2KWoncJ62Z5qPSGoc4FUunmMVrrRM/I/5542rTEY89CGftngZvrkQ==} + + '@vueuse/shared@12.2.0': + resolution: {integrity: sha512-SRr4AZwv/giS+EmyA1ZIzn3/iALjjnWAGaBNmoDTMEob9JwQaevAocuaMDnPAvU7Z35Y5g3CFRusCWgp1gVJ3Q==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -742,12 +1210,31 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + alien-signals@0.2.2: resolution: {integrity: sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A==} + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -759,12 +1246,51 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-events@2.5.0: + resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} + + bare-fs@2.3.5: + resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} + + bare-os@2.4.4: + resolution: {integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==} + + bare-path@2.1.3: + resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} + + bare-stream@2.6.1: + resolution: {integrity: sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + birpc@0.2.19: resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} @@ -783,10 +1309,32 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -798,6 +1346,27 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chromium-bidi@0.11.0: + resolution: {integrity: sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==} + peerDependencies: + devtools-protocol: '*' + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -805,16 +1374,71 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + copy-anything@3.0.5: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} + cosmiconfig-typescript-loader@6.1.0: + resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -827,9 +1451,25 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -839,6 +1479,15 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -854,16 +1503,101 @@ packages: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + devtools-protocol@0.0.1367902: + resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==} + + dompurify@3.2.2: + resolution: {integrity: sha512-YMM+erhdZ2nkZ4fTNRTSI94mb7VG7uVF5vj5Zde7tImgnhZE3R6YW/IACGIHb2ux+QkEXMhe591N+5jWOmL4Zw==} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + electron-to-chromium@1.5.68: resolution: {integrity: sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-stack-parser-es@0.1.5: resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.24.0: resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} engines: {node: '>=18'} @@ -873,10 +1607,18 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + eslint-config-prettier@9.1.0: resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true @@ -937,6 +1679,11 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -956,16 +1703,39 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + execa@9.5.1: resolution: {integrity: sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==} engines: {node: ^18.19.0 || >=20.5.0} + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -976,9 +1746,15 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} @@ -991,10 +1767,18 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -1002,6 +1786,14 @@ packages: flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} @@ -1011,14 +1803,49 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-intrinsic@1.2.6: + resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + get-stream@9.0.1: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + get-uri@6.0.4: + resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + engines: {node: '>= 14'} + + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1027,6 +1854,10 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -1039,6 +1870,10 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1049,6 +1884,14 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -1060,10 +1903,38 @@ packages: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + human-signals@8.0.0: resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} engines: {node: '>=18.18.0'} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1072,10 +1943,31 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1085,6 +1977,18 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -1098,14 +2002,26 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-stream@4.0.1: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + is-unicode-supported@2.1.0: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} @@ -1125,6 +2041,10 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1132,6 +2052,9 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -1140,6 +2063,9 @@ packages: json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@4.0.0: resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -1147,6 +2073,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -1158,6 +2087,10 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -1168,34 +2101,134 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lint-staged@15.3.0: + resolution: {integrity: sha512-vHFahytLoF2enJklgtOtCtIjZrKD/LoxlaUusd5nh7dWv/dkKQJY74ndFSzxCdv7g0ueGg1ORgTSt4Y9LPZn9A==} + engines: {node: '>=18.12.0'} + hasBin: true + + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + engines: {node: '>=18.0.0'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + magic-string@0.30.14: resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} + marked@15.0.3: + resolution: {integrity: sha512-Ai0cepvl2NHnTcO9jYDtcOEtVBNVYR31XnEA3BndO7f5As1wzpcOceSUM8FDkNLJNIODcLpDTWay/qQhqbuMvg==} + engines: {node: '>= 18'} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1203,6 +2236,9 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} @@ -1210,6 +2246,9 @@ packages: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1229,6 +2268,14 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} @@ -1241,6 +2288,10 @@ packages: engines: {node: ^18.17.0 || >=20.5.0, npm: '>= 9'} hasBin: true + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@6.0.0: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} @@ -1248,6 +2299,25 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + object-inspect@1.13.3: + resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + open@10.1.0: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} engines: {node: '>=18'} @@ -1260,18 +2330,42 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + pac-proxy-agent@7.1.0: + resolution: {integrity: sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + parse-ms@4.0.0: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -1279,6 +2373,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -1287,9 +2385,15 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -1334,23 +2438,84 @@ packages: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + puppeteer-core@23.11.1: + resolution: {integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==} + engines: {node: '>=18'} + + puppeteer@23.11.1: + resolution: {integrity: sha512-53uIX3KR5en8l7Vd8n5DUv90Ae9QDQsyIthaUFVzwV6yU750RjqRznEtNMBT20VthqAdemnJN+hxVdmMHKt7Zw==} + engines: {node: '>=18'} + hasBin: true + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + read-package-json-fast@4.0.0: resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==} engines: {node: ^18.17.0 || >=20.5.0} + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rfdc@1.4.1: @@ -1368,6 +2533,12 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -1377,6 +2548,17 @@ packages: engines: {node: '>=10'} hasBin: true + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -1389,6 +2571,22 @@ packages: resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} engines: {node: '>= 0.4'} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -1397,14 +2595,76 @@ packages: resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} engines: {node: '>=18'} + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + speakingurl@14.0.1: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + streamx@2.21.1: + resolution: {integrity: sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + strip-final-newline@4.0.0: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} @@ -1428,10 +2688,33 @@ packages: resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} + tar-fs@3.0.6: + resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -1445,6 +2728,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -1453,6 +2741,13 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + typescript-eslint@8.17.0: resolution: {integrity: sha512-409VXvFd/f1br1DCbuKNFqQpXICoTB+V51afcwG1pn1a3Cp92MqAUges3YjwEdQ0cMUoCIodjVDAYzyD8h3SYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1468,9 +2763,19 @@ packages: engines: {node: '>=14.17'} hasBin: true + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + unhead@1.11.14: + resolution: {integrity: sha512-XmXW0aZyX9kGk9ejCKCSvv/J4T3Rt4hoAe2EofM+nhG+zwZ7AArUMK/0F/fj6FTkfgY0u0/JryE00qUDULgygA==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -1479,6 +2784,10 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + update-browserslist-db@1.1.1: resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true @@ -1491,11 +2800,24 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + vite-hot-client@0.2.4: resolution: {integrity: sha512-a1nzURqO7DDmnXqabFOliz908FRmIppkBKsJthS8rbe8hBEXwEwe4C3Pp33Z1JoFCYfVL4kTOMLKk0ZZxREIeA==} peerDependencies: vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 + vite-node@2.1.8: + resolution: {integrity: sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + vite-plugin-inspect@0.8.8: resolution: {integrity: sha512-aZlBuXsWUPJFmMK92GIv6lH7LrwG2POu4KJ+aEdcqnu92OAf+rhBnfMDQvxIJPEB7hE2t5EyY/PMgf5aDLT8EA==} engines: {node: '>=14'} @@ -1517,6 +2839,37 @@ packages: peerDependencies: vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + vite@6.0.2: resolution: {integrity: sha512-XdQ+VsY2tJpBsKGs0wf3U/+azx8BBpYRHFAyKm5VeEZNOJZRB63q7Sc8Iup3k0TrN3KO6QgyzFf+opSbfY1y0g==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -1599,21 +2952,74 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + yoctocolors@2.1.1: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} + zhead@2.2.4: + resolution: {integrity: sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==} + + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + snapshots: '@ampproject/remapping@2.3.0': @@ -1812,81 +3218,332 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@commitlint/cli@19.6.1(@types/node@22.10.1)(typescript@5.6.3)': + dependencies: + '@commitlint/format': 19.5.0 + '@commitlint/lint': 19.6.0 + '@commitlint/load': 19.6.1(@types/node@22.10.1)(typescript@5.6.3) + '@commitlint/read': 19.5.0 + '@commitlint/types': 19.5.0 + tinyexec: 0.3.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@19.6.0': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + ajv: 8.17.1 + + '@commitlint/ensure@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@19.5.0': {} + + '@commitlint/format@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + + '@commitlint/is-ignored@19.6.0': + dependencies: + '@commitlint/types': 19.5.0 + semver: 7.6.3 + + '@commitlint/lint@19.6.0': + dependencies: + '@commitlint/is-ignored': 19.6.0 + '@commitlint/parse': 19.5.0 + '@commitlint/rules': 19.6.0 + '@commitlint/types': 19.5.0 + + '@commitlint/load@19.6.1(@types/node@22.10.1)(typescript@5.6.3)': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/execute-rule': 19.5.0 + '@commitlint/resolve-extends': 19.5.0 + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.6.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.10.1)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@19.5.0': {} + + '@commitlint/parse@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@19.5.0': + dependencies: + '@commitlint/top-level': 19.5.0 + '@commitlint/types': 19.5.0 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 0.3.2 + + '@commitlint/resolve-extends@19.5.0': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/types': 19.5.0 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@19.6.0': + dependencies: + '@commitlint/ensure': 19.5.0 + '@commitlint/message': 19.5.0 + '@commitlint/to-lines': 19.5.0 + '@commitlint/types': 19.5.0 + + '@commitlint/to-lines@19.5.0': {} + + '@commitlint/top-level@19.5.0': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.5.0': + dependencies: + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.4.1 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.23.1': + optional: true + '@esbuild/aix-ppc64@0.24.0': optional: true + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.23.1': + optional: true + '@esbuild/android-arm64@0.24.0': optional: true + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.23.1': + optional: true + '@esbuild/android-arm@0.24.0': optional: true + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.23.1': + optional: true + '@esbuild/android-x64@0.24.0': optional: true + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.23.1': + optional: true + '@esbuild/darwin-arm64@0.24.0': optional: true + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.23.1': + optional: true + '@esbuild/darwin-x64@0.24.0': optional: true + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.23.1': + optional: true + '@esbuild/freebsd-arm64@0.24.0': optional: true + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.23.1': + optional: true + '@esbuild/freebsd-x64@0.24.0': optional: true + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.23.1': + optional: true + '@esbuild/linux-arm64@0.24.0': optional: true + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.23.1': + optional: true + '@esbuild/linux-arm@0.24.0': optional: true + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.23.1': + optional: true + '@esbuild/linux-ia32@0.24.0': optional: true + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.23.1': + optional: true + '@esbuild/linux-loong64@0.24.0': optional: true + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.23.1': + optional: true + '@esbuild/linux-mips64el@0.24.0': optional: true + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.23.1': + optional: true + '@esbuild/linux-ppc64@0.24.0': optional: true + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.23.1': + optional: true + '@esbuild/linux-riscv64@0.24.0': optional: true + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.23.1': + optional: true + '@esbuild/linux-s390x@0.24.0': optional: true + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.23.1': + optional: true + '@esbuild/linux-x64@0.24.0': optional: true + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.23.1': + optional: true + '@esbuild/netbsd-x64@0.24.0': optional: true + '@esbuild/openbsd-arm64@0.23.1': + optional: true + '@esbuild/openbsd-arm64@0.24.0': optional: true + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.23.1': + optional: true + '@esbuild/openbsd-x64@0.24.0': optional: true + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.23.1': + optional: true + '@esbuild/sunos-x64@0.24.0': optional: true + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.23.1': + optional: true + '@esbuild/win32-arm64@0.24.0': optional: true + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.23.1': + optional: true + '@esbuild/win32-ia32@0.24.0': optional: true + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.23.1': + optional: true + '@esbuild/win32-x64@0.24.0': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.16.0(jiti@2.4.2))': dependencies: - eslint: 9.16.0 + eslint: 9.16.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -1969,6 +3626,19 @@ snapshots: '@polka/url@1.0.0-next.28': {} + '@puppeteer/browsers@2.6.1': + dependencies: + debug: 4.4.0 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.6.3 + tar-fs: 3.0.6 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + '@rollup/pluginutils@5.1.3(rollup@4.28.0)': dependencies: '@types/estree': 1.0.6 @@ -2035,25 +3705,83 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} + '@tootallnate/quickjs-emscripten@0.23.0': {} + '@tsconfig/node22@22.0.0': {} - '@types/estree@1.0.6': {} + '@types/body-parser@1.19.5': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 22.10.1 - '@types/json-schema@7.0.15': {} + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.10.1 + + '@types/conventional-commits-parser@5.0.1': + dependencies: + '@types/node': 22.10.1 + + '@types/estree@1.0.6': {} + + '@types/express-serve-static-core@5.0.2': + dependencies: + '@types/node': 22.10.1 + '@types/qs': 6.9.17 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express@5.0.0': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 5.0.2 + '@types/qs': 6.9.17 + '@types/serve-static': 1.15.7 + + '@types/http-errors@2.0.4': {} + + '@types/json-schema@7.0.15': {} + + '@types/mime@1.3.5': {} '@types/node@22.10.1': dependencies: undici-types: 6.20.0 - '@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.3))(eslint@9.16.0)(typescript@5.6.3)': + '@types/qs@6.9.17': {} + + '@types/range-parser@1.2.7': {} + + '@types/send@0.17.4': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 22.10.1 + + '@types/serve-static@1.15.7': + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 22.10.1 + '@types/send': 0.17.4 + + '@types/trusted-types@2.0.7': + optional: true + + '@types/web-bluetooth@0.0.20': {} + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 22.10.1 + optional: true + + '@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.17.0(eslint@9.16.0)(typescript@5.6.3) + '@typescript-eslint/parser': 8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) '@typescript-eslint/scope-manager': 8.17.0 - '@typescript-eslint/type-utils': 8.17.0(eslint@9.16.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0)(typescript@5.6.3) + '@typescript-eslint/type-utils': 8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.17.0 - eslint: 9.16.0 + eslint: 9.16.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -2063,14 +3791,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.3)': + '@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 8.17.0 '@typescript-eslint/types': 8.17.0 '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.17.0 debug: 4.3.7 - eslint: 9.16.0 + eslint: 9.16.0(jiti@2.4.2) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -2081,12 +3809,12 @@ snapshots: '@typescript-eslint/types': 8.17.0 '@typescript-eslint/visitor-keys': 8.17.0 - '@typescript-eslint/type-utils@8.17.0(eslint@9.16.0)(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) debug: 4.3.7 - eslint: 9.16.0 + eslint: 9.16.0(jiti@2.4.2) ts-api-utils: 1.4.3(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 @@ -2110,13 +3838,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.17.0(eslint@9.16.0)(typescript@5.6.3)': + '@typescript-eslint/utils@8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.17.0 '@typescript-eslint/types': 8.17.0 '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.6.3) - eslint: 9.16.0 + eslint: 9.16.0(jiti@2.4.2) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -2127,9 +3855,32 @@ snapshots: '@typescript-eslint/types': 8.17.0 eslint-visitor-keys: 4.2.0 - '@vitejs/plugin-vue@5.2.1(vite@6.0.2(@types/node@22.10.1))(vue@3.5.13(typescript@5.6.3))': + '@unhead/dom@1.11.14': + dependencies: + '@unhead/schema': 1.11.14 + '@unhead/shared': 1.11.14 + + '@unhead/schema@1.11.14': + dependencies: + hookable: 5.5.3 + zhead: 2.2.4 + + '@unhead/shared@1.11.14': + dependencies: + '@unhead/schema': 1.11.14 + + '@unhead/vue@1.11.14(vue@3.5.13(typescript@5.6.3))': dependencies: - vite: 6.0.2(@types/node@22.10.1) + '@unhead/schema': 1.11.14 + '@unhead/shared': 1.11.14 + defu: 6.1.4 + hookable: 5.5.3 + unhead: 1.11.14 + vue: 3.5.13(typescript@5.6.3) + + '@vitejs/plugin-vue@5.2.1(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))': + dependencies: + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1) vue: 3.5.13(typescript@5.6.3) '@volar/language-core@2.4.10': @@ -2211,14 +3962,14 @@ snapshots: '@vue/devtools-api@6.6.4': {} - '@vue/devtools-core@7.6.7(vite@6.0.2(@types/node@22.10.1))(vue@3.5.13(typescript@5.6.3))': + '@vue/devtools-core@7.6.7(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3))': dependencies: '@vue/devtools-kit': 7.6.7 '@vue/devtools-shared': 7.6.7 mitt: 3.0.1 nanoid: 5.0.9 pathe: 1.1.2 - vite-hot-client: 0.2.4(vite@6.0.2(@types/node@22.10.1)) + vite-hot-client: 0.2.4(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1)) vue: 3.5.13(typescript@5.6.3) transitivePeerDependencies: - vite @@ -2237,23 +3988,23 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/eslint-config-prettier@10.1.0(eslint@9.16.0)(prettier@3.4.1)': + '@vue/eslint-config-prettier@10.1.0(eslint@9.16.0(jiti@2.4.2))(prettier@3.4.1)': dependencies: - eslint: 9.16.0 - eslint-config-prettier: 9.1.0(eslint@9.16.0) - eslint-plugin-prettier: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint@9.16.0)(prettier@3.4.1) + eslint: 9.16.0(jiti@2.4.2) + eslint-config-prettier: 9.1.0(eslint@9.16.0(jiti@2.4.2)) + eslint-plugin-prettier: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2))(prettier@3.4.1) prettier: 3.4.1 transitivePeerDependencies: - '@types/eslint' - '@vue/eslint-config-typescript@14.1.4(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.3))(eslint-plugin-vue@9.32.0(eslint@9.16.0))(eslint@9.16.0)(typescript@5.6.3)': + '@vue/eslint-config-typescript@14.1.4(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3))(eslint-plugin-vue@9.32.0(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: - '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.3))(eslint@9.16.0)(typescript@5.6.3) - eslint: 9.16.0 - eslint-plugin-vue: 9.32.0(eslint@9.16.0) + '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) + eslint: 9.16.0(jiti@2.4.2) + eslint-plugin-vue: 9.32.0(eslint@9.16.0(jiti@2.4.2)) fast-glob: 3.3.2 - typescript-eslint: 8.17.0(eslint@9.16.0)(typescript@5.6.3) - vue-eslint-parser: 9.4.3(eslint@9.16.0) + typescript-eslint: 8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) + vue-eslint-parser: 9.4.3(eslint@9.16.0(jiti@2.4.2)) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -2302,12 +4053,41 @@ snapshots: typescript: 5.6.3 vue: 3.5.13(typescript@5.6.3) + '@vueuse/core@12.2.0(typescript@5.6.3)': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 12.2.0 + '@vueuse/shared': 12.2.0(typescript@5.6.3) + vue: 3.5.13(typescript@5.6.3) + transitivePeerDependencies: + - typescript + + '@vueuse/metadata@12.2.0': {} + + '@vueuse/shared@12.2.0(typescript@5.6.3)': + dependencies: + vue: 3.5.13(typescript@5.6.3) + transitivePeerDependencies: + - typescript + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 acorn@8.14.0: {} + agent-base@7.1.3: {} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -2315,8 +4095,23 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + alien-signals@0.2.2: {} + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -2325,10 +4120,64 @@ snapshots: argparse@2.0.1: {} + array-flatten@1.1.1: {} + + array-ify@1.0.0: {} + + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + + b4a@1.6.7: {} + balanced-match@1.0.2: {} + bare-events@2.5.0: + optional: true + + bare-fs@2.3.5: + dependencies: + bare-events: 2.5.0 + bare-path: 2.1.3 + bare-stream: 2.6.1 + optional: true + + bare-os@2.4.4: + optional: true + + bare-path@2.1.3: + dependencies: + bare-os: 2.4.4 + optional: true + + bare-stream@2.6.1: + dependencies: + streamx: 2.21.1 + optional: true + + base64-js@1.5.1: {} + + basic-ftp@5.0.5: {} + birpc@0.2.19: {} + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + boolbase@1.0.0: {} brace-expansion@1.1.11: @@ -2351,10 +4200,31 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) + buffer-crc32@0.2.13: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 + bytes@3.1.2: {} + + cac@6.7.14: {} + + call-bind-apply-helpers@1.0.1: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.6 + callsites@3.1.0: {} caniuse-lite@1.0.30001686: {} @@ -2364,20 +4234,93 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.4.1: {} + + chromium-bidi@0.11.0(devtools-protocol@0.0.1367902): + dependencies: + devtools-protocol: 0.0.1367902 + mitt: 3.0.1 + zod: 3.23.8 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + color-convert@2.0.1: dependencies: color-name: 1.1.4 color-name@1.1.4: {} + colorette@2.0.20: {} + + commander@12.1.0: {} + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + concat-map@0.0.1: {} + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-conventionalcommits@7.0.2: + dependencies: + compare-func: 2.0.0 + + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + convert-source-map@2.0.0: {} + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + copy-anything@3.0.5: dependencies: is-what: 4.1.16 + cosmiconfig-typescript-loader@6.1.0(@types/node@22.10.1)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): + dependencies: + '@types/node': 22.10.1 + cosmiconfig: 9.0.0(typescript@5.6.3) + jiti: 2.4.2 + typescript: 5.6.3 + + cosmiconfig@9.0.0(typescript@5.6.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.6.3 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -2388,12 +4331,24 @@ snapshots: csstype@3.1.3: {} + dargs@8.1.0: {} + + data-uri-to-buffer@6.0.2: {} + de-indent@1.0.2: {} + debug@2.6.9: + dependencies: + ms: 2.0.0 + debug@4.3.7: dependencies: ms: 2.1.3 + debug@4.4.0: + dependencies: + ms: 2.1.3 + deep-is@0.1.4: {} default-browser-id@5.0.0: {} @@ -2405,12 +4360,126 @@ snapshots: define-lazy-prop@3.0.0: {} + defu@6.1.4: {} + + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + + depd@2.0.0: {} + + destroy@1.2.0: {} + + devtools-protocol@0.0.1367902: {} + + dompurify@3.2.2: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + ee-first@1.1.1: {} + electron-to-chromium@1.5.68: {} + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + entities@4.5.0: {} + env-paths@2.2.1: {} + + environment@1.1.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + error-stack-parser-es@0.1.5: {} + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-module-lexer@1.6.0: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + optional: true + esbuild@0.24.0: optionalDependencies: '@esbuild/aix-ppc64': 0.24.0 @@ -2440,31 +4509,41 @@ snapshots: escalade@3.2.0: {} + escape-html@1.0.3: {} + escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.1.0(eslint@9.16.0): + escodegen@2.1.0: dependencies: - eslint: 9.16.0 + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 - eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0))(eslint@9.16.0)(prettier@3.4.1): + eslint-config-prettier@9.1.0(eslint@9.16.0(jiti@2.4.2)): dependencies: - eslint: 9.16.0 + eslint: 9.16.0(jiti@2.4.2) + + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2))(prettier@3.4.1): + dependencies: + eslint: 9.16.0(jiti@2.4.2) prettier: 3.4.1 prettier-linter-helpers: 1.0.0 synckit: 0.9.2 optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@9.16.0) + eslint-config-prettier: 9.1.0(eslint@9.16.0(jiti@2.4.2)) - eslint-plugin-vue@9.32.0(eslint@9.16.0): + eslint-plugin-vue@9.32.0(eslint@9.16.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0) - eslint: 9.16.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.2)) + eslint: 9.16.0(jiti@2.4.2) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@9.16.0) + vue-eslint-parser: 9.4.3(eslint@9.16.0(jiti@2.4.2)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -2483,9 +4562,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.16.0: + eslint@9.16.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.16.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.0 '@eslint/core': 0.9.0 @@ -2519,6 +4598,8 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -2534,6 +4615,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 + esprima@4.0.1: {} + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -2548,6 +4631,22 @@ snapshots: esutils@2.0.3: {} + etag@1.8.1: {} + + eventemitter3@5.0.1: {} + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + execa@9.5.1: dependencies: '@sindresorhus/merge-streams': 4.0.0 @@ -2563,10 +4662,58 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.1 + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + extract-zip@2.0.1: + dependencies: + debug: 4.4.0 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2579,10 +4726,16 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-uri@3.0.3: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 @@ -2595,11 +4748,29 @@ snapshots: dependencies: to-regex-range: 5.0.1 + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + flat-cache@4.0.1: dependencies: flatted: 3.3.2 @@ -2607,6 +4778,10 @@ snapshots: flatted@3.3.2: {} + forwarded@0.2.0: {} + + fresh@0.5.2: {} + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 @@ -2616,13 +4791,57 @@ snapshots: fsevents@2.3.3: optional: true + function-bind@1.1.2: {} + gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.0: {} + + get-intrinsic@1.2.6: + dependencies: + call-bind-apply-helpers: 1.0.1 + dunder-proto: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + function-bind: 1.1.2 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-stream@8.0.1: {} + get-stream@9.0.1: dependencies: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + optional: true + + get-uri@6.0.4: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + git-raw-commits@4.0.0: + dependencies: + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -2631,6 +4850,10 @@ snapshots: dependencies: is-glob: 4.0.3 + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + globals@11.12.0: {} globals@13.24.0: @@ -2639,20 +4862,60 @@ snapshots: globals@14.0.0: {} + gopd@1.2.0: {} + graceful-fs@4.2.11: {} graphemer@1.4.0: {} has-flag@4.0.0: {} + has-symbols@1.1.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + he@1.2.0: {} hookable@5.5.3: {} html-tags@3.3.1: {} + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + human-signals@5.0.0: {} + human-signals@8.0.0: {} + husky@9.1.7: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + ignore@5.3.2: {} import-fresh@3.3.0: @@ -2660,12 +4923,35 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-meta-resolve@4.1.0: {} + imurmurhash@0.1.4: {} + inherits@2.0.4: {} + + ini@4.1.1: {} + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + ipaddr.js@1.9.1: {} + + is-arrayish@0.2.1: {} + is-docker@3.0.0: {} is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -2676,10 +4962,18 @@ snapshots: is-number@7.0.0: {} + is-obj@2.0.0: {} + is-plain-obj@4.1.0: {} + is-stream@3.0.0: {} + is-stream@4.0.1: {} + is-text-path@2.0.0: + dependencies: + text-extensions: 2.4.0 + is-unicode-supported@2.1.0: {} is-what@4.1.16: {} @@ -2692,20 +4986,28 @@ snapshots: isexe@3.1.1: {} + jiti@2.4.2: {} + js-tokens@4.0.0: {} js-yaml@4.1.0: dependencies: argparse: 2.0.1 + jsbn@1.1.0: {} + jsesc@3.0.2: {} json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@4.0.0: {} json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@2.2.3: {} @@ -2716,6 +5018,8 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonparse@1.3.1: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -2727,31 +5031,115 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lint-staged@15.3.0: + dependencies: + chalk: 5.4.1 + commander: 12.1.0 + debug: 4.4.0 + execa: 8.0.1 + lilconfig: 3.1.3 + listr2: 8.2.5 + micromatch: 4.0.8 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.6.1 + transitivePeerDependencies: + - supports-color + + listr2@8.2.5: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.isplainobject@4.0.6: {} + + lodash.kebabcase@4.1.1: {} + lodash.merge@4.6.2: {} + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + + lodash.startcase@4.4.0: {} + + lodash.uniq@4.5.0: {} + + lodash.upperfirst@4.3.1: {} + lodash@4.17.21: {} + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + lru-cache@5.1.1: dependencies: yallist: 3.1.1 + lru-cache@7.18.3: {} + magic-string@0.30.14: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + marked@15.0.3: {} + + math-intrinsics@1.1.0: {} + + media-typer@0.3.0: {} + memorystream@0.3.1: {} + meow@12.1.1: {} + + merge-descriptors@1.0.3: {} + + merge-stream@2.0.0: {} + merge2@1.4.1: {} + methods@1.1.2: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -2760,10 +5148,14 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimist@1.2.8: {} + mitt@3.0.1: {} mrmime@2.0.0: {} + ms@2.0.0: {} + ms@2.1.3: {} muggle-string@0.4.1: {} @@ -2774,6 +5166,10 @@ snapshots: natural-compare@1.4.0: {} + negotiator@0.6.3: {} + + netmask@2.0.2: {} + node-releases@2.0.18: {} npm-normalize-package-bin@4.0.0: {} @@ -2789,6 +5185,10 @@ snapshots: shell-quote: 1.8.2 which: 5.0.0 + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + npm-run-path@6.0.0: dependencies: path-key: 4.0.0 @@ -2798,6 +5198,24 @@ snapshots: dependencies: boolbase: 1.0.0 + object-inspect@1.13.3: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + open@10.1.0: dependencies: default-browser: 5.2.1 @@ -2818,26 +5236,67 @@ snapshots: dependencies: yocto-queue: 0.1.0 + p-limit@4.0.0: + dependencies: + yocto-queue: 1.1.1 + p-locate@5.0.0: dependencies: p-limit: 3.1.0 + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + pac-proxy-agent@7.1.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.3 + debug: 4.4.0 + get-uri: 6.0.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + parent-module@1.0.1: dependencies: callsites: 3.1.0 + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + parse-ms@4.0.0: {} + parseurl@1.3.3: {} + path-browserify@1.0.1: {} path-exists@4.0.0: {} + path-exists@5.0.0: {} + path-key@3.1.1: {} path-key@4.0.0: {} + path-to-regexp@0.1.12: {} + pathe@1.1.2: {} + pend@1.2.0: {} + perfect-debounce@1.0.0: {} picocolors@1.1.1: {} @@ -2871,17 +5330,100 @@ snapshots: dependencies: parse-ms: 4.0.0 + progress@2.0.3: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.1.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + punycode@2.3.1: {} + puppeteer-core@23.11.1: + dependencies: + '@puppeteer/browsers': 2.6.1 + chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) + debug: 4.4.0 + devtools-protocol: 0.0.1367902 + typed-query-selector: 2.12.0 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + puppeteer@23.11.1(typescript@5.6.3): + dependencies: + '@puppeteer/browsers': 2.6.1 + chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) + cosmiconfig: 9.0.0(typescript@5.6.3) + devtools-protocol: 0.0.1367902 + puppeteer-core: 23.11.1 + typed-query-selector: 2.12.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - typescript + - utf-8-validate + + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + queue-microtask@1.2.3: {} + queue-tick@1.0.1: {} + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + read-package-json-fast@4.0.0: dependencies: json-parse-even-better-errors: 4.0.0 npm-normalize-package-bin: 4.0.0 + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: + optional: true + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + reusify@1.0.4: {} rfdc@1.4.1: {} @@ -2916,10 +5458,43 @@ snapshots: dependencies: queue-microtask: 1.2.3 + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + semver@6.3.1: {} semver@7.6.3: {} + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.2.0: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -2928,6 +5503,34 @@ snapshots: shell-quote@1.8.2: {} + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.6 + object-inspect: 1.13.3 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.6 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + signal-exit@4.1.0: {} sirv@3.0.0: @@ -2936,10 +5539,76 @@ snapshots: mrmime: 2.0.0 totalist: 3.0.1 + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + + smart-buffer@4.2.0: {} + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + source-map-js@1.2.1: {} + source-map@0.6.1: + optional: true + speakingurl@14.0.1: {} + split2@4.2.0: {} + + sprintf-js@1.1.3: {} + + statuses@2.0.1: {} + + streamx@2.21.1: + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.0 + + string-argv@0.3.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@3.0.0: {} + strip-final-newline@4.0.0: {} strip-json-comments@3.1.1: {} @@ -2959,10 +5628,36 @@ snapshots: '@pkgr/core': 0.1.1 tslib: 2.8.1 + tar-fs@3.0.6: + dependencies: + pump: 3.0.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 2.3.5 + bare-path: 2.1.3 + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.21.1 + + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + + text-extensions@2.4.0: {} + + through@2.3.8: {} + + tinyexec@0.3.2: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 + toidentifier@1.0.1: {} + totalist@3.0.1: {} ts-api-utils@1.4.3(typescript@5.6.3): @@ -2971,18 +5666,33 @@ snapshots: tslib@2.8.1: {} + tsx@4.19.2: + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 + optional: true + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 type-fest@0.20.2: {} - typescript-eslint@8.17.0(eslint@9.16.0)(typescript@5.6.3): + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typed-query-selector@2.12.0: {} + + typescript-eslint@8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0)(typescript@5.6.3))(eslint@9.16.0)(typescript@5.6.3) - '@typescript-eslint/parser': 8.17.0(eslint@9.16.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.17.0(eslint@9.16.0)(typescript@5.6.3) - eslint: 9.16.0 + '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/parser': 8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/utils': 8.17.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.6.3) + eslint: 9.16.0(jiti@2.4.2) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -2990,12 +5700,28 @@ snapshots: typescript@5.6.3: {} + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + undici-types@6.20.0: {} + unhead@1.11.14: + dependencies: + '@unhead/dom': 1.11.14 + '@unhead/schema': 1.11.14 + '@unhead/shared': 1.11.14 + hookable: 5.5.3 + + unicorn-magic@0.1.0: {} + unicorn-magic@0.3.0: {} universalify@2.0.1: {} + unpipe@1.0.0: {} + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: browserslist: 4.24.2 @@ -3008,11 +5734,33 @@ snapshots: util-deprecate@1.0.2: {} - vite-hot-client@0.2.4(vite@6.0.2(@types/node@22.10.1)): + utils-merge@1.0.1: {} + + vary@1.1.2: {} + + vite-hot-client@0.2.4(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1)): dependencies: - vite: 6.0.2(@types/node@22.10.1) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1) - vite-plugin-inspect@0.8.8(rollup@4.28.0)(vite@6.0.2(@types/node@22.10.1)): + vite-node@2.1.8(@types/node@22.10.1): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 1.1.2 + vite: 5.4.11(@types/node@22.10.1) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite-plugin-inspect@0.8.8(rollup@4.28.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.1.3(rollup@4.28.0) @@ -3023,28 +5771,28 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 3.0.0 - vite: 6.0.2(@types/node@22.10.1) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - rollup - supports-color - vite-plugin-vue-devtools@7.6.7(rollup@4.28.0)(vite@6.0.2(@types/node@22.10.1))(vue@3.5.13(typescript@5.6.3)): + vite-plugin-vue-devtools@7.6.7(rollup@4.28.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3)): dependencies: - '@vue/devtools-core': 7.6.7(vite@6.0.2(@types/node@22.10.1))(vue@3.5.13(typescript@5.6.3)) + '@vue/devtools-core': 7.6.7(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1))(vue@3.5.13(typescript@5.6.3)) '@vue/devtools-kit': 7.6.7 '@vue/devtools-shared': 7.6.7 execa: 9.5.1 sirv: 3.0.0 - vite: 6.0.2(@types/node@22.10.1) - vite-plugin-inspect: 0.8.8(rollup@4.28.0)(vite@6.0.2(@types/node@22.10.1)) - vite-plugin-vue-inspector: 5.3.1(vite@6.0.2(@types/node@22.10.1)) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1) + vite-plugin-inspect: 0.8.8(rollup@4.28.0)(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1)) + vite-plugin-vue-inspector: 5.3.1(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.3.1(vite@6.0.2(@types/node@22.10.1)): + vite-plugin-vue-inspector@5.3.1(vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1)): dependencies: '@babel/core': 7.26.0 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) @@ -3055,11 +5803,20 @@ snapshots: '@vue/compiler-dom': 3.5.13 kolorist: 1.8.0 magic-string: 0.30.14 - vite: 6.0.2(@types/node@22.10.1) + vite: 6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1) transitivePeerDependencies: - supports-color - vite@6.0.2(@types/node@22.10.1): + vite@5.4.11(@types/node@22.10.1): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.49 + rollup: 4.28.0 + optionalDependencies: + '@types/node': 22.10.1 + fsevents: 2.3.3 + + vite@6.0.2(@types/node@22.10.1)(jiti@2.4.2)(tsx@4.19.2)(yaml@2.6.1): dependencies: esbuild: 0.24.0 postcss: 8.4.49 @@ -3067,13 +5824,16 @@ snapshots: optionalDependencies: '@types/node': 22.10.1 fsevents: 2.3.3 + jiti: 2.4.2 + tsx: 4.19.2 + yaml: 2.6.1 vscode-uri@3.0.8: {} - vue-eslint-parser@9.4.3(eslint@9.16.0): + vue-eslint-parser@9.4.3(eslint@9.16.0(jiti@2.4.2)): dependencies: debug: 4.3.7 - eslint: 9.16.0 + eslint: 9.16.0(jiti@2.4.2) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -3115,10 +5875,53 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + ws@8.18.0: {} + xml-name-validator@4.0.0: {} + y18n@5.0.8: {} + yallist@3.1.1: {} + yaml@2.6.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + yocto-queue@0.1.0: {} + yocto-queue@1.1.1: {} + yoctocolors@2.1.1: {} + + zhead@2.2.4: {} + + zod@3.23.8: {} diff --git a/public/_headers b/public/_headers new file mode 100644 index 0000000..ae0670c --- /dev/null +++ b/public/_headers @@ -0,0 +1,2 @@ +/assets/* + Cache-Control: public, max-age=31536000, immutable diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6884fade3fc1fd0ec9797e9c16e3934e815d6bfc GIT binary patch literal 2000 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 RpYWsn5D&?QFZ`~8e*;1V7J&c& literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..9da2ccb --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/pwa-192x192.png b/public/pwa-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c64d84fd9a2ad238db8088c84c5fcf08e76a7a GIT binary patch literal 3391 zcmai1c{J4R`~HlX#u$cCcFGu`vScY_AI#vjMzTbq&q1qXfBSZKMxWeimB+0IppVL)?|H@wL(Z_#rDk;;*%-9YDcro%)-2H&5^9 zSy-q}G-Arz&RO7W(`)nROD+aku}dF*I9j1Q(`U!ixe%$cTzt>Q|IReCT-lBe%DdZ8 z(vSo_GWlO;)4qz9f?tSv*myR6-r3}&d_} zudNn;S@C3V+h`m&a1~AYXv>H1Ec4UJn>oR2xhjqB_-E1^;qN9Csnn@88M@eT9?Pg# z$oBR_R8|_ASK@Vz3I`-_2=bcLD`b9uIt>$yZkt`Bw1bYT`f+#oVYqJ+nSEYaQ9NM7 z$g$&xRa*U`E;0TI9rI&bK;mnKN2NvOU+g}P`>Wn?6eL{PmUm6`ae7{Cxwg$(b`-oL zC!f*N((%u~c4bou(2znuE1_6PO@OdkaN!2eL9qHOjhxSIKkmHW5?-q-os#LJVP>{l zCLlYnLM}VLUz+t3g4OSb2p0K_hXGps`-=~|ibn802g8it5fcwACorW`@89&)zWN1> z`lS_y;KU+h^A{o2O29?U`1UB3W zoG=ihmN0Ismeg9h?iKh@HNZXjjrUpOzQzA);Hk3F>5k)jZGMghwKVa#DxXZNU%vQ? zK+0JXAzLE>LrPy>?PZiN-|ug#THX)NUC!P{!Pvan55#W|FA9AH)}-w__N?65(VDr&yXeP zf6l|`{byKm33!?Of0*pQ`61_OCJpMvt!QW}j1kGZGzF{6O<4r-l4 zl@PSUKfLex1pm%nj*hhoac7C&I-h@1!)y~jQ#-drUCS243*BX@Isa8~1g>3MQfp=P zqzv%SS(ouiSk=pd4-8VT3hNo>!3SoX7gby7e&^m`d+!iKVWr89K)XgTV(uaUb>_7w z8S;Y_SoDGdjN{{OLlL}7-yyD0ShPd{znd{DV==J{H2&VyHUs7Eo5In}OdCH(#e#lWtciE=)gA6b7Q9}&;$aYJCdjjN%CHp6GqnAzY4ets z%)L}?HEr+p?xE92!ewC>62@7azLa;){zJ4od89b4R{Fxea&HKS&XmXX7 zvv|bwaf(F$V015{0I`t+50FItu)W08Py|!D<(d-rag_B3}Ov2AE{_i~T zqsy8lNmx0iuK2QeMo13YAl~F1eTX5= zb)k{x%?WN|+f^J$E~$8B1m$I%58s$2&QZ4)hVl?(*+16DT`pEPZ9J1e{p1D5Uz*~1 z8>%o`eCZbF3p%Azfz#ry^!w4#)#;5!&5i7h+yq9<&%ODM?eNdr8@bD3ac=^Kusf$N z^_@h}nw;LMBFa&U8rmE!eImIL{DAgm^SsY#wqgSZlA_S_AoSJUJd5u0+79i7SMLv3 z=V+qo-{-ySEzbYoH;bamV z?X@X|P#9n2AxnVe5cLaOHth_T0Crm8fYJ3=N}_SW>J(E>s`66QG(_FS04Khi{#sNS zWc<{b&)oMKGho_Xn=nOE&w&|Mc1t$GA!MCLsv!0^L*_N-Lf#u^+5tVkXLH7T`*fEB z1LMOr+C4Cvo0!c0Ls>VE8ItPN?{wdQi6qB#gF6uQ#uZJ;eiIkwzqsGh8gY^uZ2iKK z%j781D{sN>z4=SW5x*Z_+u&T%YzRdsa>t&R4&%;U79g9322jZCt^o0pqD}!i6QL3L zW?~45gj|IIZoLxWe#B~i_F2sQf^c>*IzRZ6Tjck7*T07}wrcXkGWQH^f#3a4!=Y}o z#IWRW&t9+^(pkG2D$heq?Th#1)uWBXX{rzRuVdfPh8MovPW$q`+ZY& z0A3nHuki3*^9Ar7>hw&z=peOAS`Hi}ed4fQ*TnoyoIR>lm>)l4WQ6Vf=VPP4jb=^VfR zi`QAain2ZIx<{&Q@WTi=@Q^*H00YC^n*=P;sqxt_Otwcv&Ty*+M(!IRhGkYK8v1|Z zK1EItpth+gRN~$h=u;u;U0`C%dXVjDeLV#mw5s%5lsj+6+YSiAGy}XQ^NkvMsQ<&E ziQrf$!yD^~q!R3)#TYFuEfNcKI|l|472bCC+nI9J)O5hfWnUFTNWzGj;H^U3D05dg zr>5cJ`&>%1YAPW>m)iIWXYW!^7ol@^LlLIw;LtIQ`GS%atXd=(MQuHcF%*@M8xAzy=+<4h%4HLEClDsqwm&V3u8yERwXXgM$4$rbQ{n6#2c-%pN zobx%$8~v08BqlmXr5XRHr!I6bGd=cNl^5?8wiS2)VZqeqt=sC~@gJN}cqJ}xPYJfE zx96LB5|4>F_jR!9!r9$w;c?AfKol8bBhi+_dHElyBKPcQn40f>+P_ez$E3=U)GjQd$AC#^cMAsy8*uyQ zgj^j$!B^N^Lqo<0Zgd3@`wW(y3f~ip%SKWQwN#r1yr1Mu1Dwm?*A%UL$%e2wg(DTJ z`hA;UeN4tes<8;B5~CFvWPP+mRKaq2)e3@eTtU?F+qh|!kdlsd2E*mfO;!m6n`~If zLuKZ6+;N^yz$?q8?54Dp4nbelIm^e6Z(Q7sY8!##u)#ad2 z{;jFwnWfjPAeX@FNko~j<=wAk$=VUFi+wUDZe}d|+zIdB6wA6^aWy3;8&nz_ht0Xy zc%LNaWE~aB%7~ur2ba`9kJ^(*oR#|UR8e|}H&0-@d>N_;b2W=VKlK=T zAV8E&e?BhAKXqBe^$9L>SDb^|9tL>rPQCmC4oD+(vvX^>sm@SENi^j+`NoYrJc>G? z*2>MT!*l_Ra-o4KNv4M;`SnK{wN^P%91|$0-`J?ytF<~~(ih?b^kC$oxCSnYCJ{C< zavLop$FN&g$(nJe$et`3MeoD)Q>RW5c&N&tpEJgtN0QxbDeCrhA7FK8USlJweArhl z%iM5za$>@7zghPo7#%!%Y}c_uT37G(p#F<5*Bu>2y6Wre@1SA2jS)?e|An|cJbc&G zB#+lFWu}`(X;mcXi|L*9mh}P5$QOWOM-jkA9z`sB3U9q)3Uz&11W~NtYYwtKkd>7k z1eWSXVkA1>@k*nDpFe-TSHWqJSO-ylX4cI~nr-|e6($yK zX}1Zb4O7%Vs8_Pa{I}9*FRaU)29D-Bs*9{wVr6bCc4`e%j6X>9vuqis6P55433#zi zqrCF+@|mWa_AY)3+ zeeNl!%?bupdXD6XtoJON%xwX;SXTsBZ7Ax=mum8sX(TUKa2_9!mv``mGpl-2ty?R literal 0 HcmV?d00001 diff --git a/public/pwa-512x512.png b/public/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..c198d19f93b5d3fb397cfd5bac9fc64c458eb9ea GIT binary patch literal 12175 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 literal 0 HcmV?d00001 diff --git a/public/pwa-maskable-192x192.png b/public/pwa-maskable-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..c44d835aeedc694fa6351b083c3ce8e83776764f GIT binary patch literal 1796 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 { + res.sendFile(resolve('dist/index.html')) + }) + + // Start the server + const server = app.listen(port, () => { + console.log(`🌐 Server is running at http://localhost:${port}`) + }) + + // Return the server instance for later use + return { port, server } +} + +// YYYY:MM:DD HH:MM:SS±HH:MM +async function getGitCommitUTC() { + const { stdout } = await execAsync('git log -1 --format=%at') + const commitTimestamp = parseInt(stdout.trim()) + const commitDate = new Date(commitTimestamp * 1000) + return commitDate + .toISOString() + .replace('T', ' ') + .replace(/\.\d+Z$/, '+00:00') +} +const gitCommitUTC = await getGitCommitUTC() +console.log('🕒 Git commit time:', gitCommitUTC) + +// Generate a PDF from a given path +async function generatePDF(browser: Browser, port: number, path: string) { + console.log(`📄 Generating PDF for ${path}...`) + const page = await browser.newPage() + const url = `http://localhost:${port}${path}` + + console.log(`🔗 Navigating to ${url}...`) + await page.goto(url, { waitUntil: 'networkidle0' }) + + const pdfPath = join(outputDir, `${path}.pdf`) + await mkdir(dirname(pdfPath), { recursive: true }) + await page.pdf({ path: pdfPath, format: 'a4' }) + + // modify the pdf file creation and modification time to the git commit time + await execAsync( + ['exiftool', '-overwrite_original', `-AllDates="${gitCommitUTC}"`, pdfPath].join(' '), + ) + + const cleanedPdfPath = pdfPath + console.log('🧹 Cleaning PDF...') + await execAsync(['mutool', 'clean', '-gggg', pdfPath, cleanedPdfPath].join(' ')) + + await page.close() + console.log(`✅ PDF saved to ${pdfPath}`) +} + +async function main() { + try { + // Step 1: Build the application + await buildWeb() + + // Step 2: Serve the built application + const { port, server } = await serveDist() + + // Step 3: Generate PDFs + const paths = langs.map((lang) => `/how-to-use/${lang}`) + const browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox', '--disable-setuid-sandbox'], + }) + + for (const path of paths) { + await generatePDF(browser, port, path) + } + + await browser.close() + + server.close() + } catch (error) { + console.error('🚨 An error occurred:', error) + } +} + +main() diff --git a/src/App.vue b/src/App.vue index a78fb6f..27a6ba9 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,7 +1,56 @@ + + + + diff --git a/src/assets/darkmode.css b/src/assets/darkmode.css new file mode 100644 index 0000000..6438f74 --- /dev/null +++ b/src/assets/darkmode.css @@ -0,0 +1,6 @@ +@media screen and (prefers-color-scheme: dark) { + body { + background-color: #121212; + color: #ffffff; + } +} diff --git a/src/assets/locale-font.css b/src/assets/locale-font.css new file mode 100644 index 0000000..9f16be9 --- /dev/null +++ b/src/assets/locale-font.css @@ -0,0 +1,44 @@ +body { + font-family: 'Noto Serif', serif; +} + +:lang(en) { + font-family: 'Noto Serif', serif; +} + +:lang(zh-CN), +:lang(zh) { + font-family: 'Noto Serif SC', 'Noto Serif', serif; +} + +:lang(zh-TW) { + font-family: 'Noto Serif TC', 'Noto Serif', serif; +} + +:lang(zh-HK) { + font-family: 'Noto Serif HK', 'Noto Serif', serif; +} + +:lang(ja) { + font-family: 'Noto Serif JP', 'Noto Serif', serif; +} + +:lang(ko) { + font-family: 'Noto Serif KR', 'Noto Serif', serif; +} + +:lang(hi) { + font-family: 'Noto Serif Devanagari', 'Noto Serif', serif; +} + +:lang(th) { + font-family: 'Noto Serif Thai', 'Noto Serif', serif; +} + +:lang(he) { + font-family: 'Noto Serif Hebrew', 'Noto Serif', serif; +} + +:lang(ar) { + font-family: 'Noto Serif Arabic', 'Noto Serif', serif; +} diff --git a/src/components/MarkdownContent.vue b/src/components/MarkdownContent.vue new file mode 100644 index 0000000..a38d3a1 --- /dev/null +++ b/src/components/MarkdownContent.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/ScannerSvg.vue b/src/components/ScannerSvg.vue new file mode 100644 index 0000000..f542715 --- /dev/null +++ b/src/components/ScannerSvg.vue @@ -0,0 +1,73 @@ + diff --git a/src/components/SiteTitle.vue b/src/components/SiteTitle.vue new file mode 100644 index 0000000..dd78c27 --- /dev/null +++ b/src/components/SiteTitle.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/components/TheFooter.vue b/src/components/TheFooter.vue new file mode 100644 index 0000000..58dc5a4 --- /dev/null +++ b/src/components/TheFooter.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/components/ThePageControls.vue b/src/components/ThePageControls.vue new file mode 100644 index 0000000..6ab1b03 --- /dev/null +++ b/src/components/ThePageControls.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/locales/display.ts b/src/locales/display.ts new file mode 100644 index 0000000..45e8e53 --- /dev/null +++ b/src/locales/display.ts @@ -0,0 +1,27 @@ +export const languages = { + zh: '中文', + 'zh-CN': '简体中文', + 'zh-TW': '繁體中文(臺灣)', + 'zh-HK': '繁體中文(香港)', + en: 'English', + ja: '日本語', + es: 'Español', + fr: 'Français', + de: 'Deutsch', + it: 'Italiano', + ko: '한국어', + ru: 'Русский', + pt: 'Português', + ar: 'العربية', + hi: 'हिन्दी', + tr: 'Türkçe', + nl: 'Nederlands', + sv: 'Svenska', + pl: 'Polski', + vi: 'Tiếng Việt', + th: 'ไทย', + id: 'Bahasa Indonesia', + he: 'עברית', + ms: 'Bahasa Melayu', + no: 'Norsk', +} as const diff --git a/src/locales/how-to-use/markdowns/ar.md b/src/locales/how-to-use/markdowns/ar.md new file mode 100644 index 0000000..625be1c --- /dev/null +++ b/src/locales/how-to-use/markdowns/ar.md @@ -0,0 +1,21 @@ +# كيفية استخدام Look Scanned + +يتيح لك Look Scanned تحويل مستنداتك إلى نسخ ممسوحة ضوئياً باحترافية وبكل سهولة. إليك كيفية القيام بذلك: + +## رفع الملف + +انقر على زر "رفع" أو اسحب المستند مباشرة إلى الصفحة. يدعم Look Scanned العديد من الصيغ: PDF والصور (JPG، PNG) وDOCX وPPTX وExcel وMarkdown وHTML وTXT. بمجرد رفع الملف، ستظهر معاينة فورية تتيح لك ضبط التأثيرات. + +## تخصيص تأثيرات المسح الضوئي + +بعد رفع الملف، يمكنك تخصيص التأثيرات حسب رغبتك. اضبط زاوية الميل والسطوع والتباين ودرجة الضبابية للحصول على مظهر مستند ممسوح ضوئياً حقيقي. تظهر جميع التعديلات مباشرة في المعاينة، مما يتيح لك الحصول على النتيجة المطلوبة بدقة. + +يقوم Look Scanned أيضاً بمعالجة المستندات متعددة الصفحات مع الحفاظ على مظهر موحد في جميع الصفحات. + +## تحميل الملف + +عندما تكون راضياً عن النتيجة، انقر على "إنشاء نسخة ممسوحة". تستغرق المعالجة ثوانٍ معدودة فقط. بعد ذلك، يمكنك تحميل الملف بالنقر على زر "تحميل". تتم جميع العمليات محلياً على جهازك ولا نحتفظ بأي محتوى، مما يضمن خصوصية مستنداتك. + +## نصائح مفيدة + +Look Scanned هو الحل الأمثل لإنشاء مستندات بمظهر ممسوح ضوئياً أصلي، دون الحاجة لتثبيت أي برامج. قم بزيارة [lookscanned.io](https://lookscanned.io) وامنح مستنداتك مظهراً احترافياً! diff --git a/src/locales/how-to-use/markdowns/de.md b/src/locales/how-to-use/markdowns/de.md new file mode 100644 index 0000000..080d72a --- /dev/null +++ b/src/locales/how-to-use/markdowns/de.md @@ -0,0 +1,21 @@ +# Look Scanned – Anleitung + +Mit Look Scanned verwandeln Sie Ihre Dokumente ganz einfach in professionell aussehende Scans. So funktioniert's: + +## Dokument hochladen + +Klicken Sie auf "Hochladen" oder ziehen Sie Ihr Dokument per Drag & Drop direkt in den Browser. Look Scanned unterstützt alle gängigen Formate: PDF, Bilder (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML und TXT. Nach dem Hochladen erscheint sofort eine Vorschau, in der Sie die Effekte anpassen können. + +## Scan-Effekte anpassen + +Passen Sie die Scan-Effekte ganz nach Ihren Vorstellungen an. Mit den Einstellungen für Neigungswinkel, Helligkeit, Kontrast und Unschärfe erreichen Sie das authentische Aussehen eines echten Scans. Die Vorschau aktualisiert sich in Echtzeit, sodass Sie das Ergebnis optimal abstimmen können. + +Auch mehrseitige Dokumente werden einheitlich verarbeitet – für ein durchgängig professionelles Erscheinungsbild. + +## Ergebnis herunterladen + +Wenn Sie mit dem Ergebnis zufrieden sind, klicken Sie auf "Scan erstellen". Die Verarbeitung dauert nur wenige Sekunden. Danach können Sie das fertige Dokument über den "Herunterladen"-Button speichern. Der gesamte Prozess läuft ausschließlich lokal auf Ihrem Gerät – Ihre Daten bleiben zu jeder Zeit sicher und privat. + +## Tipps & Tricks + +Look Scanned ist Ihre schnelle und effektive Lösung für professionell aussehende Scans – ganz ohne Software-Installation. Besuchen Sie [lookscanned.io](https://lookscanned.io) und verleihen Sie Ihren Dokumenten einen authentischen Scan-Look! diff --git a/src/locales/how-to-use/markdowns/en.md b/src/locales/how-to-use/markdowns/en.md new file mode 100644 index 0000000..2fd42db --- /dev/null +++ b/src/locales/how-to-use/markdowns/en.md @@ -0,0 +1,21 @@ +# How to Use Look Scanned to Create Scanned Effects + +Look Scanned makes it easy to transform your documents into realistic scanned versions. Just follow these simple steps. + +## Upload Your File + +Click the "Upload File" button on the website and select the document you want to process. Look Scanned supports various file formats, including PDFs, images (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML, and TXT. You can also drag and drop your file directly onto the upload area. Once the file is uploaded, the system will instantly generate a preview so you can proceed with further adjustments. + +## Customize Scanning Effects + +After uploading your file, you can adjust the scanning effects to suit your preferences. Customize options like tilt angle, brightness, contrast, and blur intensity to create a look that closely resembles an authentic scanned document. Each adjustment is reflected in real-time in the preview, allowing you to fine-tune the effects to your liking. + +Look Scanned also ensures consistent processing across multi-page documents, whether you’re working with a single-page file or an extensive multi-page document. + +## Download Your File + +When you’re satisfied with the results, click the "Generate Scanned File" button. The system will process your document in just a few seconds. Once processing is complete, click the "Download" button to save your file locally. All files are processed securely on your device, and no uploaded content is stored, ensuring your data remains private. + +## Tips for a Better Experience + +Look Scanned allows you to add realistic scanned textures to your documents quickly and effortlessly, with no software installation required. Visit [lookscanned.io](https://lookscanned.io) today and give your documents a polished, professional touch! diff --git a/src/locales/how-to-use/markdowns/es.md b/src/locales/how-to-use/markdowns/es.md new file mode 100644 index 0000000..e4cca0d --- /dev/null +++ b/src/locales/how-to-use/markdowns/es.md @@ -0,0 +1,21 @@ +# Cómo Usar Look Scanned para Crear Documentos Escaneados + +Look Scanned te permite transformar tus documentos en versiones escaneadas con aspecto profesional de manera sencilla. Sigue estos pasos: + +## Sube tu Archivo + +Haz clic en el botón "Subir Archivo" o arrastra y suelta tu documento directamente en la página. Look Scanned admite diversos formatos, incluyendo PDF, imágenes (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML y TXT. Una vez subido el archivo, verás una vista previa instantánea que te permitirá realizar los ajustes necesarios. + +## Personaliza el Efecto de Escaneado + +Después de subir tu archivo, puedes ajustar los efectos según tus necesidades. Modifica el ángulo de inclinación, el brillo, el contraste y el nivel de desenfoque para lograr un aspecto realista de documento escaneado. Cada ajuste se muestra en tiempo real en la vista previa, permitiéndote conseguir exactamente el resultado que buscas. + +Look Scanned procesa documentos de múltiples páginas manteniendo un aspecto uniforme en todo el documento. + +## Descarga tu Archivo + +Cuando estés satisfecho con el resultado, haz clic en "Generar Documento Escaneado". El proceso tarda solo unos segundos. Una vez completado, podrás descargar tu archivo con el botón "Descargar". Todo el proceso se realiza localmente en tu dispositivo y no almacenamos ningún contenido, garantizando la privacidad de tus documentos. + +## Consejos de Uso + +Look Scanned te ofrece una solución rápida y eficaz para crear documentos con aspecto de escaneado auténtico, sin necesidad de instalar ningún software. ¡Visita [lookscanned.io](https://lookscanned.io) y dale a tus documentos un aspecto profesional! diff --git a/src/locales/how-to-use/markdowns/fr.md b/src/locales/how-to-use/markdowns/fr.md new file mode 100644 index 0000000..8f91bdd --- /dev/null +++ b/src/locales/how-to-use/markdowns/fr.md @@ -0,0 +1,21 @@ +# Comment Utiliser Look Scanned pour Numériser vos Documents + +Look Scanned vous permet de transformer facilement vos documents en versions numérisées d'aspect professionnel. Voici comment procéder : + +## Importez votre Fichier + +Cliquez sur le bouton "Importer un Fichier" ou glissez-déposez directement votre document sur la page. Look Scanned prend en charge de nombreux formats : PDF, images (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML et TXT. Dès que votre fichier est importé, un aperçu s'affiche instantanément pour vous permettre d'ajuster les effets. + +## Personnalisez l'Effet de Numérisation + +Une fois votre fichier importé, vous pouvez personnaliser les effets selon vos besoins. Ajustez l'angle d'inclinaison, la luminosité, le contraste et le niveau de flou pour obtenir l'aspect d'un véritable document numérisé. Chaque modification est visible en temps réel dans l'aperçu, vous permettant d'obtenir exactement le résultat souhaité. + +Look Scanned traite les documents de plusieurs pages en maintenant une apparence cohérente sur l'ensemble du document. + +## Téléchargez votre Document + +Une fois satisfait du résultat, cliquez sur "Générer le Document Numérisé". Le traitement ne prend que quelques secondes. Vous pourrez ensuite télécharger votre fichier en cliquant sur "Télécharger". Tout le processus s'effectue localement sur votre appareil et nous ne conservons aucun contenu, garantissant ainsi la confidentialité de vos documents. + +## Conseils d'Utilisation + +Look Scanned offre une solution rapide et efficace pour créer des documents à l'aspect authentiquement numérisé, sans installation de logiciel. Rendez-vous sur [lookscanned.io](https://lookscanned.io) pour donner un aspect professionnel à vos documents ! diff --git a/src/locales/how-to-use/markdowns/he.md b/src/locales/how-to-use/markdowns/he.md new file mode 100644 index 0000000..4f4a933 --- /dev/null +++ b/src/locales/how-to-use/markdowns/he.md @@ -0,0 +1,21 @@ +# Look Scanned-איך להשתמש ב + +Look Scanned מאפשר לך ליצור בקלות סריקות מקצועיות ממסמכים שלך. הנה המדריך המלא: + +## העלאת מסמך + +לחץ על כפתור "העלאה" או גרור את המסמך לדף. Look Scanned תומך בכל הפורמטים המקובלים: PDF, תמונות (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML ו-TXT. מיד לאחר ההעלאה תראה תצוגה מקדימה שבה תוכל להתאים את האפקטים. + +## התאמת אפקטים + +לאחר ההעלאה, תוכל להתאים את אפקטי הסריקה כרצונך. כוון את זווית ההטיה, הבהירות, הניגודיות והטשטוש כדי לקבל מראה של סריקה אמיתית. כל השינויים מוצגים מיד בתצוגה המקדימה, כך שתוכל להגיע בדיוק לתוצאה הרצויה. + +Look Scanned מטפל גם במסמכים מרובי עמודים ומבטיח מראה אחיד בכל העמודים. + +## הורדת המסמך + +כשאתה מרוצה מהתוצאה, לחץ על "יצירת סריקה". העיבוד לוקח שניות ספורות בלבד. לאחר מכן תוכל לשמור את הקובץ בעזרת כפתור "הורדה". כל התהליך מתבצע מקומית במכשיר שלך ואיננו שומרים שום מידע, מה שמבטיח את פרטיות המסמכים שלך. + +## טיפים לשימוש + +Look Scanned הוא הדרך הקלה ביותר ליצור סריקות מקצועיות בלי להתקין תוכנה. בקר ב-[lookscanned.io](https://lookscanned.io) ותן למסמכים שלך מראה מקצועי! diff --git a/src/locales/how-to-use/markdowns/hi.md b/src/locales/how-to-use/markdowns/hi.md new file mode 100644 index 0000000..0f364a9 --- /dev/null +++ b/src/locales/how-to-use/markdowns/hi.md @@ -0,0 +1,21 @@ +# Look Scanned का उपयोग कैसे करें + +Look Scanned से अपने दस्तावेज़ों को पेशेवर स्कैन में आसानी से बदलें। यहाँ जानें कैसे: + +## फ़ाइल अपलोड करें + +"अपलोड" बटन पर क्लिक करें या दस्तावेज़ को सीधे पेज पर खींचें। Look Scanned सभी प्रमुख फ़ॉर्मेट को सपोर्ट करता है: PDF, इमेज (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML और TXT। अपलोड होते ही आपको प्रीव्यू दिखाई देगा, जिसमें आप प्रभाव समायोजित कर सकते हैं। + +## स्कैन प्रभाव समायोजित करें + +अपलोड के बाद, स्कैन प्रभावों को अपनी पसंद के अनुसार बदल सकते हैं। झुकाव, चमक, कंट्रास्ट और धुंधलापन समायोजित करके वास्तविक स्कैन जैसा लुक बनाएं। सभी बदलाव तुरंत प्रीव्यू में दिखाई देंगे, जिससे आप सटीक परिणाम पा सकते हैं। + +Look Scanned कई पृष्ठों वाले दस्तावेज़ों को भी प्रोसेस करता है और सभी पृष्ठों में एक जैसा लुक बनाए रखता है। + +## फ़ाइल डाउनलोड करें + +जब परिणाम मनचाहा हो, तो "स्कैन बनाएं" पर क्लिक करें। प्रोसेसिंग में बस कुछ सेकंड लगेंगे। फिर "डाउनलोड" बटन से फ़ाइल सेव कर सकते हैं। सारी प्रक्रिया आपके डिवाइस पर ही होती है और हम कोई डेटा स्टोर नहीं करते, जिससे आपकी जानकारी सुरक्षित रहती है। + +## उपयोगी टिप्स + +Look Scanned बिना किसी सॉफ़्टवेयर इंस्टॉल किए दस्तावेज़ों को असली स्कैन जैसा बनाने का सबसे आसान तरीका है। [lookscanned.io](https://lookscanned.io) पर जाएं और अपने दस्तावेज़ों को पेशेवर लुक दें! diff --git a/src/locales/how-to-use/markdowns/id.md b/src/locales/how-to-use/markdowns/id.md new file mode 100644 index 0000000..c7d7e8f --- /dev/null +++ b/src/locales/how-to-use/markdowns/id.md @@ -0,0 +1,21 @@ +# Cara Menggunakan Look Scanned + +Look Scanned membantu Anda membuat hasil pemindaian profesional dengan mudah. Berikut panduan lengkapnya: + +## Unggah Dokumen + +Klik tombol "Unggah" atau seret dokumen ke halaman web. Look Scanned mendukung semua format populer: PDF, gambar (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML, dan TXT. Setelah diunggah, Anda akan melihat pratinjau untuk mengatur efeknya. + +## Sesuaikan Efek + +Setelah mengunggah, Anda dapat mengatur efek pemindaian sesuai keinginan. Atur sudut kemiringan, kecerahan, kontras, dan keburaman untuk mendapatkan tampilan seperti hasil pindai asli. Semua perubahan langsung terlihat di pratinjau, membantu Anda mendapatkan hasil yang diinginkan. + +Look Scanned juga dapat memproses dokumen multi-halaman dan memberikan tampilan yang seragam di semua halaman. + +## Unduh Dokumen + +Setelah puas dengan hasilnya, klik "Buat Pindaian". Pemrosesan hanya membutuhkan beberapa detik. Kemudian Anda dapat menyimpan berkas dengan tombol "Unduh". Seluruh proses terjadi di perangkat Anda dan kami tidak menyimpan konten apapun, menjamin kerahasiaan dokumen Anda. + +## Tips Penggunaan + +Look Scanned adalah cara termudah untuk membuat hasil pemindaian profesional tanpa perlu menginstal program. Kunjungi [lookscanned.io](https://lookscanned.io) dan berikan tampilan profesional pada dokumen Anda! diff --git a/src/locales/how-to-use/markdowns/index.ts b/src/locales/how-to-use/markdowns/index.ts new file mode 100644 index 0000000..71df380 --- /dev/null +++ b/src/locales/how-to-use/markdowns/index.ts @@ -0,0 +1,52 @@ +import zhCNMarkdown from './zh-CN.md?raw' +import zhTWMarkdown from './zh-TW.md?raw' +import zhHKMarkdown from './zh-HK.md?raw' +import enMarkdown from './en.md?raw' +import jaMarkdown from './ja.md?raw' +import esMarkdown from './es.md?raw' +import frMarkdown from './fr.md?raw' +import deMarkdown from './de.md?raw' +import itMarkdown from './it.md?raw' +import koMarkdown from './ko.md?raw' +import ruMarkdown from './ru.md?raw' +import ptMarkdown from './pt.md?raw' +import arMarkdown from './ar.md?raw' +import hiMarkdown from './hi.md?raw' +import trMarkdown from './tr.md?raw' +import nlMarkdown from './nl.md?raw' +import svMarkdown from './sv.md?raw' +import plMarkdown from './pl.md?raw' +import viMarkdown from './vi.md?raw' +import thMarkdown from './th.md?raw' +import idMarkdown from './id.md?raw' +import heMarkdown from './he.md?raw' +import msMarkdown from './ms.md?raw' +import noMarkdown from './no.md?raw' + +export const markdowns = { + zh: zhCNMarkdown, + 'zh-CN': zhCNMarkdown, + 'zh-TW': zhTWMarkdown, + 'zh-HK': zhHKMarkdown, + en: enMarkdown, + ja: jaMarkdown, + es: esMarkdown, + fr: frMarkdown, + de: deMarkdown, + it: itMarkdown, + ko: koMarkdown, + ru: ruMarkdown, + pt: ptMarkdown, + ar: arMarkdown, + hi: hiMarkdown, + tr: trMarkdown, + nl: nlMarkdown, + sv: svMarkdown, + pl: plMarkdown, + vi: viMarkdown, + th: thMarkdown, + id: idMarkdown, + he: heMarkdown, + ms: msMarkdown, + no: noMarkdown, +} as const diff --git a/src/locales/how-to-use/markdowns/it.md b/src/locales/how-to-use/markdowns/it.md new file mode 100644 index 0000000..6501159 --- /dev/null +++ b/src/locales/how-to-use/markdowns/it.md @@ -0,0 +1,21 @@ +# Guida all'Uso di Look Scanned + +Look Scanned trasforma i tuoi documenti in scansioni dall'aspetto professionale in modo semplice e veloce. Ecco come fare: + +## Caricamento del File + +Fai clic su "Carica" o trascina il documento direttamente nella pagina. Look Scanned supporta tutti i formati più comuni: PDF, immagini (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML e TXT. Non appena il file viene caricato, vedrai un'anteprima immediata per regolare gli effetti. + +## Personalizzazione degli Effetti + +Dopo il caricamento, personalizza gli effetti come preferisci. Regola l'inclinazione, la luminosità, il contrasto e la sfocatura per ottenere l'aspetto di una vera scansione. Ogni modifica si riflette istantaneamente nell'anteprima, permettendoti di ottenere esattamente il risultato che desideri. + +Look Scanned gestisce anche documenti di più pagine, mantenendo un aspetto uniforme dall'inizio alla fine. + +## Scaricamento del File + +Quando sei soddisfatto del risultato, fai clic su "Crea Scansione". L'elaborazione richiede solo pochi secondi. Al termine, potrai scaricare il file con il pulsante "Scarica". Tutto il processo avviene localmente sul tuo dispositivo e non conserviamo nessun contenuto, garantendo la massima privacy dei tuoi documenti. + +## Suggerimenti Utili + +Look Scanned è la soluzione ideale per creare scansioni dall'aspetto autentico, senza dover installare alcun software. Visita [lookscanned.io](https://lookscanned.io) e dai un tocco professionale ai tuoi documenti! diff --git a/src/locales/how-to-use/markdowns/ja.md b/src/locales/how-to-use/markdowns/ja.md new file mode 100644 index 0000000..d67f81a --- /dev/null +++ b/src/locales/how-to-use/markdowns/ja.md @@ -0,0 +1,21 @@ +# Look Scannedの使い方 + +Look Scannedを使えば、文書を本物のスキャン文書のような見た目に簡単に変換できます。以下の手順に従ってお試しください。 + +## ファイルのアップロード + +ページ上の「ファイルをアップロード」ボタンをクリックするか、ファイルを直接ドラッグ&ドロップしてください。PDF、画像(JPG、PNG)、DOCX、PPTX、Excel、Markdown、HTML、TXTなど、様々な形式に対応しています。アップロードが完了すると、すぐにプレビューが表示され、効果を確認しながら調整できます。 + +## スキャン効果の調整 + +ファイルをアップロードした後、お好みに応じてスキャン効果を調整できます。傾き角度、明るさ、コントラスト、ぼかしの程度など、実際のスキャン文書のような見た目を実現するための様々なパラメータを用意しています。調整内容はリアルタイムでプレビューに反映されるため、望みの効果が得られるまで微調整が可能です。 + +また、複数ページの文書も一括で処理できるため、どのページも一貫した仕上がりになります。 + +## ファイルのダウンロード + +効果の調整が完了したら、「スキャンファイルを生成」ボタンをクリックしてください。数秒で処理が完了し、「ダウンロード」ボタンが表示されます。すべての処理はお使いのデバイス上で行われ、アップロードされたファイルはサーバーに保存されることはありませんので、安心してご利用いただけます。 + +## ご利用にあたって + +Look Scannedなら、特別なソフトウェアをインストールすることなく、文書に自然なスキャン効果を手軽に追加できます。[lookscanned.io](https://lookscanned.io)にアクセスして、今すぐお試しください! diff --git a/src/locales/how-to-use/markdowns/ko.md b/src/locales/how-to-use/markdowns/ko.md new file mode 100644 index 0000000..66a43e7 --- /dev/null +++ b/src/locales/how-to-use/markdowns/ko.md @@ -0,0 +1,21 @@ +# Look Scanned 사용 가이드 + +Look Scanned으로 문서를 실제 스캔한 것처럼 간편하게 변환해보세요. 아래 과정을 따라하시면 됩니다. + +## 파일 올리기 + +'파일 선택' 버튼을 클릭하거나 문서를 화면에 끌어다 놓으세요. PDF, 이미지(JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML, TXT 등 다양한 형식을 지원합니다. 파일을 올리면 바로 미리보기가 나타나며, 원하는 대로 효과를 조절할 수 있습니다. + +## 스캔 효과 설정하기 + +파일을 올린 후에는 스캔 효과를 자유롭게 조절하실 수 있습니다. 기울기, 밝기, 대비, 흐림 효과 등을 조절해 실제 스캔본과 똑같은 모습을 만들어보세요. 모든 변경 사항은 실시간으로 미리보기에 반영되어, 원하는 결과물을 쉽게 얻을 수 있습니다. + +여러 페이지로 된 문서도 한 번에 처리할 수 있으며, 모든 페이지에 동일한 효과가 적용됩니다. + +## 파일 내려받기 + +원하는 결과가 나왔다면 '스캔 생성하기' 버튼을 클릭하세요. 몇 초 안에 처리가 완료되며, '다운로드' 버튼을 눌러 파일을 저장하실 수 있습니다. 모든 작업은 사용자의 기기에서만 이루어지며, 업로드된 파일은 어디에도 저장되지 않아 안전합니다. + +## 활용 팁 + +Look Scanned는 프로그램 설치 없이도 문서를 진짜 스캔본처럼 만들 수 있는 간편한 솔루션입니다. [lookscanned.io](https://lookscanned.io)에서 지금 바로 시작해보세요! diff --git a/src/locales/how-to-use/markdowns/ms.md b/src/locales/how-to-use/markdowns/ms.md new file mode 100644 index 0000000..0c9f38c --- /dev/null +++ b/src/locales/how-to-use/markdowns/ms.md @@ -0,0 +1,21 @@ +# Cara Menggunakan Look Scanned + +Look Scanned membantu anda menghasilkan imbasan dokumen yang kelihatan profesional dengan mudah. Berikut adalah panduan penggunaan: + +## Muat Naik Dokumen + +Klik butang "Muat Naik" atau seret dokumen ke halaman web. Look Scanned menyokong semua format biasa: PDF, imej (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML dan TXT. Sebaik sahaja dimuat naik, anda akan melihat pratonton untuk melaraskan kesan. + +## Laraskan Kesan + +Selepas memuat naik, anda boleh melaraskan kesan imbasan mengikut kesesuaian. Sesuaikan sudut kecondongan, kecerahan, kontras dan kekaburan untuk mendapatkan rupa seperti imbasan asli. Semua perubahan akan ditunjukkan secara langsung dalam pratonton, membantu anda mendapatkan hasil yang tepat seperti yang diinginkan. + +Look Scanned juga boleh memproses dokumen berbilang halaman dan menghasilkan rupa yang seragam untuk semua halaman. + +## Muat Turun Dokumen + +Apabila berpuas hati dengan hasilnya, klik "Cipta Imbasan". Pemprosesan hanya mengambil masa beberapa saat sahaja. Kemudian anda boleh menyimpan fail menggunakan butang "Muat Turun". Semua proses berlaku di peranti anda dan kami tidak menyimpan sebarang maklumat, menjamin kerahsiaan dokumen anda. + +## Petua Penggunaan + +Look Scanned adalah cara paling mudah untuk menghasilkan imbasan profesional tanpa perlu memasang sebarang perisian. Layari [lookscanned.io](https://lookscanned.io) dan berikan dokumen anda penampilan profesional! diff --git a/src/locales/how-to-use/markdowns/nl.md b/src/locales/how-to-use/markdowns/nl.md new file mode 100644 index 0000000..771a899 --- /dev/null +++ b/src/locales/how-to-use/markdowns/nl.md @@ -0,0 +1,21 @@ +# Zo gebruikt u Look Scanned + +Met Look Scanned zet u eenvoudig uw documenten om in professioneel ogende scans. Hier leest u hoe het werkt: + +## Document uploaden + +Klik op "Uploaden" of sleep uw document naar de pagina. Look Scanned ondersteunt alle gangbare formaten: PDF, afbeeldingen (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML en TXT. Direct na het uploaden verschijnt een voorvertoning waarin u de effecten kunt aanpassen. + +## Scan-effecten instellen + +Na het uploaden kunt u de scan-effecten naar wens instellen. Pas de kantelhoek, helderheid, contrast en vervaging aan voor een authentieke scan-uitstraling. Alle wijzigingen zijn direct zichtbaar in de voorvertoning, zodat u precies het gewenste resultaat krijgt. + +Look Scanned verwerkt ook documenten met meerdere pagina's en zorgt voor een consistente uitstraling op alle pagina's. + +## Document downloaden + +Wanneer u tevreden bent met het resultaat, klikt u op "Scan maken". De verwerking duurt slechts enkele seconden. Daarna kunt u het bestand opslaan via de knop "Downloaden". Het hele proces vindt plaats op uw eigen apparaat en we bewaren geen gegevens, waardoor uw privacy gewaarborgd blijft. + +## Praktische tips + +Look Scanned is de snelste manier om authentiek ogende scans te maken, zonder software-installatie. Ga naar [lookscanned.io](https://lookscanned.io) en geef uw documenten een professionele uitstraling! diff --git a/src/locales/how-to-use/markdowns/no.md b/src/locales/how-to-use/markdowns/no.md new file mode 100644 index 0000000..5b7145e --- /dev/null +++ b/src/locales/how-to-use/markdowns/no.md @@ -0,0 +1,21 @@ +# Slik bruker du Look Scanned + +Look Scanned hjelper deg med å enkelt lage profesjonelle skanninger av dokumentene dine. Her er en enkel veiledning: + +## Last opp dokument + +Klikk på "Last opp"-knappen eller dra dokumentet til siden. Look Scanned støtter alle vanlige formater: PDF, bilder (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML og TXT. Med en gang det er lastet opp, får du se en forhåndsvisning der du kan justere effektene. + +## Juster effekter + +Etter opplasting kan du tilpasse skanningseffektene som du vil. Juster vinkel, lysstyrke, kontrast og uskarphet for å få det til å se ut som en ekte skanning. Alle endringer vises øyeblikkelig i forhåndsvisningen, slik at du får akkurat det resultatet du ønsker. + +Look Scanned håndterer også flersidige dokumenter og gir et ensartet utseende på alle sider. + +## Last ned dokument + +Når du er fornøyd med resultatet, klikker du på "Lag skanning". Behandlingen tar bare noen sekunder. Deretter kan du lagre filen med "Last ned"-knappen. Hele prosessen skjer lokalt på enheten din, og vi lagrer ingen data, noe som garanterer dokumentenes sikkerhet. + +## Brukertips + +Look Scanned er den enkleste måten å lage profesjonelle skanninger på uten å installere programvare. Besøk [lookscanned.io](https://lookscanned.io) og gi dokumentene dine et profesjonelt utseende! diff --git a/src/locales/how-to-use/markdowns/pl.md b/src/locales/how-to-use/markdowns/pl.md new file mode 100644 index 0000000..ed5687f --- /dev/null +++ b/src/locales/how-to-use/markdowns/pl.md @@ -0,0 +1,21 @@ +# Jak korzystać z Look Scanned + +Look Scanned umożliwia łatwe przekształcanie dokumentów w profesjonalnie wyglądające skany. Oto instrukcja: + +## Przesyłanie pliku + +Kliknij "Prześlij" lub przeciągnij dokument na stronę. Look Scanned obsługuje wszystkie popularne formaty: PDF, obrazy (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML i TXT. Po przesłaniu natychmiast zobaczysz podgląd, gdzie możesz dostosować efekty. + +## Dostosowywanie efektów + +Po przesłaniu możesz dostosować efekty skanowania. Ustaw kąt nachylenia, jasność, kontrast i rozmycie, aby uzyskać wygląd prawdziwego skanu. Wszystkie zmiany są widoczne na bieżąco w podglądzie, co pozwala uzyskać dokładnie taki efekt, jakiego potrzebujesz. + +Look Scanned przetwarza także dokumenty wielostronicowe, zapewniając jednolity wygląd wszystkich stron. + +## Pobieranie pliku + +Gdy efekt Cię zadowoli, kliknij "Utwórz skan". Przetwarzanie trwa zaledwie kilka sekund. Następnie możesz zapisać plik przyciskiem "Pobierz". Cały proces odbywa się lokalnie na Twoim urządzeniu i nie przechowujemy żadnych danych, co zapewnia prywatność Twoich dokumentów. + +## Wskazówki + +Look Scanned to najprostszy sposób na tworzenie profesjonalnie wyglądających skanów bez instalacji programów. Odwiedź [lookscanned.io](https://lookscanned.io) i nadaj swoim dokumentom profesjonalny wygląd! diff --git a/src/locales/how-to-use/markdowns/pt.md b/src/locales/how-to-use/markdowns/pt.md new file mode 100644 index 0000000..9d36170 --- /dev/null +++ b/src/locales/how-to-use/markdowns/pt.md @@ -0,0 +1,21 @@ +# Como Usar o Look Scanned + +O Look Scanned permite transformar seus documentos em digitalizações com aparência profissional de forma simples. Veja como fazer: + +## Carregar arquivo + +Clique no botão "Carregar" ou arraste seu documento diretamente para a página. O Look Scanned suporta diversos formatos: PDF, imagens (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML e TXT. Assim que o arquivo for carregado, uma pré-visualização aparecerá para você ajustar os efeitos. + +## Personalizar efeitos de digitalização + +Após carregar o arquivo, você pode personalizar os efeitos conforme desejar. Ajuste a inclinação, brilho, contraste e desfoque para obter a aparência de um documento realmente digitalizado. Todas as alterações são exibidas em tempo real na pré-visualização, permitindo que você obtenha exatamente o resultado desejado. + +O Look Scanned também processa documentos com várias páginas, mantendo uma aparência uniforme em todas elas. + +## Baixar arquivo + +Quando estiver satisfeito com o resultado, clique em "Criar digitalização". O processamento leva apenas alguns segundos. Em seguida, você poderá baixar o arquivo clicando no botão "Baixar". Todo o processo ocorre localmente no seu dispositivo e não armazenamos nenhum conteúdo, garantindo a privacidade dos seus documentos. + +## Dicas de uso + +O Look Scanned é a solução ideal para criar documentos com aparência autêntica de digitalização, sem necessidade de instalar software. Visite [lookscanned.io](https://lookscanned.io) e dê um toque profissional aos seus documentos! diff --git a/src/locales/how-to-use/markdowns/ru.md b/src/locales/how-to-use/markdowns/ru.md new file mode 100644 index 0000000..a5f0351 --- /dev/null +++ b/src/locales/how-to-use/markdowns/ru.md @@ -0,0 +1,21 @@ +# Как использовать Look Scanned + +Look Scanned позволяет легко преобразовать ваши документы в профессионально выглядящие сканы. Вот как это сделать: + +## Загрузка файла + +Нажмите кнопку "Загрузить" или просто перетащите документ в окно браузера. Look Scanned поддерживает все популярные форматы: PDF, изображения (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML и TXT. Сразу после загрузки появится предварительный просмотр, где вы сможете настроить эффекты. + +## Настройка эффектов сканирования + +После загрузки вы можете настроить эффекты сканирования по своему усмотрению. Отрегулируйте угол наклона, яркость, контрастность и размытие, чтобы добиться вида реального отсканированного документа. Все изменения отображаются в режиме реального времени, позволяя точно настроить желаемый результат. + +Look Scanned также обрабатывает многостраничные документы, обеспечивая единый вид для всех страниц. + +## Скачивание результата + +Когда вы довольны результатом, нажмите "Создать скан". Обработка займет всего несколько секунд. После этого вы сможете скачать готовый файл, нажав кнопку "Скачать". Весь процесс происходит локально на вашем устройстве, и мы не сохраняем загруженные файлы, обеспечивая полную конфиденциальность ваших данных. + +## Полезные советы + +Look Scanned – это быстрое и эффективное решение для создания документов с эффектом сканирования без установки дополнительного программного обеспечения. Посетите [lookscanned.io](https://lookscanned.io) и придайте своим документам профессиональный вид! diff --git a/src/locales/how-to-use/markdowns/sv.md b/src/locales/how-to-use/markdowns/sv.md new file mode 100644 index 0000000..06c3200 --- /dev/null +++ b/src/locales/how-to-use/markdowns/sv.md @@ -0,0 +1,21 @@ +# Så här använder du Look Scanned + +Med Look Scanned kan du enkelt skapa professionella skanningar av dina dokument. Följ dessa steg: + +## Ladda upp dokument + +Klicka på "Ladda upp" eller dra dokumentet till sidan. Look Scanned stöder alla vanliga format: PDF, bilder (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML och TXT. När dokumentet har laddats upp visas en förhandsgranskning där du kan justera effekterna. + +## Justera skanningseffekter + +Efter uppladdningen kan du anpassa skanningseffekterna. Justera lutning, ljusstyrka, kontrast och oskärpa för att få ett äkta skannat utseende. Alla ändringar visas direkt i förhandsgranskningen så att du får exakt det resultat du önskar. + +Look Scanned hanterar även flersidiga dokument och ger samma utseende på alla sidor. + +## Ladda ner resultat + +När du är nöjd med resultatet, klicka på "Skapa skanning". Bearbetningen tar bara några sekunder. Därefter kan du spara filen via "Ladda ner". Hela processen sker lokalt på din enhet och vi sparar ingen data, vilket säkerställer din integritet. + +## Tips och råd + +Look Scanned är det enklaste sättet att skapa äkta skanningar utan att installera program. Besök [lookscanned.io](https://lookscanned.io) och ge dina dokument ett professionellt utseende! diff --git a/src/locales/how-to-use/markdowns/th.md b/src/locales/how-to-use/markdowns/th.md new file mode 100644 index 0000000..f8e5f79 --- /dev/null +++ b/src/locales/how-to-use/markdowns/th.md @@ -0,0 +1,21 @@ +# วิธีใช้งาน Look Scanned + +Look Scanned ช่วยให้คุณสร้างเอกสารสแกนที่ดูเป็นมืออาชีพได้อย่างง่ายดาย มาดูวิธีการใช้งานกัน: + +## อัปโหลดเอกสาร + +คลิกที่ปุ่ม "อัปโหลด" หรือลากเอกสารมาวางที่หน้าเว็บ Look Scanned รองรับไฟล์ทุกรูปแบบที่ใช้งานทั่วไป: PDF, รูปภาพ (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML และ TXT เมื่ออัปโหลดเสร็จ คุณจะเห็นตัวอย่างสำหรับปรับแต่งเอฟเฟกต์ + +## ปรับแต่งเอฟเฟกต์ + +หลังจากอัปโหลด คุณสามารถปรับแต่งเอฟเฟกต์การสแกนได้ตามต้องการ ปรับมุมเอียง ความสว่าง คอามคมชัด และความเบลอ เพื่อให้ได้ลุคเหมือนสแกนจริง การเปลี่ยนแปลงทั้งหมดจะแสดงในตัวอย่างทันที ช่วยให้คุณได้ผลลัพธ์ที่ต้องการ + +Look Scanned ยังรองรับเอกสารหลายหน้า และสร้างลุคที่เหมือนกันในทุกหน้า + +## ดาวน์โหลดเอกสาร + +เมื่อพอใจกับผลลัพธ์แล้ว คลิก "สร้างสแกน" การประมวลผลใช้เวลาเพียงไม่กี่วินาที จากนั้นคุณสามารถบันทึกไฟล์ด้วยปุ่ม "ดาวน์โหลด" การปำงานทั้งหมดเกิดขึ้นในอุปกรณ์ของคุณเท่านั้น และเราไม่เก็บข้อมูลใดๆ ไว้ ทำให้เอกสารของคุณปลอดภัย + +## เคล็ดลับการใช้งาน + +Look Scanned เป็นวิธีที่ง่ายที่สุดในการสร้างเอกสารสแกนที่ดูเป็นมืออาชีพโดยไม่ต้องติดตั้งโปรแกรม เข้าชม [lookscanned.io](https://lookscanned.io) และสร้างลุคแบบมืออาชีพให้กับเอกสารของคุณ! diff --git a/src/locales/how-to-use/markdowns/tr.md b/src/locales/how-to-use/markdowns/tr.md new file mode 100644 index 0000000..4e6de67 --- /dev/null +++ b/src/locales/how-to-use/markdowns/tr.md @@ -0,0 +1,21 @@ +# Look Scanned Nasıl Kullanılır + +Look Scanned ile belgelerinizi kolayca profesyonel taramalara dönüştürün. İşte adım adım kullanımı: + +## Dosya Yükleme + +"Yükle" butonuna tıklayın veya belgenizi doğrudan sayfaya sürükleyin. Look Scanned tüm yaygın formatları destekler: PDF, resimler (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML ve TXT. Dosyanız yüklenir yüklenmez, efektleri ayarlayabileceğiniz bir önizleme göreceksiniz. + +## Tarama Efektlerini Ayarlama + +Yüklemeden sonra tarama efektlerini dilediğiniz gibi ayarlayabilirsiniz. Eğim açısı, parlaklık, kontrast ve bulanıklık ayarlarıyla gerçek bir tarama görünümü elde edin. Tüm değişiklikler anında önizlemede görüntülenir, böylece tam istediğiniz sonuca ulaşabilirsiniz. + +Look Scanned çok sayfalı belgeleri de işler ve tüm sayfalarda aynı görünümü sağlar. + +## Dosyayı İndirme + +Sonuçtan memnun kaldığınızda "Tarama Oluştur" butonuna tıklayın. İşlem sadece birkaç saniye sürer. Ardından dosyanızı "İndir" butonuyla kaydedebilirsiniz. Tüm işlemler cihazınızda gerçekleşir ve hiçbir içerik saklanmaz, böylece belgelerinizin gizliliği güvende kalır. + +## Kullanım İpuçları + +Look Scanned, program kurmadan belgelerinize gerçek tarama görünümü kazandırmanın en hızlı yoludur. [lookscanned.io](https://lookscanned.io) adresini ziyaret edin ve belgelerinize profesyonel bir görünüm katın! diff --git a/src/locales/how-to-use/markdowns/vi.md b/src/locales/how-to-use/markdowns/vi.md new file mode 100644 index 0000000..c8a5563 --- /dev/null +++ b/src/locales/how-to-use/markdowns/vi.md @@ -0,0 +1,21 @@ +# Cách sử dụng Look Scanned + +Look Scanned giúp bạn dễ dàng tạo bản quét chuyên nghiệp từ tài liệu của mình. Sau đây là hướng dẫn sử dụng: + +## Tải tài liệu lên + +Nhấp vào nút "Tải lên" hoặc kéo thả tài liệu vào trang web. Look Scanned hỗ trợ các định dạng phổ biến: PDF, ảnh (JPG, PNG), DOCX, PPTX, Excel, Markdown, HTML và TXT. Ngay khi tải lên xong, bạn sẽ thấy bản xem trước để điều chỉnh hiệu ứng. + +## Tùy chỉnh hiệu ứng + +Sau khi tải lên, bạn có thể điều chỉnh các hiệu ứng quét theo ý muốn. Chỉnh góc nghiêng, độ sáng, độ tương phản và độ mờ để tạo vẻ ngoài như bản quét thật. Mọi thay đổi được hiển thị ngay trên bản xem trước, giúp bạn có được kết quả chính xác như mong muốn. + +Look Scanned cũng xử lý được tài liệu nhiều trang và tạo giao diện đồng nhất cho tất cả các trang. + +## Tải tài liệu xuống + +Khi đã hài lòng với kết quả, nhấp vào "Tạo bản quét". Quá trình xử lý chỉ mất vài giây. Sau đó, bạn có thể lưu tệp bằng nút "Tải xuống". Toàn bộ quá trình xử lý diễn ra trên thiết bị của bạn và chúng tôi không lưu trữ bất kỳ nội dung nào, đảm bảo tính riêng tư cho tài liệu của bạn. + +## Mẹo sử dụng + +Look Scanned là cách đơn giản nhất để tạo bản quét chuyên nghiệp mà không cần cài đặt phần mềm. Truy cập [lookscanned.io](https://lookscanned.io) và tạo diện mạo chuyên nghiệp cho tài liệu của bạn! diff --git a/src/locales/how-to-use/markdowns/zh-CN.md b/src/locales/how-to-use/markdowns/zh-CN.md new file mode 100644 index 0000000..054c908 --- /dev/null +++ b/src/locales/how-to-use/markdowns/zh-CN.md @@ -0,0 +1,21 @@ +# 如何使用 Look Scanned 进行扫描 + +使用 Look Scanned 非常简单,只需按照以下步骤即可将您的文档转换为逼真的扫描效果。 + +## 上传文件 + +点击页面上的“上传文件”按钮,选择您希望转换的文档。目前支持多种文件格式,包括 PDF、图片(如 JPG、PNG)、DOCX、PPTX、Excel、Markdown、HTML 和 TXT 等。您也可以直接将文件拖拽至页面中。文件上传完成后,系统将立刻生成预览效果,方便您对文件进行进一步调整。 + +## 选择扫描效果 + +上传文件后,您可以根据需求选择并调整扫描效果的参数。支持调整的内容包括倾斜角度、亮度对比度、模糊程度等,以便生成最接近真实扫描件的效果。每次调整后,页面会即时更新预览,让您直观地查看效果并优化设置。 + +此外,Look Scanned 还支持对多页文件进行统一处理,无论是几十页的长篇文档还是单页文件,都能保持一致的扫描效果。 + +## 下载文件 + +当您对扫描效果满意后,点击“生成扫描文件”按钮,系统将在几秒钟内处理您的文档。完成后,点击“下载”按钮即可将生成的扫描效果文件保存至本地。Look Scanned 所有文件均在用户本地环境中处理,系统不会保存任何上传内容,确保您的数据安全无虞。 + +## 温馨提示 + +通过 Look Scanned,您无需安装任何软件即可快速高效地为文档添加真实的扫描质感。立即访问 [lookscanned.io](https://lookscanned.io) ,让您的文档焕然一新! diff --git a/src/locales/how-to-use/markdowns/zh-HK.md b/src/locales/how-to-use/markdowns/zh-HK.md new file mode 100644 index 0000000..65f0bfc --- /dev/null +++ b/src/locales/how-to-use/markdowns/zh-HK.md @@ -0,0 +1,21 @@ +# 如何使用 Look Scanned + +Look Scanned 幫你輕鬆整到專業嘅文件掃描效果。以下係使用指南: + +## 上載文件 + +撳「上載」掣或者將文件拖入版面。Look Scanned 支援所有常見格式:PDF、圖片(JPG、PNG)、DOCX、PPTX、Excel、Markdown、HTML 同埋 TXT。上載咗之後,你可以即刻喺預覽度調整效果。 + +## 調整效果 + +上載咗之後,你可以跟據需要調整掃描效果。調整傾斜角度、光暗、對比度同埋模糊程度,令效果更似真嘅掃描。所有更改都會即時喺預覽度顯示,等你可以整到理想嘅效果。 + +Look Scanned 仲支援多頁文件處理,確保所有頁面都有一致嘅效果。 + +## 下載文件 + +當你對結果滿意嘅時候,撳「製作掃描」。處理過程只係需要幾秒鐘。跟住你就可以用「下載」掣儲存檔案。所有處理都係喺你部裝置度進行,我哋唔會儲存任何內容,確保你嘅文件私隱安全。 + +## 使用技巧 + +Look Scanned 係整專業掃描效果最簡單嘅方法,唔使安裝任何軟件。瀏覽 [lookscanned.io](https://lookscanned.io),等你嘅文件睇落更加專業! diff --git a/src/locales/how-to-use/markdowns/zh-TW.md b/src/locales/how-to-use/markdowns/zh-TW.md new file mode 100644 index 0000000..8d264e6 --- /dev/null +++ b/src/locales/how-to-use/markdowns/zh-TW.md @@ -0,0 +1,21 @@ +# 如何使用 Look Scanned + +Look Scanned 幫助您輕鬆製作專業的文件掃描效果。以下是使用指南: + +## 上傳文件 + +點擊「上傳」按鈕或將文件拖曳至頁面。Look Scanned 支援所有常見格式:PDF、圖片(JPG、PNG)、DOCX、PPTX、Excel、Markdown、HTML 和 TXT。上傳後,您可以立即在預覽中調整效果。 + +## 調整效果 + +上傳後,您可以根據需求調整掃描效果。調整傾斜角度、亮度、對比度和模糊度,以獲得真實的掃描效果。所有變更都會即時顯示在預覽中,幫助您獲得理想的效果。 + +Look Scanned 也支援多頁文件處理,並確保所有頁面具有一致的外觀。 + +## 下載文件 + +當您對結果滿意時,點擊「建立掃描」。處理過程只需幾秒鐘。然後您可以使用「下載」按鈕儲存檔案。所有處理都在您的裝置上進行,我們不會儲存任何內容,確保您的文件隱私安全。 + +## 使用技巧 + +Look Scanned 是製作專業掃描效果最簡單的方式,無需安裝任何軟體。造訪 [lookscanned.io](https://lookscanned.io),為您的文件增添專業外觀! diff --git a/src/main.ts b/src/main.ts index c8e37b0..6481187 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,9 +1,14 @@ import { createApp } from 'vue' import App from './App.vue' import router from './router' +import { createHead } from '@unhead/vue' + +import './assets/locale-font.css' +import './assets/darkmode.css' const app = createApp(App) app.use(router) +app.use(createHead()) app.mount('#app') diff --git a/src/router/index.ts b/src/router/index.ts index 29788a1..0ab01a0 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,5 +1,6 @@ import { createRouter, createWebHistory } from 'vue-router' import HomeView from '../views/HomeView.vue' +import HowToUseView from '../views/HowToUseView.vue' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), @@ -9,7 +10,19 @@ const router = createRouter({ name: 'home', component: HomeView, }, + { + path: '/how-to-use/:lang', + name: 'how-to-use', + component: HowToUseView, + }, ], + scrollBehavior(to, from, savedPosition) { + if (savedPosition) { + return savedPosition + } else { + return { top: 0 } + } + }, }) export default router diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index ebe4fd1..9962766 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -1,5 +1,50 @@ - - + + + + diff --git a/src/views/HowToUseView.vue b/src/views/HowToUseView.vue new file mode 100644 index 0000000..5de9d8b --- /dev/null +++ b/src/views/HowToUseView.vue @@ -0,0 +1,11 @@ + + + diff --git a/vite.config.ts b/vite.config.ts index 4217010..415c023 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,18 +1,24 @@ import { fileURLToPath, URL } from 'node:url' - +import { execSync } from 'node:child_process' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import vueDevTools from 'vite-plugin-vue-devtools' +const gitCommit = execSync('git rev-parse HEAD').toString().trim() +const gitCommitTime: number = + parseInt(execSync(`git show -s --format=%ct ${gitCommit}`).toString().trim()) * 1000 + // https://vite.dev/config/ export default defineConfig({ - plugins: [ - vue(), - vueDevTools(), - ], + plugins: [vue(), vueDevTools()], + assetsInclude: ['**/*.md'], resolve: { alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) + '@': fileURLToPath(new URL('./src', import.meta.url)), }, }, + define: { + __GIT_COMMIT__: JSON.stringify(gitCommit), + __GIT_COMMIT_TIME__: gitCommitTime, + }, })