diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 0000000..ce8813d --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) \ No newline at end of file diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 0000000..4dc4029 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json", + "changelog": [ + "@changesets/changelog-github", + { + "repo": "quran/api-js" + } + ], + "baseBranch": "main", + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "updateInternalDependencies": "patch", + "ignore": [ + "@quranjs/docs" + ] +} \ No newline at end of file diff --git a/.changeset/late-parks-return.md b/.changeset/late-parks-return.md new file mode 100644 index 0000000..c0a9b36 --- /dev/null +++ b/.changeset/late-parks-return.md @@ -0,0 +1,5 @@ +--- +"@quranjs/api": major +--- + +Migrate to the new quran.foundation API diff --git a/.cursor/rules/clean-code.mdc b/.cursor/rules/clean-code.mdc new file mode 100644 index 0000000..53b68b7 --- /dev/null +++ b/.cursor/rules/clean-code.mdc @@ -0,0 +1,55 @@ +--- +description: Guidelines for writing clean, maintainable, and human-readable code. Apply these rules when writing or reviewing code to ensure consistency and quality. +globs: +alwaysApply: true +--- + +# Clean Code Guidelines + +## Constants Over Magic Numbers + +- Replace hard-coded values with named constants +- Use descriptive constant names that explain the value's purpose +- Keep constants at the top of the file or in a dedicated constants file + +## Meaningful Names + +- Variables, functions, and classes should reveal their purpose +- Names should explain why something exists and how it's used +- Avoid abbreviations unless they're universally understood + +## Smart Comments + +- Don't comment on what the code does - make the code self-documenting +- Use comments to explain why something is done a certain way +- Document APIs, complex algorithms, and non-obvious side effects + +## Single Responsibility + +- Each function should do exactly one thing +- Functions should be small and focused +- If a function needs a comment to explain what it does, it should be split + +## DRY (Don't Repeat Yourself) + +- Extract repeated code into reusable functions +- Share common logic through proper abstraction +- Maintain single sources of truth + +## Clean Structure + +- Keep related code together +- Organize code in a logical hierarchy +- Use consistent file and folder naming conventions + +## Encapsulation + +- Hide implementation details +- Expose clear interfaces +- Move nested conditionals into well-named functions + +## Code Quality Maintenance + +- Refactor continuously +- Fix technical debt early +- Leave code cleaner than you found it \ No newline at end of file diff --git a/.cursor/rules/general.mdc b/.cursor/rules/general.mdc new file mode 100644 index 0000000..6da12d2 --- /dev/null +++ b/.cursor/rules/general.mdc @@ -0,0 +1,73 @@ +--- +description: +globs: +alwaysApply: true +--- + +# Overview + +You are an expert in TypeScript library development with excellent taste in API design. + +- Follow the user's requirements carefully & to the letter. +- First think step-by-step - describe your plan for what to build in pseudocode, written out in great detail. + +## Tech Stack + +You're working in a monorepo using: + +- TypeScript +- Pnpm +- Vitest + +## Core Principles + +- Write straightforward, readable, and maintainable code. Use explicit types on exported functions. +- Use strong typing, avoid 'any'. +- Restate what the objective is of what you are being asked to change clearly in a short summary. +- Do not use any third party library. The library must confirm to [Standard Schema](mdc:https:/standardschema.dev) and not be tied to any one schema validation library. +- Reason about the API design before implementing changes. Is it possible to achieve strong and generic typing for your chosen API? If not, reconsider. +- Create clearly documented changesets for your introduced changes using `pnpm changeset`. + +## Coding Standards + +### Naming Conventions + +- Variables, functions, methods: camelCase +- Files, directories: kebab-case +- Constants, env variables: UPPERCASE + +### Functions + +- Use descriptive names: verbs & nouns (e.g., getUserData) +- Prefer the `function` keyword over arrow functions where their differences doesn't matter. +- Document with JSDoc annotations + +### Types and Interfaces + +- Prefer custom interfaces over inline types +- Use 'readonly' for immutable properties +- If an import is only used as a type in the file, use 'import type' instead of 'import' + +### Validating changes + +- Always validate your changes confirm to the project lint configuration by running `pnpm lint`. +- Write tests for changes and validate they pass using `pnpm test`. + +## Code Review Checklist + +- Ensure proper typing +- Check for code duplication +- Verify error handling +- Confirm test coverage +- Review naming conventions +- Assess overall code structure and readability + +## Documentation + +- Use the active voice +- Use the present tense +- Write in a clear and concise manner +- Present information in a logical order +- Use lists and tables when appropriate +- When writing JSDocs, only use TypeDoc compatible tags. +- Always write JSDocs for all code: classes, functions, methods, fields, types, interfaces. diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 7773828..0000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -dist/ \ No newline at end of file diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 59f00ae..0000000 --- a/.eslintrc +++ /dev/null @@ -1,27 +0,0 @@ -{ - "root": true, - "parser": "@typescript-eslint/parser", - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "prettier", - "plugin:prettier/recommended" - ], - "plugins": ["@typescript-eslint", "prettier"], - "rules": { - "prettier/prettier": [ - "error", - {}, - { - "usePrettierrc": true - } - ] - }, - "env": { - "es6": true - }, - "parserOptions": { - "ecmaVersion": 2017 - } -} diff --git a/.github/setup/action.yml b/.github/setup/action.yml new file mode 100644 index 0000000..fd4bf04 --- /dev/null +++ b/.github/setup/action.yml @@ -0,0 +1,17 @@ +name: "Setup and install" +description: "Common setup steps for Actions" + +runs: + using: composite + steps: + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: ".nvmrc" + cache: "pnpm" + + - shell: bash + run: pnpm add -g turbo + + - shell: bash + run: pnpm install \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1fd91b8..610759d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,71 +1,69 @@ name: CI -on: [push] +on: + pull_request: + branches: ["*"] + push: + branches: ["main"] + merge_group: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} env: + FORCE_COLOR: 3 HUSKY: 0 jobs: build: - if: github.repository == 'quran/api-js' && (github.ref == 'refs/heads/master') && github.event_name != 'pull_request' - name: ⚒️ Build, lint, and test on Node ${{ matrix.node }} and ${{ matrix.os }} - + name: ⚒️ Build runs-on: ubuntu-latest - strategy: - matrix: - node: ['18.x', '20.x'] - steps: - name: Checkout repo uses: actions/checkout@v4 + - uses: ./.github/setup + - run: pnpm build --filter="./packages/*" - - name: Setup PNPM - uses: pnpm/action-setup@v4 - - - name: Install Node.js ${{ matrix.node }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - cache: "pnpm" - - - name: Install dependencies - shell: bash - run: pnpm install - - - name: Lint - run: pnpm lint --quiet - - - name: Test - run: pnpm test:coverage - - - name: Build - run: pnpm build + lint: + name: ✨ Lint + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + - uses: ./.github/setup + - run: pnpm lint --quiet - test-and-publish: - name: 🎉 Publish to NPM - needs: [build] - if: github.repository == 'quran/api-js' && (github.ref == 'refs/heads/master') && github.event_name != 'pull_request' + typecheck: + name: 🔍 Typecheck runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout repo + uses: actions/checkout@v4 + - uses: ./.github/setup + - run: pnpm typecheck - - name: Setup PNPM - uses: pnpm/action-setup@v4 + test: + name: 🧪 Test + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + - uses: ./.github/setup + - run: pnpm test - - uses: actions/setup-node@v4 + size: + name: 📦 Size + runs-on: ubuntu-latest + env: + CI_JOB_NUMBER: 1 + steps: + - name: Checkout repo + uses: actions/checkout@v4 + - uses: ./.github/setup + - uses: andresz1/size-limit-action@v1.8.0 with: - node-version: 20 - registry-url: https://registry.npmjs.org/ - cache: "pnpm" - - - name: Install dependencies - shell: bash - run: pnpm install - - - name: Build - run: pnpm build - - - run: npx semantic-release@17 - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + directory: packages/api/ + skip_step: install + package_manager: pnpm + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml deleted file mode 100644 index c8a2140..0000000 --- a/.github/workflows/pr.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: PR - -on: [pull_request] - -env: - HUSKY: 0 - -jobs: - build: - name: ⚒️ Build, lint, and test on Node ${{ matrix.node }} and ${{ matrix.os }} - - runs-on: ubuntu-latest - strategy: - matrix: - node: ['18.x', '20.x'] - - steps: - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Setup PNPM - uses: pnpm/action-setup@v4 - - - name: Install Node.js ${{ matrix.node }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - cache: "pnpm" - - - name: Install dependencies - shell: bash - run: pnpm install - - - name: Lint - run: pnpm lint --quiet - - - name: Test - run: pnpm test:coverage - - - name: Build - run: pnpm build - - size: - runs-on: ubuntu-latest - env: - CI_JOB_NUMBER: 1 - steps: - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Setup PNPM - uses: pnpm/action-setup@v4 - - - uses: andresz1/size-limit-action@v1 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..5b7a29c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,46 @@ +name: 🚀 Release + +on: + push: + branches: ["main"] + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +env: + HUSKY: 0 + +permissions: + contents: write + issues: write + pull-requests: write + packages: write + +jobs: + release: + name: Release + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v4 + + - name: Setup + uses: ./.github/setup + + - name: Build + run: pnpm build --filter=./packages/* + + - name: Create Release Pull Request or Publish to npm + id: changesets + uses: changesets/action@v1.4.1 + with: + commit: "chore(release): 📦 version packages" + title: "chore(release): 📦 version packages" + publish: pnpm release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + + # - name: Send a Slack notification if a publish happens + # if: steps.changesets.outputs.published == 'true' + # # You can do something when a publish happens. + # run: my-slack-bot send-notification --message "A new version of ${GITHUB_REPOSITORY} was published!" diff --git a/.gitignore b/.gitignore index a887c91..fb51640 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,16 @@ -*.log -.DS_Store +coverage +.husky node_modules dist -coverage -.husky \ No newline at end of file +.cache + + +.next +.output +.turbo +.vercel +.DS_Store + +env.d.ts +next-env.d.ts +**/.vscode diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..db0ad5e --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +node-linker=hoisted +link-workspace-packages=true \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..e70b3ae --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22.12 \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 46d05c2..0000000 --- a/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "auto", - "printWidth": 80, - "semi": true, - "singleQuote": true, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..488993b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,31 @@ +{ + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "[typescript,typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "editor.formatOnSave": true, + "eslint.rules.customizations": [{ "rule": "*", "severity": "warn" }], + "eslint.runtime": "node", + "eslint.workingDirectories": [ + { "pattern": "apps/*/" }, + { "pattern": "packages/*/" }, + { "pattern": "tooling/*/" } + ], + "prettier.ignorePath": ".gitignore", + "tailwindCSS.experimental.classRegex": [ + ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], + ["cx\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"] + ], + "tailwindCSS.experimental.configFile": "./apps/docs/src/styles/globals.css", + "typescript.enablePromptUseWorkspaceTsdk": true, + "typescript.preferences.autoImportFileExcludePatterns": [ + "radix-ui", + "next/router", + "next/dist", + "lucide-react/dist/lucide-react.suffixed" + ], + "typescript.tsdk": "node_modules/typescript/lib" +} diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore new file mode 100644 index 0000000..55a12ae --- /dev/null +++ b/apps/docs/.gitignore @@ -0,0 +1,28 @@ +# deps +/node_modules + +# generated content +.contentlayer +.content-collections +.source + +# test & build +/coverage +/.next/ +/out/ +/build +*.tsbuildinfo + +# misc +.DS_Store +*.pem +/.pnp +.pnp.js +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# others +.env*.local +.vercel +next-env.d.ts \ No newline at end of file diff --git a/apps/docs/README.md b/apps/docs/README.md new file mode 100644 index 0000000..b6f494e --- /dev/null +++ b/apps/docs/README.md @@ -0,0 +1,45 @@ +# docs + +This is a Next.js application generated with +[Create Fumadocs](https://github.com/fuma-nama/fumadocs). + +Run development server: + +```bash +npm run dev +# or +pnpm dev +# or +yarn dev +``` + +Open http://localhost:3000 with your browser to see the result. + +## Explore + +In the project, you can see: + +- `lib/source.ts`: Code for content source adapter, [`loader()`](https://fumadocs.dev/docs/headless/source-api) provides the interface to access your content. +- `app/layout.config.tsx`: Shared options for layouts, optional but preferred to keep. + +| Route | Description | +| ------------------------- | ------------------------------------------------------ | +| `app/(home)` | The route group for your landing page and other pages. | +| `app/docs` | The documentation layout and pages. | +| `app/api/search/route.ts` | The Route Handler for search. | + +### Fumadocs MDX + +A `source.config.ts` config file has been included, you can customise different options like frontmatter schema. + +Read the [Introduction](https://fumadocs.dev/docs/mdx) for further details. + +## Learn More + +To learn more about Next.js and Fumadocs, take a look at the following +resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js + features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. +- [Fumadocs](https://fumadocs.vercel.app) - learn about Fumadocs diff --git a/apps/docs/content/docs/audio.mdx b/apps/docs/content/docs/audio.mdx new file mode 100644 index 0000000..351f56b --- /dev/null +++ b/apps/docs/content/docs/audio.mdx @@ -0,0 +1,88 @@ +--- +title: Audio API +description: Access Quran audio recitations from different reciters. +--- + +The Audio API provides access to audio recitations including chapter audio and verse-by-verse audio with timing. + +## Chapter Recitations + +### Get All Chapter Recitations + +```ts +const recitations = await client.audio.findAllChapterRecitations("2"); + +console.log(recitations[0]); +// { +// id: 1, +// chapterId: 1, +// fileSize: 12345, +// format: "mp3", +// audioUrl: "https://audio.quran.com/...", +// duration: 120 +// } +``` + +### ChapterRecitation Type + + + +### Get Specific Chapter + +```ts +const audio = await client.audio.findChapterRecitationById("2", "1"); + +console.log(`URL: ${audio.audioUrl}`); +console.log(`Duration: ${audio.duration}s`); +``` + +## Verse Recitations + +### By Chapter + +```ts +const { audioFiles, pagination } = await client.audio.findVerseRecitationsByChapter( + "1", // Chapter ID + "2" // Recitation ID +); + +audioFiles.forEach((audio) => { + console.log(`${audio.verseKey}: ${audio.url}`); +}); +``` + +### VerseRecitation Type + + + +### By Verse Key + +```ts +const { audioFiles } = await client.audio.findVerseRecitationsByKey( + "2:255", + "2" +); + +const audio = audioFiles[0]; +console.log(`URL: ${audio.url}`); +console.log(`Duration: ${audio.duration}s`); +``` + +## Field Selection + +```ts +const { audioFiles } = await client.audio.findVerseRecitationsByChapter("1", "2", { + fields: { + url: true, + duration: true, + segments: true, + format: false, + }, +}); +``` diff --git a/apps/docs/content/docs/chapters.mdx b/apps/docs/content/docs/chapters.mdx new file mode 100644 index 0000000..c863ad2 --- /dev/null +++ b/apps/docs/content/docs/chapters.mdx @@ -0,0 +1,64 @@ +--- +title: Chapters API +description: Access Quran chapter (surah) information and metadata. +--- + +The Chapters API provides access to information about the 114 chapters (surahs) of the Quran. + +## Get All Chapters + +```ts +const chapters = await client.chapters.findAll(); + +chapters.forEach((chapter) => { + console.log(`${chapter.id}. ${chapter.nameSimple} (${chapter.nameArabic})`); + console.log(` Verses: ${chapter.versesCount}`); + console.log(` Revelation: ${chapter.revelationPlace}`); +}); +``` + +### Chapter Type + + + +### With Language Options + +```ts +import { Language } from "@quranjs/api"; + +const arabicChapters = await client.chapters.findAll({ + language: Language.ARABIC, +}); + +const urduChapters = await client.chapters.findAll({ + language: Language.URDU, +}); +``` + +## Get Chapter by ID + +```ts +const alFatiha = await client.chapters.findById("1"); +const alBaqarah = await client.chapters.findById("2"); +const anNas = await client.chapters.findById("114"); +``` + +## Get Chapter Info + +```ts +const info = await client.chapters.findInfoById("1"); + +console.log(info.shortText); // Brief description +console.log(info.text); // Full description +console.log(info.source); // Source attribution +``` + +### ChapterInfo Type + + diff --git a/apps/docs/content/docs/index.mdx b/apps/docs/content/docs/index.mdx new file mode 100644 index 0000000..a032f13 --- /dev/null +++ b/apps/docs/content/docs/index.mdx @@ -0,0 +1,82 @@ +--- +title: Getting Started +description: Install and configure @quranjs/api - a TypeScript SDK for the Quran.com API. +--- + +## Installation + +```bash tab="npm" +npm install @quranjs/api +``` + +```bash tab="pnpm" +pnpm install @quranjs/api +``` + +```bash tab="yarn" +yarn add @quranjs/api +``` + +```bash tab="bun" +bun add @quranjs/api +``` + +## Quick Start + +```ts +import { Language, QuranClient } from "@quranjs/api"; + +// Initialize the client +const client = new QuranClient({ + clientId: process.env.QURAN_CLIENT_ID!, + clientSecret: process.env.QURAN_CLIENT_SECRET!, + defaults: { + language: Language.ENGLISH, + }, +}); + +// Fetch all chapters +const chapters = await client.chapters.findAll(); + +// Get a specific verse +const verse = await client.verses.findByKey("2:255", { + translations: [20], + words: true, +}); + +// Search +const results = await client.search.search("light", { + language: Language.ENGLISH, + size: 10, +}); +``` + +## Environment Variables + +```bash +# .env +QURAN_CLIENT_ID=your_client_id +QURAN_CLIENT_SECRET=your_client_secret +``` + +```ts +const client = new QuranClient({ + clientId: process.env.QURAN_CLIENT_ID!, + clientSecret: process.env.QURAN_CLIENT_SECRET!, +}); +``` + +## Runtime Configuration + +```ts +// Get current config +const config = client.getConfig(); + +// Update config +client.updateConfig({ + defaults: { language: Language.ARABIC }, +}); + +// Clear auth token +client.clearCachedToken(); +``` diff --git a/apps/docs/content/docs/juzs.mdx b/apps/docs/content/docs/juzs.mdx new file mode 100644 index 0000000..b2e3dbf --- /dev/null +++ b/apps/docs/content/docs/juzs.mdx @@ -0,0 +1,46 @@ +--- +title: Juzs API +description: Access information about the 30 Juzs (Para/Siparah) of the Quran. +--- + +The Juzs API provides information about the 30 Juzs, which are traditional divisions of the Quran. + +## Get All Juzs + +```ts +const juzs = await client.juzs.findAll(); + +console.log(juzs[0]); // First Juz +// { +// id: 1, +// juzNumber: 1, +// verseMapping: { +// "1:1": "1:7", +// "2:1": "2:141" +// }, +// firstVerseId: 1, +// lastVerseId: 148, +// versesCount: 148 +// } +``` + +## Juz Type + + + +## Understanding Verse Mapping + +```ts +const juz = juzs[0]; + +Object.entries(juz.verseMapping).forEach(([start, end]) => { + console.log(`${start} to ${end}`); +}); + +// Output: +// 1:1 to 1:7 (Al-Fatiha complete) +// 2:1 to 2:141 (First part of Al-Baqarah) +``` diff --git a/apps/docs/content/docs/meta.json b/apps/docs/content/docs/meta.json new file mode 100644 index 0000000..9c277d7 --- /dev/null +++ b/apps/docs/content/docs/meta.json @@ -0,0 +1,14 @@ +{ + "title": "Quran API", + "description": "The Quran API documentation", + "icon": "Building", + "root": true, + "pages": [ + "---Introduction---", + "index", + "---API---", + "...", + "---Migration from v1---", + "v1-migration-guide" + ] +} \ No newline at end of file diff --git a/apps/docs/content/docs/resources.mdx b/apps/docs/content/docs/resources.mdx new file mode 100644 index 0000000..8726bc2 --- /dev/null +++ b/apps/docs/content/docs/resources.mdx @@ -0,0 +1,200 @@ +--- +title: Resources API +description: Access metadata about translations, tafsirs, reciters, and languages. +--- + +The Resources API provides metadata about translations, tafsirs, reciters, and other Quranic resources. + +## Recitations + +### Get All Recitations + +```ts +const recitations = await client.resources.findAllRecitations(); + +recitations.forEach((r) => { + console.log(`${r.id}. ${r.reciterName} (${r.style})`); +}); +``` + +### RecitationResource Type + + + +### Get Recitation Details + +```ts +const info = await client.resources.findRecitationInfo("2"); + +console.log(info.reciterName); +console.log(info.bio); +console.log(info.photo); +``` + +### RecitationInfoResource Type + + + +## Translations + +### Get All Translations + +```ts +const translations = await client.resources.findAllTranslations(); + +const english = translations.filter((t) => t.languageName === "english"); +const urdu = translations.filter((t) => t.languageName === "urdu"); +``` + +### TranslationResource Type + + + +### Get Translation Details + +```ts +const info = await client.resources.findTranslationInfo("131"); + +console.log(info.name); +console.log(info.authorName); +console.log(info.languageName); +console.log(info.bio); +``` + +### TranslationInfoResource Type + + + +## Tafsirs + +### Get All Tafsirs + +```ts +const tafsirs = await client.resources.findAllTafsirs(); + +tafsirs.forEach((t) => { + console.log(`${t.name} by ${t.authorName}`); +}); +``` + +### TafsirResource Type + + + +### Get Tafsir Details + +```ts +const info = await client.resources.findTafsirInfo("171"); + +console.log(info.name); // "Tafsir Ibn Kathir" +console.log(info.authorName); // "Ibn Kathir" +console.log(info.bio); +``` + +### TafsirInfoResource Type + + + +## Languages + +```ts +const languages = await client.resources.findAllLanguages(); + +languages.forEach((lang) => { + console.log(`${lang.name} (${lang.iso}): ${lang.translationsCount} translations`); +}); +``` + +### LanguageResource Type + + + +## Chapter Resources + +### Chapter Information + +```ts +const chapterInfos = await client.resources.findAllChapterInfos(); + +chapterInfos.forEach((info) => { + console.log(`${info.name} - ${info.languageName}`); +}); +``` + +### ChapterInfoResource Type + + + +### Chapter Reciters + +```ts +const reciters = await client.resources.findAllChapterReciters(); + +reciters.forEach((r) => { + console.log(`${r.name} (${r.arabicName})`); +}); +``` + +### ChapterReciterResource Type + + + +## Recitation Styles + +```ts +const styles = await client.resources.findAllRecitationStyles(); + +console.log(styles.murattal); // Murattal reciters +console.log(styles.mujawwad); // Mujawwad reciters +``` + +### RecitationStylesResource Type + + + +## Verse Media + +```ts +const media = await client.resources.findVerseMedia(); + +console.log(media.unicode); // Font URL +console.log(media.image); // Images base URL +console.log(media.audio); // Audio base URL +``` + +### VerseMediaResource Type + + diff --git a/apps/docs/content/docs/search.mdx b/apps/docs/content/docs/search.mdx new file mode 100644 index 0000000..b7c4a4d --- /dev/null +++ b/apps/docs/content/docs/search.mdx @@ -0,0 +1,67 @@ +--- +title: Search API +description: Search Quran content with language support and pagination. +--- + +The Search API enables searching through Quranic content with multi-language support. + +## Basic Search + +```ts +const results = await client.search.search("light"); + +console.log(`Found ${results.totalResults} results`); + +results.results.forEach((result) => { + console.log(`${result.verseKey}: ${result.highlightedText}`); +}); +``` + +### SearchResult Type + + + +### With Language + +```ts +import { Language } from "@quranjs/api"; + +const results = await client.search.search("نور", { + language: Language.ARABIC, + size: 10, + page: 1, +}); +``` + +## Options + +### Pagination + +```ts +const results = await client.search.search("mercy", { + size: 10, // Results per page (default: 30) + page: 1, // Page number + language: Language.ENGLISH, +}); + +console.log(`Page ${results.currentPage} of ${results.totalPages}`); +``` + +### Language-Specific + +```ts +const english = await client.search.search("mercy", { + language: Language.ENGLISH, +}); + +const arabic = await client.search.search("رحمة", { + language: Language.ARABIC, +}); + +const urdu = await client.search.search("رحمت", { + language: Language.URDU, +}); +``` diff --git a/apps/docs/content/docs/v1-migration-guide.mdx b/apps/docs/content/docs/v1-migration-guide.mdx new file mode 100644 index 0000000..34e1b91 --- /dev/null +++ b/apps/docs/content/docs/v1-migration-guide.mdx @@ -0,0 +1,146 @@ +--- +title: Migration Guide +description: How to migrate from v1 to v2 +--- + +# Migration Guide: From quran.v4 to QuranClient + +This document outlines how to migrate from the old `quran.v4` API to the new class-based `QuranClient`. + +## Old Usage (Deprecated) + +```javascript +import { quran } from "@quranjs/api"; + +// Old way +const chapters = await quran.v4.chapters.findAll(); +const verse = await quran.v4.verses.findByKey("1:1"); +``` + +## New Usage (Recommended) + +```javascript +import { QuranClient } from "@quranjs/api"; + +// Create a client instance with your credentials +const client = new QuranClient({ + clientId: "your-client-id", + clientSecret: "your-client-secret", + // Optional: custom base URLs + contentBaseUrl: "https://apis.quran.foundation", // default + authBaseUrl: "https://oauth2.quran.foundation", // default + // Optional: custom fetch implementation + fetch: fetch, // default: global fetch +}); + +// Use the client +const chapters = await client.chapters.findAll(); +const verse = await client.verses.findByKey("1:1"); +``` + +## Authentication + +The new client automatically handles OAuth2 authentication using the client credentials flow: + +1. Requests an access token using your client ID and secret +2. Caches the token until it expires +3. Automatically refreshes the token when needed +4. Includes authentication headers in all API requests + +## API Changes + +All API methods remain the same, but they're now organized under the client instance: + +### Chapters + +- `client.chapters.findAll()` +- `client.chapters.findById(id)` +- `client.chapters.findInfoById(id)` + +### Verses + +- `client.verses.findByKey(key)` +- `client.verses.findByChapter(id)` +- `client.verses.findByPage(page)` +- `client.verses.findByJuz(juz)` +- `client.verses.findByHizb(hizb)` +- `client.verses.findByRub(rub)` +- `client.verses.findRandom()` + +### Juzs + +- `client.juzs.findAll()` + +### Audio + +- `client.audio.findAllChapterRecitations(reciterId)` +- `client.audio.findChapterRecitationById(reciterId, chapterId)` +- `client.audio.findVerseRecitationsByChapter(chapterId, recitationId)` +- `client.audio.findVerseRecitationsByKey(key, recitationId)` + +### Resources + +- `client.resources.findAllRecitations()` +- `client.resources.findAllTranslations()` +- `client.resources.findAllTafsirs()` +- `client.resources.findAllLanguages()` +- `client.resources.findRecitationInfo(id)` +- `client.resources.findTranslationInfo(id)` +- `client.resources.findTafsirInfo(id)` + +### Search + +- `client.search.search(query, options)` + +## Configuration Updates + +You can update the client configuration at runtime: + +```javascript +client.updateConfig({ + contentBaseUrl: "https://new-api-base.com", +}); +``` + +## Backward Compatibility + +The old `quran.v4` API is still available for backward compatibility but is deprecated: + +```javascript +import { quran } from "@quranjs/api"; + +// Still works but deprecated +const chapters = await quran.v4.chapters.findAll(); +``` + +## Error Handling + +The new client provides better error handling with authentication-specific errors: + +```javascript +try { + const chapters = await client.chapters.findAll(); +} catch (error) { + if (error.message.includes("Token request failed")) { + // Handle authentication error + console.error("Authentication failed:", error.message); + } else { + // Handle other API errors + console.error("API error:", error.message); + } +} +``` + +## Custom Fetch + +You can provide a custom fetch implementation for environments that don't have global fetch: + +```javascript +import nodeFetch from "node-fetch"; + +const client = new QuranClient({ + clientId: "your-client-id", + clientSecret: "your-client-secret", + fetch: nodeFetch, +}); +``` diff --git a/apps/docs/content/docs/verses.mdx b/apps/docs/content/docs/verses.mdx new file mode 100644 index 0000000..9f5cc73 --- /dev/null +++ b/apps/docs/content/docs/verses.mdx @@ -0,0 +1,149 @@ +--- +title: Verses API +description: Retrieve Quran verses with translations, tafsirs, audio, and word-by-word analysis. +--- + +The Verses API provides access to Quranic verses with support for translations, tafsirs, audio, and word analysis. + +## Get Verse by Key + +```ts +const verse = await client.verses.findByKey("2:255"); +const firstVerse = await client.verses.findByKey("1:1"); +const lastVerse = await client.verses.findByKey("114:6"); +``` + +### Verse Type + + + +### With Translations + +```ts +const verse = await client.verses.findByKey("2:255", { + translations: [20, 131], // English and Urdu + words: true, + translationFields: { + text: true, + languageName: true, + resourceName: true, + }, +}); +``` + +### With Audio + +```ts +const verse = await client.verses.findByKey("1:1", { + reciter: 2, + words: true, +}); +``` + +### With Tafsir + +```ts +const verse = await client.verses.findByKey("1:1", { + tafsirs: [171], + translations: [20], +}); +``` + +## Get Verses by Chapter + +```ts +const verses = await client.verses.findByChapter("1"); + +const paginated = await client.verses.findByChapter("2", { + translations: [20], + perPage: 10, + page: 1, + words: true, +}); +``` + +## Get Verses by Page + +```ts +const firstPage = await client.verses.findByPage("1"); +const page42 = await client.verses.findByPage("42", { + translations: [131], +}); +``` + +## Get Verses by Divisions + +```ts +// By Juz +const juz1 = await client.verses.findByJuz("1"); + +// By Hizb +const hizb1 = await client.verses.findByHizb("1"); + +// By Rub +const rub1 = await client.verses.findByRub("1"); +``` + +## Get Random Verse + +```ts +const random = await client.verses.findRandom({ + translations: [20], + words: true, +}); +``` + +## Field Selection + +### Word Fields + +```ts +const verse = await client.verses.findByKey("1:1", { + words: true, + wordFields: { + textUthmani: true, + transliteration: true, + translation: true, + audio: true, + }, +}); +``` + +### Translation Fields + +```ts +const verse = await client.verses.findByKey("2:255", { + translations: [20, 131], + translationFields: { + text: true, + languageName: true, + resourceName: true, + }, +}); +``` + +### Verse Fields + +```ts +const verse = await client.verses.findByKey("1:1", { + fields: { + textUthmani: true, + textUthmaniTajweed: true, + pageNumber: true, + juzNumber: true, + }, +}); +``` + +## Pagination + +```ts +const verses = await client.verses.findByChapter("2", { + page: 1, + perPage: 20, + translations: [20], +}); +``` diff --git a/apps/docs/eslint.config.js b/apps/docs/eslint.config.js new file mode 100644 index 0000000..88dd811 --- /dev/null +++ b/apps/docs/eslint.config.js @@ -0,0 +1,14 @@ +import baseConfig, { restrictEnvAccess } from "@quranjs/eslint-config/base"; +import nextjsConfig from "@quranjs/eslint-config/nextjs"; +import reactConfig from "@quranjs/eslint-config/react"; + +/** @type {import('typescript-eslint').Config} */ +export default [ + { + ignores: [".next/**"], + }, + ...baseConfig, + ...reactConfig, + ...nextjsConfig, + ...restrictEnvAccess, +]; \ No newline at end of file diff --git a/apps/docs/next.config.ts b/apps/docs/next.config.ts new file mode 100644 index 0000000..7270952 --- /dev/null +++ b/apps/docs/next.config.ts @@ -0,0 +1,31 @@ +import { NextConfig } from "next"; +import { createMDX } from "fumadocs-mdx/next"; + +const withMDX = createMDX(); + +const config: NextConfig = { + reactStrictMode: true, + async redirects() { + return [ + { + source: "/", + destination: "/docs", + permanent: false, + }, + ]; + }, + async rewrites() { + return [ + { + source: "/docs.mdx", + destination: "/llms.mdx/index", + }, + { + source: "/docs/:path*.mdx", + destination: "/llms.mdx/:path*", + }, + ]; + }, +}; + +export default withMDX(config); diff --git a/apps/docs/package.json b/apps/docs/package.json new file mode 100644 index 0000000..2fcf950 --- /dev/null +++ b/apps/docs/package.json @@ -0,0 +1,39 @@ +{ + "name": "@quranjs/docs", + "version": "0.0.0", + "private": true, + "scripts": { + "build": "next build", + "dev": "next dev --turbo", + "start": "next start", + "postinstall": "fumadocs-mdx" + }, + "dependencies": { + "clsx": "^2.1.1", + "fumadocs-core": "15.8.5", + "fumadocs-mdx": "12.0.3", + "fumadocs-typescript": "^4.0.11", + "fumadocs-ui": "15.8.5", + "lucide-react": "^0.539.0", + "next": "15.5.6", + "react": "catalog:react19", + "react-dom": "catalog:react19", + "tailwind-merge": "^3.3.1" + }, + "devDependencies": { + "@quranjs/eslint-config": "workspace:*", + "@quranjs/prettier-config": "workspace:*", + "@quranjs/tsconfig": "workspace:*", + "@tailwindcss/postcss": "^4.1.11", + "@types/mdx": "^2.0.13", + "@types/node": "^24.2.0", + "@types/react": "catalog:react19", + "@types/react-dom": "catalog:react19", + "eslint": "catalog:", + "postcss": "^8.5.6", + "prettier": "catalog:", + "tailwindcss": "catalog:", + "typescript": "catalog:" + }, + "prettier": "@quranjs/prettier-config" +} \ No newline at end of file diff --git a/apps/docs/postcss.config.mjs b/apps/docs/postcss.config.mjs new file mode 100644 index 0000000..a34a3d5 --- /dev/null +++ b/apps/docs/postcss.config.mjs @@ -0,0 +1,5 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; diff --git a/docs/public/banner.png b/apps/docs/public/banner.png old mode 100644 new mode 100755 similarity index 100% rename from docs/public/banner.png rename to apps/docs/public/banner.png diff --git a/docs/public/favicon.ico b/apps/docs/public/favicon.ico old mode 100644 new mode 100755 similarity index 100% rename from docs/public/favicon.ico rename to apps/docs/public/favicon.ico diff --git a/docs/public/android-chrome-192x192.png b/apps/docs/public/icons/android-chrome-192x192.png old mode 100644 new mode 100755 similarity index 100% rename from docs/public/android-chrome-192x192.png rename to apps/docs/public/icons/android-chrome-192x192.png diff --git a/docs/public/android-chrome-512x512.png b/apps/docs/public/icons/android-chrome-512x512.png old mode 100644 new mode 100755 similarity index 100% rename from docs/public/android-chrome-512x512.png rename to apps/docs/public/icons/android-chrome-512x512.png diff --git a/docs/public/apple-touch-icon.png b/apps/docs/public/icons/apple-touch-icon.png old mode 100644 new mode 100755 similarity index 100% rename from docs/public/apple-touch-icon.png rename to apps/docs/public/icons/apple-touch-icon.png diff --git a/docs/public/favicon-16x16.png b/apps/docs/public/icons/favicon-16x16.png old mode 100644 new mode 100755 similarity index 100% rename from docs/public/favicon-16x16.png rename to apps/docs/public/icons/favicon-16x16.png diff --git a/docs/public/favicon-32x32.png b/apps/docs/public/icons/favicon-32x32.png old mode 100644 new mode 100755 similarity index 100% rename from docs/public/favicon-32x32.png rename to apps/docs/public/icons/favicon-32x32.png diff --git a/apps/docs/source.config.ts b/apps/docs/source.config.ts new file mode 100644 index 0000000..12f9774 --- /dev/null +++ b/apps/docs/source.config.ts @@ -0,0 +1,30 @@ +import { + defineConfig, + defineDocs, + frontmatterSchema, + metaSchema, +} from "fumadocs-mdx/config"; +import { createGenerator, remarkAutoTypeTable } from "fumadocs-typescript"; + +// You can customise Zod schemas for frontmatter and `meta.json` here +// see https://fumadocs.vercel.app/docs/mdx/collections#define-docs +export const docs = defineDocs({ + docs: { + postprocess: { + includeProcessedMarkdown: true, + }, + schema: frontmatterSchema, + }, + meta: { + schema: metaSchema, + }, +}); + +const generator = createGenerator(); + +export default defineConfig({ + lastModifiedTime: "git", + mdxOptions: { + remarkPlugins: [[remarkAutoTypeTable, { generator }]], + }, +}); diff --git a/apps/docs/src/app/api/search/route.ts b/apps/docs/src/app/api/search/route.ts new file mode 100644 index 0000000..67507af --- /dev/null +++ b/apps/docs/src/app/api/search/route.ts @@ -0,0 +1,7 @@ +import { source } from '@/lib/source'; +import { createFromSource } from 'fumadocs-core/search/server'; + +export const { GET } = createFromSource(source, { + // https://docs.orama.com/open-source/supported-languages + language: 'english', +}); diff --git a/apps/docs/src/app/docs/[[...slug]]/page.tsx b/apps/docs/src/app/docs/[[...slug]]/page.tsx new file mode 100644 index 0000000..81a7e3e --- /dev/null +++ b/apps/docs/src/app/docs/[[...slug]]/page.tsx @@ -0,0 +1,68 @@ +import { Metadata } from "next"; +import { notFound } from "next/navigation"; +import { LLMCopyButton, ViewOptions } from "@/components/page-actions"; +import { source } from "@/lib/source"; +import { getMDXComponents } from "@/mdx-components"; +import { createRelativeLink } from "fumadocs-ui/mdx"; +import { + DocsBody, + DocsDescription, + DocsPage, + DocsTitle, +} from "fumadocs-ui/page"; + +export default async function Page(props: { + params: Promise<{ slug?: string[] }>; +}) { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + const MDXContent = page.data.body; + + return ( + +
+ {page.data.title} + {page.data.description} +
+ + +
+
+ + + + +
+ ); +} + +export async function generateStaticParams() { + return source.generateParams(); +} + +export async function generateMetadata(props: { + params: Promise<{ slug?: string[] }>; +}): Promise { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + return { + title: page.data.title, + description: page.data.description, + }; +} diff --git a/apps/docs/src/app/docs/layout.tsx b/apps/docs/src/app/docs/layout.tsx new file mode 100644 index 0000000..a91d558 --- /dev/null +++ b/apps/docs/src/app/docs/layout.tsx @@ -0,0 +1,12 @@ +import { DocsLayout } from 'fumadocs-ui/layouts/docs'; +import type { ReactNode } from 'react'; +import { baseOptions } from '@/app/layout.config'; +import { source } from '@/lib/source'; + +export default function Layout({ children }: { children: ReactNode }) { + return ( + + {children} + + ); +} diff --git a/apps/docs/src/app/layout.config.tsx b/apps/docs/src/app/layout.config.tsx new file mode 100644 index 0000000..c527c90 --- /dev/null +++ b/apps/docs/src/app/layout.config.tsx @@ -0,0 +1,32 @@ +import type { BaseLayoutProps } from "fumadocs-ui/layouts/shared"; + +/** + * Shared layout configurations + * + * you can customise layouts individually from: + * Home Layout: app/(home)/layout.tsx + * Docs Layout: app/docs/layout.tsx + */ +export const baseOptions: BaseLayoutProps = { + nav: { + title: ( + <> + + + + + QuranJS + + ), + }, + githubUrl: "https://github.com/quran/api-js", +}; diff --git a/apps/docs/src/app/layout.tsx b/apps/docs/src/app/layout.tsx new file mode 100644 index 0000000..596eaad --- /dev/null +++ b/apps/docs/src/app/layout.tsx @@ -0,0 +1,97 @@ +import "@/styles/globals.css"; + +import type { ReactNode } from "react"; +import { Viewport } from "next"; +import { Inter } from "next/font/google"; +import { RootProvider } from "fumadocs-ui/provider"; + +const icons = [ + { + rel: "apple-touch-icon", + sizes: "180x180", + url: "/icons/apple-touch-icon.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "192x192", + url: "/icons/android-chrome-192x192.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "32x32", + url: "/icons/favicon-32x32.png", + }, + { + rel: "icon", + type: "image/png", + sizes: "16x16", + url: "/icons/favicon-16x16.png", + }, +]; + +const images = "/banner.png"; +const siteName = "quranjs.com"; +const title = "QuranJS"; +const description = + "A library for fetching quran data from the Quran.com API on both Node.js and the browser."; + +export const metadata = { + title: { + default: "QuranJS", + template: "%s | QuranJS", + }, + description: "QuranJS", + icons, + images, + openGraph: { + type: "website", + siteName, + url: "/", + title, + locale: "no", + description, + images, + }, + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + "max-video-preview": -1, + "max-image-preview": "large", + "max-snippet": -1, + }, + }, + twitter: { + card: "summary_large_image", + creator: "@ahmedriad1_", + title, + description, + images, + }, +}; + +export const viewport: Viewport = { + width: "device-width", + initialScale: 1, + viewportFit: "cover", + themeColor: "#5828e3", +}; + +const inter = Inter({ + subsets: ["latin"], + weight: "variable", +}); + +export default function Layout({ children }: { children: ReactNode }) { + return ( + + + {children} + + + ); +} diff --git a/apps/docs/src/app/llms-full.txt/route.ts b/apps/docs/src/app/llms-full.txt/route.ts new file mode 100644 index 0000000..03ef79d --- /dev/null +++ b/apps/docs/src/app/llms-full.txt/route.ts @@ -0,0 +1,11 @@ +import { getLLMText } from "@/lib/get-llm-text"; +import { source } from "@/lib/source"; + +export const revalidate = false; + +export async function GET() { + const scan = source.getPages().map(getLLMText); + const scanned = await Promise.all(scan); + + return new Response(scanned.join("\n\n")); +} diff --git a/apps/docs/src/app/llms.mdx/[[...slug]]/route.ts b/apps/docs/src/app/llms.mdx/[[...slug]]/route.ts new file mode 100644 index 0000000..4ed3f24 --- /dev/null +++ b/apps/docs/src/app/llms.mdx/[[...slug]]/route.ts @@ -0,0 +1,25 @@ +import type { NextRequest } from "next/server"; +import { notFound } from "next/navigation"; +import { getLLMText } from "@/lib/get-llm-text"; +import { source } from "@/lib/source"; + +export const revalidate = false; + +export async function GET( + _req: NextRequest, + { params }: RouteContext<"/llms.mdx/[[...slug]]">, +) { + const { slug } = await params; + const page = source.getPage(slug); + if (!page) notFound(); + + return new Response(await getLLMText(page), { + headers: { + "Content-Type": "text/markdown", + }, + }); +} + +export function generateStaticParams() { + return source.generateParams(); +} diff --git a/apps/docs/src/app/llms.txt/route.ts b/apps/docs/src/app/llms.txt/route.ts new file mode 100644 index 0000000..6bd445d --- /dev/null +++ b/apps/docs/src/app/llms.txt/route.ts @@ -0,0 +1,23 @@ +import { source } from "@/lib/source"; + +export const revalidate = false; + +export async function GET() { + const scanned: string[] = []; + scanned.push("# Docs"); + const map = new Map(); + + for (const page of source.getPages()) { + const dir = page.slugs[0] ?? ""; + const list = map.get(dir) ?? []; + list.push(`- [${page.data.title}](${page.url}): ${page.data.description}`); + map.set(dir, list); + } + + for (const [key, value] of map) { + scanned.push(`## ${key}`); + scanned.push(value.join("\n")); + } + + return new Response(scanned.join("\n\n")); +} diff --git a/apps/docs/src/app/robots.ts b/apps/docs/src/app/robots.ts new file mode 100644 index 0000000..d7720c5 --- /dev/null +++ b/apps/docs/src/app/robots.ts @@ -0,0 +1,13 @@ +import { MetadataRoute } from "next"; +import { baseUrl } from "@/lib/metadata"; + +export function robots(): MetadataRoute.Robots { + return { + rules: { + userAgent: "*", + allow: "/", + }, + host: baseUrl.toString(), + sitemap: `${baseUrl}/sitemap.xml`, + }; +} diff --git a/apps/docs/src/app/sitemap.ts b/apps/docs/src/app/sitemap.ts new file mode 100644 index 0000000..7f9ad81 --- /dev/null +++ b/apps/docs/src/app/sitemap.ts @@ -0,0 +1,22 @@ +import type { MetadataRoute } from "next"; +import { baseUrl } from "@/lib/metadata"; +import { source } from "@/lib/source"; + +export const revalidate = false; + +export default async function sitemap(): Promise { + const url = (path: string): string => new URL(path, baseUrl).toString(); + + return [ + ...source.getPages().map((page) => { + const lastModified = page.data.lastModified; + + return { + url: url(page.url), + lastModified: lastModified ? new Date(lastModified) : undefined, + changeFrequency: "monthly", + priority: 0.5, + } satisfies MetadataRoute.Sitemap[number]; + }), + ]; +} diff --git a/apps/docs/src/components/page-actions.tsx b/apps/docs/src/components/page-actions.tsx new file mode 100644 index 0000000..8119456 --- /dev/null +++ b/apps/docs/src/components/page-actions.tsx @@ -0,0 +1,184 @@ +"use client"; + +import { useMemo, useState } from "react"; +import { cn } from "@/lib/cn"; +import { cva } from "class-variance-authority"; +import { buttonVariants } from "fumadocs-ui/components/ui/button"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "fumadocs-ui/components/ui/popover"; +import { useCopyButton } from "fumadocs-ui/utils/use-copy-button"; +import { + Check, + ChevronDown, + Copy, + ExternalLinkIcon, + MessageCircleIcon, +} from "lucide-react"; + +const cache = new Map(); + +export function LLMCopyButton({ + /** + * A URL to fetch the raw Markdown/MDX content of page + */ + markdownUrl, +}: { + markdownUrl: string; +}) { + const [isLoading, setLoading] = useState(false); + const [checked, onClick] = useCopyButton(async () => { + const cached = cache.get(markdownUrl); + if (cached) return navigator.clipboard.writeText(cached); + + setLoading(true); + + try { + await navigator.clipboard.write([ + new ClipboardItem({ + "text/plain": fetch(markdownUrl).then(async (res) => { + const content = await res.text(); + cache.set(markdownUrl, content); + + return content; + }), + }), + ]); + } finally { + setLoading(false); + } + }); + + return ( + + ); +} + +const optionVariants = cva( + "hover:text-fd-accent-foreground hover:bg-fd-accent inline-flex items-center gap-2 rounded-lg p-2 text-sm [&_svg]:size-4", +); + +export function ViewOptions({ + markdownUrl, + githubUrl, +}: { + /** + * A URL to the raw Markdown/MDX content of page + */ + markdownUrl: string; + + /** + * Source file URL on GitHub + */ + githubUrl: string; +}) { + const items = useMemo(() => { + const fullMarkdownUrl = + typeof window !== "undefined" + ? new URL(markdownUrl, window.location.origin) + : "loading"; + const q = `Read ${fullMarkdownUrl}, I want to ask questions about it.`; + + return [ + { + title: "Open in GitHub", + href: githubUrl, + icon: ( + + GitHub + + + ), + }, + { + title: "Open in ChatGPT", + href: `https://chatgpt.com/?${new URLSearchParams({ + hints: "search", + q, + })}`, + icon: ( + + OpenAI + + + ), + }, + { + title: "Open in Claude", + href: `https://claude.ai/new?${new URLSearchParams({ + q, + })}`, + icon: ( + + Anthropic + + + ), + }, + { + title: "Open in T3 Chat", + href: `https://t3.chat/new?${new URLSearchParams({ + q, + })}`, + icon: , + }, + ]; + }, [githubUrl, markdownUrl]); + + return ( + + + Open + + + + {items.map((item) => ( + + {item.icon} + {item.title} + + + ))} + + + ); +} diff --git a/apps/docs/src/lib/cn.ts b/apps/docs/src/lib/cn.ts new file mode 100644 index 0000000..606052a --- /dev/null +++ b/apps/docs/src/lib/cn.ts @@ -0,0 +1,6 @@ +import clsx, { ClassValue } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...classes: ClassValue[]) { + return twMerge(clsx(classes)); +} diff --git a/apps/docs/src/lib/get-llm-text.ts b/apps/docs/src/lib/get-llm-text.ts new file mode 100644 index 0000000..2ff0b93 --- /dev/null +++ b/apps/docs/src/lib/get-llm-text.ts @@ -0,0 +1,8 @@ +import type { InferPageType } from "fumadocs-core/source"; +import { source } from "@/lib/source"; + +export async function getLLMText(page: InferPageType) { + const processed = await page.data.getText("processed"); + return `# ${page.data.title} (${page.url}) +${processed}`; +} diff --git a/apps/docs/src/lib/metadata.ts b/apps/docs/src/lib/metadata.ts new file mode 100644 index 0000000..888ed54 --- /dev/null +++ b/apps/docs/src/lib/metadata.ts @@ -0,0 +1,5 @@ +export const baseUrl = + process.env.NODE_ENV === "development" || + !process.env.VERCEL_PROJECT_PRODUCTION_URL + ? new URL("http://localhost:3000") + : new URL(`https://${process.env.VERCEL_PROJECT_PRODUCTION_URL}`); diff --git a/apps/docs/src/lib/source.ts b/apps/docs/src/lib/source.ts new file mode 100644 index 0000000..5f259d8 --- /dev/null +++ b/apps/docs/src/lib/source.ts @@ -0,0 +1,11 @@ +import { docs } from "@/.source"; +import { loader } from "fumadocs-core/source"; + +// See https://fumadocs.vercel.app/docs/headless/source-api for more info +export const source = loader({ + // it assigns a URL to your pages + baseUrl: "/docs", + source: docs.toFumadocsSource(), +}); + +export type Page = ReturnType[number]; diff --git a/apps/docs/src/mdx-components.tsx b/apps/docs/src/mdx-components.tsx new file mode 100644 index 0000000..8d43782 --- /dev/null +++ b/apps/docs/src/mdx-components.tsx @@ -0,0 +1,14 @@ +import type { MDXComponents } from "mdx/types"; +import * as TabsComponents from "fumadocs-ui/components/tabs"; +import * as TypeTableComponents from "fumadocs-ui/components/type-table"; +import defaultMdxComponents from "fumadocs-ui/mdx"; + +// use this function to get MDX components, you will need it for rendering MDX +export function getMDXComponents(components?: MDXComponents): MDXComponents { + return { + ...defaultMdxComponents, + ...TabsComponents, + ...TypeTableComponents, + ...components, + }; +} diff --git a/apps/docs/src/styles/globals.css b/apps/docs/src/styles/globals.css new file mode 100644 index 0000000..bb28c7b --- /dev/null +++ b/apps/docs/src/styles/globals.css @@ -0,0 +1,11 @@ +@import "tailwindcss"; +@import "fumadocs-ui/css/neutral.css"; +@import "fumadocs-ui/css/preset.css"; + +:root { + --color-fd-primary: #5828e3; +} + +.dark { + --color-fd-primary: #794dfc; +} diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json new file mode 100644 index 0000000..a12eca1 --- /dev/null +++ b/apps/docs/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "@quranjs/tsconfig/base.json", + "compilerOptions": { + "lib": ["ES2022", "dom", "dom.iterable"], + "jsx": "preserve", + "baseUrl": ".", + "paths": { + "@/.source": [ + "./.source/index.ts" + ], + "@/*": [ + "./src/*" + ] + }, + "plugins": [{ "name": "next" }], + "module": "esnext" + }, + "include": [".", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} \ No newline at end of file diff --git a/apps/docs/turbo.json b/apps/docs/turbo.json new file mode 100644 index 0000000..e7dafe4 --- /dev/null +++ b/apps/docs/turbo.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://turborepo.org/schema.json", + "extends": [ + "//" + ], + "tasks": { + "build": { + "dependsOn": [ + "^build" + ], + "outputs": [ + ".next/**", + "!.next/cache/**", + "next-env.d.ts" + ] + }, + "dev": { + "persistent": true + } + } +} \ No newline at end of file diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index fbea7fd..0000000 --- a/docs/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -node_modules -.next -.DS_Store -yarn-error.log -dist -examples -packages \ No newline at end of file diff --git a/docs/next-env.d.ts b/docs/next-env.d.ts deleted file mode 100644 index 62b8a52..0000000 --- a/docs/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/docs/next.config.mjs b/docs/next.config.mjs deleted file mode 100644 index a15299d..0000000 --- a/docs/next.config.mjs +++ /dev/null @@ -1,15 +0,0 @@ -import nextra from 'nextra'; - -const withNextra = nextra({ - theme: 'nextra-theme-docs', - themeConfig: './theme.config.tsx', - staticImage: true, - flexsearch: { - codeblocks: false, - }, - defaultShowCopyCode: true, -}); - -export default withNextra({ - reactStrictMode: true, -}); diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index 7b6beed..0000000 --- a/docs/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "docs", - "version": "1.0.0", - "description": "QuranJS API Documentation", - "main": "index.js", - "scripts": { - "dev": "next", - "start": "next start", - "build": "next build", - "lint": "next lint" - }, - "author": "Ahmed Riad (https://ar1.dev/)", - "license": "MIT", - "dependencies": { - "next": "^13.0.6", - "nextra": "^2.0.0", - "nextra-theme-docs": "^2.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@next/eslint-plugin-next": "^12.1.2", - "@types/node": "^18.11.10", - "autoprefixer": "^10.4.13", - "postcss": "^8.4.19", - "tailwindcss": "^3.2.4", - "typescript": "^4.9.3" - } -} diff --git a/docs/postcss.config.js b/docs/postcss.config.js deleted file mode 100644 index aa8a423..0000000 --- a/docs/postcss.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/* eslint-disable no-undef */ - -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/docs/src/pages/_app.js b/docs/src/pages/_app.js deleted file mode 100644 index ebf9d88..0000000 --- a/docs/src/pages/_app.js +++ /dev/null @@ -1,7 +0,0 @@ -import 'nextra-theme-docs/style.css' -import '../styles/global.css' - -export default function Nextra({ Component, pageProps }) { - const getLayout = Component.getLayout || ((page) => page) - return getLayout() -} diff --git a/docs/src/pages/_meta.json b/docs/src/pages/_meta.json deleted file mode 100644 index 2d908d8..0000000 --- a/docs/src/pages/_meta.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "index": "Introduction", - "techniques": "Techniques", - "chapters": "Chapters", - "verses": "Verses", - "search": "Search", - "juzs": "Juzs", - "audio": "Audio", - "resources": "Resources", - "utils": "Utilities" -} \ No newline at end of file diff --git a/docs/src/pages/audio.mdx b/docs/src/pages/audio.mdx deleted file mode 100644 index 2f6b438..0000000 --- a/docs/src/pages/audio.mdx +++ /dev/null @@ -1,174 +0,0 @@ -## findAllChapterRecitations - -Get all chapter recitations for specific reciter. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-reciter-audio-files) - -**Params:** - -`audio.findAllChapterRecitations(reciterId: string, options?: GetChapterRecitationOptions)` - -| Param | Type | -| --------- | ----------------------------- | -| reciterId | `string` | -| options | `GetChapterRecitationOptions` | - -**Example:** - -```js -quran.v4.audio.findAllChapterRecitations('2'); // abdulbaset abdulsamad -``` - -## findChapterRecitationById - -Get chapter recitation for specific reciter and a specific chapter. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-reciter-audio-file) - -**Params:** - -`audio.findChapterRecitationById(chapterId: ChapterId, reciterId: string, options?: GetChapterRecitationOptions)` - -| Param | Type | -| --------- | ----------------------------- | -| chapterId | `ChapterId` | -| reciterId | `string` | -| options | `GetChapterRecitationOptions` | - -**Example:** - -```js -quran.v4.audio.findChapterRecitationById('1', '2'); // first chapter recitation for abdulbaset abdulsamad -``` - -## findVerseRecitationsByChapter - -Get all verse audio files for a specific reciter and a specific chapter. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-surah-recitation) - -**Params:** - -`audio.findVerseRecitationsByChapter(chapterId: ChapterId, recitationId: string, options?: GetVerseRecitationOptions)` - -| Param | Type | -| ------------ | --------------------------- | -| chapterId | `ChapterId` | -| recitationId | `string` | -| options | `GetVerseRecitationOptions` | - -**Example:** - -```js -quran.v4.audio.findVerseRecitationsByChapter('1', '2'); -``` - -## findVerseRecitationsByHizb - -Get all verse audio files for a specific reciter and a specific hizb. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-hizb-recitaiton) - -**Params:** - -`audio.findVerseRecitationsByHizb(hizb: HizbNumber, recitationId: string, options?: GetVerseRecitationOptions)` - -| Param | Type | -| ------------ | --------------------------- | -| hizb | `HizbNumber` | -| recitationId | `string` | -| options | `GetVerseRecitationOptions` | - -**Example:** - -```js -quran.v4.audio.findVerseRecitationsByHizb('1', '2'); -``` - -## findVerseRecitationsByJuz - -Get all verse audio files for a specific reciter and a specific juz. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-juz-recitaiton) - -**Params:** - -`audio.findVerseRecitationsByJuz(juz: JuzNumber, recitationId: string, options?: GetVerseRecitationOptions)` - -| Param | Type | -| ------------ | ----------------------- | -| juz | `JuzNumber` | -| recitationId | `string` | -| options | `GetRecitationsOptions` | - -**Example:** - -```js -quran.v4.audio.findVerseRecitationsByJuz('1', '2'); -``` - -## findVerseRecitationsByKey - -Get all verse audio files for a specific reciter and a specific verse. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-ayah-recitaiton) - -**Params:** - -`audio.findVerseRecitationsByKey(key: VerseKey, recitationId: string, options?: GetVerseRecitationOptions)` - -| Param | Type | -| ------------ | --------------------------- | -| key | `VerseKey` | -| recitationId | `string` | -| options | `GetVerseRecitationOptions` | - -**Example:** - -```js -quran.v4.audio.findVerseRecitationsByKey('1:1', '2'); -``` - -## findVerseRecitationsByPage - -Get all verse audio files for a specific reciter and a specific mushaf page. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-page-recitaiton) - -**Params:** - -`audio.findVerseRecitationsByPage(page: PageNumber, recitationId: string, options?: GetVerseRecitationOptions)` - -| Param | Type | -| ------------ | --------------------------- | -| page | `PageNumber` | -| recitationId | `string` | -| options | `GetVerseRecitationOptions` | - -**Example:** - -```js -quran.v4.audio.findVerseRecitationsByPage('1', '2'); -``` - -## findVerseRecitationsByRub - -Get all verse audio files for a specific reciter and a specific rub. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-rub-el-hizb-recitaiton) - -**Params:** - -`audio.findVerseRecitationsByRub(rub: RubNumber, recitationId: string, options?: GetVerseRecitationOptions)` - -| Param | Type | -| ------------ | --------------------------- | -| rub | `RubNumber` | -| recitationId | `string` | -| options | `GetVerseRecitationOptions` | - -**Example:** - -```js -quran.v4.audio.findVerseRecitationsByRub('1', '2'); -``` diff --git a/docs/src/pages/chapters.mdx b/docs/src/pages/chapters.mdx deleted file mode 100644 index 4d05691..0000000 --- a/docs/src/pages/chapters.mdx +++ /dev/null @@ -1,63 +0,0 @@ -## findAll - -Get all chapters. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-chapters) - -**Params:** - -`chapters.findAll(options?: GetChapterOptions)` - -| Param | Type | -| ------- | ------------------- | -| options | `GetChapterOptions` | - -**Example:** - -```js -quran.v4.chapters.findAll(); -``` - -## findById - -Get chapter by id. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/get-chapter) - -**Params:** - -`chapters.findById(id: ChapterId, options?: GetChapterOptions)` - -| Param | Type | Description | -| ------- | ------------------- | ---------------------- | -| id | ChapterId (m) | minimum 1, maximum 114 | -| options | `GetChapterOptions` | | - -**Example:** - -```js -quran.v4.chapters.findById('1'); -quran.v4.chapters.findById('114'); -``` - -## findInfoById - -Get chapter info by id. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/info) - -**Params:** - -`chapters.findInfoById(id: ChapterId, options?: GetChapterOptions)` - -| Param | Type | Description | -| ------- | ------------------- | ---------------------- | -| id | ChapterId (m) | minimum 1, maximum 114 | -| options | `GetChapterOptions` | | - -**Example:** - -```js -quran.v4.chapters.findInfoById('1'); -quran.v4.chapters.findInfoById('114'); -``` diff --git a/docs/src/pages/index.mdx b/docs/src/pages/index.mdx deleted file mode 100644 index efedc87..0000000 --- a/docs/src/pages/index.mdx +++ /dev/null @@ -1,59 +0,0 @@ -import Image from 'next/image'; -import { Tab, Tabs } from 'nextra-theme-docs'; - -QuranJS/API Banner - -A library for fetching quran data from the [Quran.com API](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/quran-com-api). This library also works on both Node.js and the browser. - -- [NPM](https://www.npmjs.com/package/@quranjs/api) -- [MIT License](https://github.com/quran/api-js/blob/master/LICENSE) - -## Installation - -{/* prettier-ignore-start */} - - - ```bash - pnpm add @quranjs/api - ``` - - - ```bash - npm install @quranjs/api - ``` - - - ```bash - yarn add @quranjs/api - ``` - - - ```html - - - ``` - - -{/* prettier-ignore-end */} - -## Getting Started - -You can use the library in your project by importing it: - -```js -import { quran } from '@quranjs/api'; - -quran.v4.chapters.findAll().then(console.log); // will log all chapters -``` - -or with CJS: - -```js -const { quran } = require('@quranjs/api'); - -quran.v4.chapters.findAll().then(console.log); // will log all chapters -``` diff --git a/docs/src/pages/juzs.mdx b/docs/src/pages/juzs.mdx deleted file mode 100644 index 9b24051..0000000 --- a/docs/src/pages/juzs.mdx +++ /dev/null @@ -1,11 +0,0 @@ -## findAll - -Get All Juzs - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/juzs) - -**Example:** - -```js -quran.v4.juzs.findAll(); -``` diff --git a/docs/src/pages/resources.mdx b/docs/src/pages/resources.mdx deleted file mode 100644 index af362d0..0000000 --- a/docs/src/pages/resources.mdx +++ /dev/null @@ -1,214 +0,0 @@ -## findAllChapterInfos - -Get all chapter infos. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-info) - -**Params:** - -`resources.findAllChapterInfos(options?: GetResourceOptions)` - -| Param | Type | -| ------- | -------------------- | -| options | `GetResourceOptions` | - -**Example:** - -```js -quran.v4.resources.findAllChapterInfos(); -``` - -## findAllChapterReciters - -Get all chapter reciters. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-reciters) - -**Params:** - -`resources.findAllChapterReciters(options?: GetResourceOptions)` - -| Param | Type | -| ------- | -------------------- | -| options | `GetResourceOptions` | - -**Example:** - -```js -quran.v4.resources.findAllChapterReciters(); -``` - -## findAllLanguages - -Get all languages. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/languages) - -**Params:** - -`resources.findAllLanguages(options?: GetResourceOptions)` - -| Param | Type | -| ------- | -------------------- | -| options | `GetResourceOptions` | - -**Example:** - -```js -quran.v4.resources.findAllLanguages(); -``` - -## findAllRecitations - -Get all recitations. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/recitations) - -**Params:** - -`resources.findAllRecitations(options?: GetResourceOptions)` - -| Param | Type | -| ------- | -------------------- | -| options | `GetResourceOptions` | - -**Example:** - -```js -quran.v4.resources.findAllRecitations(); -``` - -## findRecitationInfo - -Get recitation info. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/recitation-info) - -**Params:** - -`resources.findRecitationInfo(id: string, options?: GetResourceOptions)` - -| Param | Type | -| ------- | -------------------- | -| id | `string` | -| options | `GetResourceOptions` | - -**Example:** - -```js -quran.v4.resources.findRecitationInfo('1'); -``` - -## findAllRecitationStyles - -Get all recitation styles. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/recitation-styles) - -**Example:** - -```js -quran.v4.resources.findAllRecitationStyles(); -``` - -## findAllTafsirs - -Get all tafsirs. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/tafsirs) - -**Params:** - -`resources.findAllTafsirs(options?: GetResourceOptions)` - -| Param | Type | -| ------- | -------------------- | -| options | `GetResourceOptions` | - -**Example:** - -```js -quran.v4.resources.findAllTafsirs(); -``` - -## findTafsirInfo - -Get tafsir info. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/tafsir-info) - -**Params:** - -`resources.findTafsirInfo(id: string, options?: GetResourceOptions)` - -| Param | Type | -| ------- | -------------------- | -| id | `string` | -| options | `GetResourceOptions` | - -**Example:** - -```js -quran.v4.resources.findTafsirInfo('1'); -``` - -## findAllTranslations - -Get all translations. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/translations) - -**Params:** - -`resources.findAllTranslations(options?: GetResourceOptions)` - -| Param | Type | -| ------- | -------------------- | -| options | `GetResourceOptions` | - -**Example:** - -```js -quran.v4.resources.findAllTranslations(); -``` - -## findTranslationInfo - -Get all translations. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/translation-info) - -**Params:** - -`resources.findTranslationInfo(id: string, options?: GetResourceOptions)` - -| Param | Type | -| ------- | -------------------- | -| id | `string` | -| options | `GetResourceOptions` | - -**Example:** - -```js -quran.v4.resources.findTranslationInfo('169'); -``` - -## findVerseMedia - -Get verse media. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verse-media) - -**Params:** - -`resources.findVerseMedia(options?: GetResourceOptions)` - -| Param | Type | -| ------- | -------------------- | -| options | `GetResourceOptions` | - -**Example:** - -```js -quran.v4.resources.findVerseMedia(); -``` diff --git a/docs/src/pages/search.mdx b/docs/src/pages/search.mdx deleted file mode 100644 index 0485e6d..0000000 --- a/docs/src/pages/search.mdx +++ /dev/null @@ -1,19 +0,0 @@ -## search - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/search) - -**Params:** - -| Param | Type | Description | -| ------- | --------------- | -------------- | -| q | string | search query | -| options | `SearchOptions` | search options | - -**Example:** - -```js -quran.v4.search.search('نور'); -quran.v4.search.search('نور', { language: Language.ENGLISH }); -quran.v4.search.search('نور', { language: Language.ENGLISH, size: 10 }); -quran.v4.search.search('نور', { language: Language.ENGLISH, page: 2 }); -``` diff --git a/docs/src/pages/techniques.mdx b/docs/src/pages/techniques.mdx deleted file mode 100644 index 2159a0f..0000000 --- a/docs/src/pages/techniques.mdx +++ /dev/null @@ -1,39 +0,0 @@ -## Custom fetcher - -By default, all functions that interact with the [Quran.com API](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/quran-com-api) use the global `fetch` function. - -You can override this by passing a custom fetcher (as `fetchFn`) to the options object of any method. - -import { Callout } from 'nextra-theme-docs'; - - - Note that the `fetchFn` accepts a string url and must return a promise with - the JSON response. - - -### Examples - -#### Axios - -```ts -import axios from 'axios'; - -const chapters = await quran.v4.chapters.findAll({ - fetchFn: (url) => axios.get(url).then((res) => res.data), -}); -``` - ---- - -#### Node-fetch - -```ts -import fetch from 'node-fetch'; - -const chapters = await quran.v4.chapters.findAll({ - fetchFn: async (url) => { - const response = await fetch(url); - return response.json(); - }, -}); -``` diff --git a/docs/src/pages/utils.mdx b/docs/src/pages/utils.mdx deleted file mode 100644 index cd397a2..0000000 --- a/docs/src/pages/utils.mdx +++ /dev/null @@ -1,119 +0,0 @@ -## isValidChapterId - -Validates chapter id. - -**Params:** - -| Param | Description | -| ----- | ----------- | -| id | chapter id | - -**Example:** - -```js -isValidChapterId('1'); // true -isValidChapterId('114'); // true -isValidChapterId('0'); // false -isValidChapterId('-1'); // false -isValidChapterId('200'); // false -``` - -## isValidHizb - -Validates hizb number. - -**Params:** - -| Param | Description | -| ----- | ----------- | -| hizb | hizb number | - -**Example:** - -```js -isValidHizb('1'); // true -isValidHizb('60'); // true -isValidHizb('0'); // false -isValidHizb('-1'); // false -isValidHizb('200'); // false -``` - -## isValidJuz - -Validates juz number. - -**Params:** - -| Param | Description | -| ----- | ----------- | -| juz | juz number | - -**Example:** - -```js -isValidJuz('1'); // true -isValidJuz('30'); // true -isValidJuz('0'); // false -isValidJuz('-1'); // false -isValidJuz('200'); // false -``` - -## isValidQuranPage - -Validates mushaf page number. - -**Params:** - -| Param | Description | -| ----- | ------------------ | -| page | mushaf page number | - -**Example:** - -```js -isValidQuranPage('1'); // true -isValidQuranPage('604'); // true -isValidQuranPage('0'); // false -isValidQuranPage('-1'); // false -isValidQuranPage('1000'); // false -``` - -## isValidRub - -Validates rub number. - -**Params:** - -| Param | Description | -| ----- | ----------- | -| rub | rub number | - -**Example:** - -```js -isValidRub('1'); // true -isValidRub('240'); // true -isValidRub('0'); // false -isValidRub('-1'); // false -isValidRub('300'); // false -``` - -## isValidVerseKey - -Validates verse key. - -**Params:** - -| Param | Description | -| ----- | ----------------------------------------- | -| key | colon separated verse key (chapter:verse) | - -**Example:** - -```js -isValidVerseKey('1:1'); // true -isValidVerseKey('30:1'); // true -isValidVerseKey('0'); // false -isValidVerseKey('1:-'); // false -isValidVerseKey('1_1'); // false -``` diff --git a/docs/src/pages/verses.mdx b/docs/src/pages/verses.mdx deleted file mode 100644 index d3577b7..0000000 --- a/docs/src/pages/verses.mdx +++ /dev/null @@ -1,151 +0,0 @@ -## findByChapter - -Get all ayahs for a specific chapter. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-chapter-number) - -**Params:** - -`verses.findByChapter(id: ChapterId, options?: GetVerseOptions)` - -| Param | Type | -| ------- | ------------------------------------ | -| id | `ChapterId` (minimum 1, maximum 114) | -| options | `GetVerseOptions` | - -**Example:** - -```js -quran.v4.verses.findByChapter('1'); -quran.v4.verses.findByChapter('114'); -``` - -## findByJuz - -Get all ayahs for a Juz. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-juz-number) - -**Params:** - -`verses.findByJuz(juz: JuzNumber, options?: GetVerseOptions)` - -| Param | Type | -| ------- | ----------------------------------- | -| juz | `JuzNumber` (minimum 1, maximum 30) | -| options | `GetVerseOptions` | - -**Example:** - -```js -quran.v4.verses.findByJuz('1'); -quran.v4.verses.findByJuz('30'); -``` - -## findByKey - -Get a specific ayah with key. Key is combination of surah number and ayah number. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-verse-key) - -**Params:** - -`verses.findByKey(key: VerseKey, options?: GetVerseOptions)` - -| Param | Type | Description | -| ------- | ----------------- | -------------------------------------------------- | -| key | `VerseKey` | surah number and ayah number separated by a colon. | -| options | `GetVerseOptions` | | - -**Example:** - -```js -quran.v4.verses.findByKey('1:1'); -quran.v4.verses.findByKey('101:5'); -``` - -## findByPage - -Get all ayahs for a specific page in the Quran. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-page-number) - -**Params:** - -`verses.findByKey(page: PageNumber, options?: GetVerseOptions)` - -| Param | Type | -| ------- | ------------------------------------- | -| page | `PageNumber` (minimum 1, maximum 604) | -| options | `GetVerseOptions` | - -**Example:** - -```js -quran.v4.verses.findByPage('1'); -quran.v4.verses.findByPage('101'); -``` - -## findRandom - -Get a random ayah. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/random-verse) - -**Params:** - -`verses.findRandom(options?: GetVerseOptions)` - -| Param | Type | -| ------- | ----------------- | -| options | `GetVerseOptions` | - -**Example:** - -```js -quran.v4.verses.findRandom(); -``` - -## findByHizb - -Get all ayahs of a specific Hizb. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-hizb-number) - -**Params:** - -`verses.findByHizb(id: HizbNumber, options?: GetVerseOptions)` - -| Param | Type | -| ------- | ------------------------------------ | -| hizb | `HizbNumber` (minimum 1, maximum 60) | -| options | `GetVerseOptions` | - -**Example:** - -```js -quran.v4.verses.findByHizb('1'); -quran.v4.verses.findByHizb('60'); -``` - -## findByRub - -Get all ayahs of a specific Rub. - -- [Quran.com API Docs](https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-rub-el-hizb-number) - -**Params:** - -`verses.findByRub(id: RubNumber, options?: GetVerseOptions)` - -| Param | Type | -| ------- | ------------------------------------ | -| rub | `RubNumber` (minimum 1, maximum 240) | -| options | `GetVerseOptions` | - -**Example:** - -```js -quran.v4.verses.findByRub('1'); -quran.v4.verses.findByRub('240'); -``` diff --git a/docs/src/styles/global.css b/docs/src/styles/global.css deleted file mode 100644 index 0b7d3dd..0000000 --- a/docs/src/styles/global.css +++ /dev/null @@ -1,9 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -/* @media (min-width: 768px) { - aside { - width: 17.5rem !important; - } -} */ diff --git a/docs/tailwind.config.js b/docs/tailwind.config.js deleted file mode 100644 index 052154c..0000000 --- a/docs/tailwind.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/* eslint-disable no-undef */ - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ['./src/**/*.{js,ts,jsx,tsx,mdx}', './theme.config.{js,ts,jsx,tsx}'], - theme: { - extend: {}, - }, - plugins: [], - darkMode: 'class', -}; diff --git a/docs/theme.config.tsx b/docs/theme.config.tsx deleted file mode 100644 index eb6651b..0000000 --- a/docs/theme.config.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import { DocsThemeConfig } from 'nextra-theme-docs'; - -const SEO = { - title: 'QuranJS / API', - titleSuffix: ' - QuranJS / API', - description: - 'QuranJS / Api: A library for fetching quran data from the Quran.com API on both Node.js and the browser.', - image: 'https://github.com/quran/api-js/raw/master/media/repo-header.png', - twitter: '@ahmedriad_', - github: 'quran/api-js', - color: '#5120DB', - domain: 'www.quranjs.com', -}; - -const logo = ( - <> - QuranJS - API - -); - -const theme: DocsThemeConfig = { - primaryHue: 270, - project: { - link: `https://github.com/${SEO.github}`, - }, - docsRepositoryBase: `https://github.com/${SEO.github}/blob/master/docs/pages`, - useNextSeoProps() { - return { - titleTemplate: `%s${SEO.titleSuffix}`, - }; - }, - logo, - head: ( - <> - - - - - - - - - - - - - - - - - - - - ), - sidebar: { - titleComponent: ({ title, type }) => { - if (type === 'separator') - return {title}; - - return <>{title}; - }, - defaultMenuCollapseLevel: 0, - }, - navigation: { - next: true, - prev: true, - }, - editLink: { - text: 'Edit this page on GitHub', - }, - footer: { - text: () => <>MIT {new Date().getFullYear()} © QuranJS., - }, -}; - -export default theme; diff --git a/docs/tsconfig.json b/docs/tsconfig.json deleted file mode 100644 index e7d366c..0000000 --- a/docs/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": false, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "incremental": true, - "esModuleInterop": true, - "isolatedModules": true, - "moduleResolution": "node", - "jsx": "preserve", - "module": "esnext", - "resolveJsonModule": true, - "baseUrl": ".", - "paths": { - "@/*": ["src/*"] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] -} diff --git a/docs/yarn.lock b/docs/yarn.lock deleted file mode 100644 index de37983..0000000 --- a/docs/yarn.lock +++ /dev/null @@ -1,2494 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/runtime@^7.12.5": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" - integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== - dependencies: - regenerator-runtime "^0.13.4" - -"@headlessui/react@^1.6.6": - version "1.7.4" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.4.tgz#ba7f50fda20667276ee84fcd4c2a459aa26187e3" - integrity sha512-D8n5yGCF3WIkPsjEYeM8knn9jQ70bigGGb5aUvN6y4BGxcT3OcOQOKcM3zRGllRCZCFxCZyQvYJF6ZE7bQUOyQ== - dependencies: - client-only "^0.0.1" - -"@mdx-js/mdx@^2.1.3": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-2.1.5.tgz#577937349fd555154382c2f805f5f52834a64903" - integrity sha512-zEG0lt+Bl/r5U6e0TOS7qDbsXICtemfAPquxWFsMbdzrvlWaqMGemLl+sjVpqlyaaiCiGVQBSGdCk0t1qXjkQg== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/mdx" "^2.0.0" - estree-util-build-jsx "^2.0.0" - estree-util-is-identifier-name "^2.0.0" - estree-util-to-js "^1.1.0" - estree-walker "^3.0.0" - hast-util-to-estree "^2.0.0" - markdown-extensions "^1.0.0" - periscopic "^3.0.0" - remark-mdx "^2.0.0" - remark-parse "^10.0.0" - remark-rehype "^10.0.0" - unified "^10.0.0" - unist-util-position-from-estree "^1.0.0" - unist-util-stringify-position "^3.0.0" - unist-util-visit "^4.0.0" - vfile "^5.0.0" - -"@mdx-js/react@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-2.1.5.tgz#8225a867dae6f845ae5b0ec15bb454c23be3f576" - integrity sha512-3Az1I6SAWA9R38rYjz5rXBrGKeZhq96CSSyQtqY+maPj8stBsoUH5pNcmIixuGkufYsh8F5+ka2CVPo2fycWZw== - dependencies: - "@types/mdx" "^2.0.0" - "@types/react" ">=16" - -"@napi-rs/simple-git-android-arm-eabi@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-android-arm-eabi/-/simple-git-android-arm-eabi-0.1.8.tgz#303bea1ec00db24466e3b3ba13de337d87c5371b" - integrity sha512-JJCejHBB1G6O8nxjQLT4quWCcvLpC3oRdJJ9G3MFYSCoYS8i1bWCWeU+K7Br+xT+D6s1t9q8kNJAwJv9Ygpi0g== - -"@napi-rs/simple-git-android-arm64@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-android-arm64/-/simple-git-android-arm64-0.1.8.tgz#42c8d04287364fd1619002629fa52183dcf462ee" - integrity sha512-mraHzwWBw3tdRetNOS5KnFSjvdAbNBnjFLA8I4PwTCPJj3Q4txrigcPp2d59cJ0TC51xpnPXnZjYdNwwSI9g6g== - -"@napi-rs/simple-git-darwin-arm64@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-darwin-arm64/-/simple-git-darwin-arm64-0.1.8.tgz#e210808e6d646d6efecea84c67ced8eb44a8f821" - integrity sha512-ufy/36eI/j4UskEuvqSH7uXtp3oXeLDmjQCfKJz3u5Vx98KmOMKrqAm2H81AB2WOtCo5mqS6PbBeUXR8BJX8lQ== - -"@napi-rs/simple-git-darwin-x64@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-darwin-x64/-/simple-git-darwin-x64-0.1.8.tgz#d717525c33e0dfd8a6d6215da2fcbc0ad40011e1" - integrity sha512-Vb21U+v3tPJNl+8JtIHHT8HGe6WZ8o1Tq3f6p+Jx9Cz71zEbcIiB9FCEMY1knS/jwQEOuhhlI9Qk7d4HY+rprA== - -"@napi-rs/simple-git-linux-arm-gnueabihf@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-linux-arm-gnueabihf/-/simple-git-linux-arm-gnueabihf-0.1.8.tgz#03e7b2dd299c10e61bbf29f405ea74f6571cf6a1" - integrity sha512-6BPTJ7CzpSm2t54mRLVaUr3S7ORJfVJoCk2rQ8v8oDg0XAMKvmQQxOsAgqKBo9gYNHJnqrOx3AEuEgvB586BuQ== - -"@napi-rs/simple-git-linux-arm64-gnu@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-linux-arm64-gnu/-/simple-git-linux-arm64-gnu-0.1.8.tgz#945123f75c9a36fd0364e789ce06cd29a74a43cc" - integrity sha512-qfESqUCAA/XoQpRXHptSQ8gIFnETCQt1zY9VOkplx6tgYk9PCeaX4B1Xuzrh3eZamSCMJFn+1YB9Ut8NwyGgAA== - -"@napi-rs/simple-git-linux-arm64-musl@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-linux-arm64-musl/-/simple-git-linux-arm64-musl-0.1.8.tgz#2c20a0bff7c08f60b033ed7056dcb07bbbff8310" - integrity sha512-G80BQPpaRmQpn8dJGHp4I2/YVhWDUNJwcCrJAtAdbKFDCMyCHJBln2ERL/+IEUlIAT05zK/c1Z5WEprvXEdXow== - -"@napi-rs/simple-git-linux-x64-gnu@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-linux-x64-gnu/-/simple-git-linux-x64-gnu-0.1.8.tgz#980e22b7376252a0767298ec801d374d97553da1" - integrity sha512-NI6o1sZYEf6vPtNWJAm9w8BxJt+LlSFW0liSjYe3lc3e4dhMfV240f0ALeqlwdIldRPaDFwZSJX5/QbS7nMzhw== - -"@napi-rs/simple-git-linux-x64-musl@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-linux-x64-musl/-/simple-git-linux-x64-musl-0.1.8.tgz#edca3b2833dc5d3fc9151f5b931f7b14478ccca4" - integrity sha512-wljGAEOW41er45VTiU8kXJmO480pQKzsgRCvPlJJSCaEVBbmo6XXbFIXnZy1a2J3Zyy2IOsRB4PVkUZaNuPkZQ== - -"@napi-rs/simple-git-win32-arm64-msvc@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-win32-arm64-msvc/-/simple-git-win32-arm64-msvc-0.1.8.tgz#3ac4c7fe816a2cdafabd091ded76161d1ba1fe88" - integrity sha512-QuV4QILyKPfbWHoQKrhXqjiCClx0SxbCTVogkR89BwivekqJMd9UlMxZdoCmwLWutRx4z9KmzQqokvYI5QeepA== - -"@napi-rs/simple-git-win32-x64-msvc@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git-win32-x64-msvc/-/simple-git-win32-x64-msvc-0.1.8.tgz#3b825bc2cb1c7ff535a3ca03768142d68bbf5c19" - integrity sha512-UzNS4JtjhZhZ5hRLq7BIUq+4JOwt1ThIKv11CsF1ag2l99f0123XvfEpjczKTaa94nHtjXYc2Mv9TjccBqYOew== - -"@napi-rs/simple-git@^0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@napi-rs/simple-git/-/simple-git-0.1.8.tgz#391cb58436d50bd32d924611d45bdc41f5e7607a" - integrity sha512-BvOMdkkofTz6lEE35itJ/laUokPhr/5ToMGlOH25YnhLD2yN1KpRAT4blW9tT8281/1aZjW3xyi73bs//IrDKA== - optionalDependencies: - "@napi-rs/simple-git-android-arm-eabi" "0.1.8" - "@napi-rs/simple-git-android-arm64" "0.1.8" - "@napi-rs/simple-git-darwin-arm64" "0.1.8" - "@napi-rs/simple-git-darwin-x64" "0.1.8" - "@napi-rs/simple-git-linux-arm-gnueabihf" "0.1.8" - "@napi-rs/simple-git-linux-arm64-gnu" "0.1.8" - "@napi-rs/simple-git-linux-arm64-musl" "0.1.8" - "@napi-rs/simple-git-linux-x64-gnu" "0.1.8" - "@napi-rs/simple-git-linux-x64-musl" "0.1.8" - "@napi-rs/simple-git-win32-arm64-msvc" "0.1.8" - "@napi-rs/simple-git-win32-x64-msvc" "0.1.8" - -"@next/env@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/env/-/env-13.0.6.tgz#3fcab11ffbe95bff127827d9f7f3139bc5e6adff" - integrity sha512-yceT6DCHKqPRS1cAm8DHvDvK74DLIkDQdm5iV+GnIts8h0QbdHvkUIkdOvQoOODgpr6018skbmSQp12z5OWIQQ== - -"@next/eslint-plugin-next@^12.1.2": - version "12.1.2" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.2.tgz#5757064bbfaba467c1a5647f0ef25793514f4016" - integrity sha512-XqYRh6d98dpv2ynoOEC3VeNv99hxRGBuanRDKASfntdAZD9Zp4n+AugmNF0qwOQEHYgG1uvZW3A4Fi6Y/+kCQw== - dependencies: - glob "7.1.7" - -"@next/swc-android-arm-eabi@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.6.tgz#c971e5a3f8aae875ac1d9fdb159b7e126d8d98d5" - integrity sha512-FGFSj3v2Bluw8fD/X+1eXIEB0PhoJE0zfutsAauRhmNpjjZshLDgoXMWm1jTRL/04K/o9gwwO2+A8+sPVCH1uw== - -"@next/swc-android-arm64@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.0.6.tgz#ecacae60f1410136cc31f9e1e09e78e624ca2d68" - integrity sha512-7MgbtU7kimxuovVsd7jSJWMkIHBDBUsNLmmlkrBRHTvgzx5nDBXogP0hzZm7EImdOPwVMPpUHRQMBP9mbsiJYQ== - -"@next/swc-darwin-arm64@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.6.tgz#266e9e0908024760eba0dfce17edc90ffcba5fdc" - integrity sha512-AUVEpVTxbP/fxdFsjVI9d5a0CFn6NVV7A/RXOb0Y+pXKIIZ1V5rFjPwpYfIfyOo2lrqgehMNQcyMRoTrhq04xg== - -"@next/swc-darwin-x64@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.6.tgz#4be4ca7bc37f9c93d2e38be5ff313873ad758c09" - integrity sha512-SasCDJlshglsPnbzhWaIF6VEGkQy2NECcAOxPwaPr0cwbbt4aUlZ7QmskNzgolr5eAjFS/xTr7CEeKJtZpAAtQ== - -"@next/swc-freebsd-x64@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.6.tgz#42eb9043ee65ea5927ba550f4b59827d7064c47b" - integrity sha512-6Lbxd9gAdXneTkwHyYW/qtX1Tdw7ND9UbiGsGz/SP43ZInNWnW6q0au4hEVPZ9bOWWRKzcVoeTBdoMpQk9Hx9w== - -"@next/swc-linux-arm-gnueabihf@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.6.tgz#aab663282b5f15d12bf9de1120175f438a44c924" - integrity sha512-wNdi5A519e1P+ozEuYOhWPzzE6m1y7mkO6NFwn6watUwO0X9nZs7fT9THmnekvmFQpaZ6U+xf2MQ9poQoCh6jQ== - -"@next/swc-linux-arm64-gnu@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.6.tgz#5e2b6df4636576a00befb7bd414820a12161a9af" - integrity sha512-e8KTRnleQY1KLk5PwGV5hrmvKksCc74QRpHl5ffWnEEAtL2FE0ave5aIkXqErsPdXkiKuA/owp3LjQrP+/AH7Q== - -"@next/swc-linux-arm64-musl@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.6.tgz#4a5e91a36cf140cad974df602d647e64b1b9473f" - integrity sha512-/7RF03C3mhjYpHN+pqOolgME3guiHU5T3TsejuyteqyEyzdEyLHod+jcYH6ft7UZ71a6TdOewvmbLOtzHW2O8A== - -"@next/swc-linux-x64-gnu@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.6.tgz#accb8a721a99e704565b936f16e96fa0c67e8db1" - integrity sha512-kxyEXnYHpOEkFnmrlwB1QlzJtjC6sAJytKcceIyFUHbCaD3W/Qb5tnclcnHKTaFccizZRePXvV25Ok/eUSpKTw== - -"@next/swc-linux-x64-musl@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.6.tgz#2affaa2f4f01bc190a539d895118a6ad1a477645" - integrity sha512-N0c6gubS3WW1oYYgo02xzZnNatfVQP/CiJq2ax+DJ55ePV62IACbRCU99TZNXXg+Kos6vNW4k+/qgvkvpGDeyA== - -"@next/swc-win32-arm64-msvc@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.6.tgz#28e5c042772865efd05197a8d1db5920156997fc" - integrity sha512-QjeMB2EBqBFPb/ac0CYr7GytbhUkrG4EwFWbcE0vsRp4H8grt25kYpFQckL4Jak3SUrp7vKfDwZ/SwO7QdO8vw== - -"@next/swc-win32-ia32-msvc@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.6.tgz#30d91a6d847fa8bce9f8a0f9d2b469d574270be5" - integrity sha512-EQzXtdqRTcmhT/tCq81rIwE36Y3fNHPInaCuJzM/kftdXfa0F+64y7FAoMO13npX8EG1+SamXgp/emSusKrCXg== - -"@next/swc-win32-x64-msvc@13.0.6": - version "13.0.6" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.6.tgz#dfa28ddb335c16233d22cf39ec8cdf723e6587a1" - integrity sha512-pSkqZ//UP/f2sS9T7IvHLfEWDPTX0vRyXJnAUNisKvO3eF3e1xdhDX7dix/X3Z3lnN4UjSwOzclAI87JFbOwmQ== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@popperjs/core@^2.11.6": - version "2.11.6" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" - integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== - -"@reach/skip-nav@^0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@reach/skip-nav/-/skip-nav-0.17.0.tgz#225aaaf947f8750568ad5f4cc3646641fd335d56" - integrity sha512-wkkpQK3ffczzGHis6TaUvpOabuAL9n9Kh5vr4h56XPIJP3X77VcHUDk7MK3HbV1mTgamGxc9Hbd1sXKSWLu3yA== - dependencies: - "@reach/utils" "0.17.0" - tslib "^2.3.0" - -"@reach/utils@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@reach/utils/-/utils-0.17.0.tgz#3d1d2ec56d857f04fe092710d8faee2b2b121303" - integrity sha512-M5y8fCBbrWeIsxedgcSw6oDlAMQDkl5uv3VnMVJ7guwpf4E48Xlh1v66z/1BgN/WYe2y8mB/ilFD2nysEfdGeA== - dependencies: - tiny-warning "^1.0.3" - tslib "^2.3.0" - -"@swc/helpers@0.4.14": - version "0.4.14" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" - integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== - dependencies: - tslib "^2.4.0" - -"@types/acorn@^4.0.0": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" - integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== - dependencies: - "@types/estree" "*" - -"@types/debug@^4.0.0": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== - dependencies: - "@types/ms" "*" - -"@types/estree-jsx@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-0.0.1.tgz#c36d7a1afeb47a95a8ee0b7bc8bc705db38f919d" - integrity sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A== - dependencies: - "@types/estree" "*" - -"@types/estree-jsx@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.0.tgz#7bfc979ab9f692b492017df42520f7f765e98df1" - integrity sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ== - dependencies: - "@types/estree" "*" - -"@types/estree@*", "@types/estree@^0.0.50": - version "0.0.50" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== - -"@types/estree@^0.0.46": - version "0.0.46" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" - integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== - -"@types/hast@^2.0.0": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" - integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== - dependencies: - "@types/unist" "*" - -"@types/mdast@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" - integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== - dependencies: - "@types/unist" "*" - -"@types/mdurl@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" - integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== - -"@types/mdx@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.1.tgz#e4c05d355d092d7b58db1abfe460e53f41102ac8" - integrity sha512-JPEv4iAl0I+o7g8yVWDwk30es8mfVrjkvh5UeVR2sYPpZCK44vrAPsbJpIS+rJAUxLgaSAMKTEH5Vn5qd9XsrQ== - -"@types/ms@*": - version "0.7.31" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" - integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== - -"@types/node@^18.11.10": - version "18.11.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.10.tgz#4c64759f3c2343b7e6c4b9caf761c7a3a05cee34" - integrity sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ== - -"@types/prop-types@*": - version "15.7.4" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" - integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== - -"@types/react@>=16": - version "17.0.43" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.43.tgz#4adc142887dd4a2601ce730bc56c3436fdb07a55" - integrity sha512-8Q+LNpdxf057brvPu1lMtC5Vn7J119xrP1aq4qiaefNioQUYANF/CYeK4NsKorSZyUGJ66g0IM+4bbjwx45o2A== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - -"@types/unist@*", "@types/unist@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" - integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== - -acorn-jsx@^5.0.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-node@^1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" - integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - dependencies: - acorn "^7.0.0" - acorn-walk "^7.0.0" - xtend "^4.0.2" - -acorn-walk@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.0.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.0.0: - version "8.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" - integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== - -ansi-styles@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arch@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf" - integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ== - -arg@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/arg/-/arg-1.0.0.tgz#444d885a4e25b121640b55155ef7cd03975d6050" - integrity sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw== - -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -astring@^1.8.0: - version "1.8.3" - resolved "https://registry.yarnpkg.com/astring/-/astring-1.8.3.tgz#1a0ae738c7cc558f8e5ddc8e3120636f5cebcb85" - integrity sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A== - -autoprefixer@^10.4.13: - version "10.4.13" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" - integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== - dependencies: - browserslist "^4.21.4" - caniuse-lite "^1.0.30001426" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -bail@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.21.4: - version "4.21.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" - integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== - dependencies: - caniuse-lite "^1.0.30001400" - electron-to-chromium "^1.4.251" - node-releases "^2.0.6" - update-browserslist-db "^1.0.9" - -camelcase-css@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" - integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== - -caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001426: - version "1.0.30001435" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz#502c93dbd2f493bee73a408fe98e98fb1dad10b2" - integrity sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA== - -ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - -chalk@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" - integrity sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q== - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -character-entities@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.1.tgz#98724833e1e27990dee0bd0f2b8a859c3476aac7" - integrity sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ== - -character-reference-invalid@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" - integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== - -chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -client-only@0.0.1, client-only@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" - integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== - -clipboardy@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.2.tgz#2ce320b9ed9be1514f79878b53ff9765420903e2" - integrity sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw== - dependencies: - arch "^2.1.0" - execa "^0.8.0" - -clsx@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -comma-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz#d4c25abb679b7751c880be623c1179780fe1dd98" - integrity sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg== - -compute-scroll-into-view@^1.0.20: - version "1.0.20" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" - integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -csstype@^3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.11.tgz#d66700c5eacfac1940deb4e3ee5642792d85cd33" - integrity sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw== - -debug@^4.0.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -decode-named-character-reference@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.1.tgz#57b2bd9112659cacbc449d3577d7dadb8e1f3d1b" - integrity sha512-YV/0HQHreRwKb7uBopyIkLG17jG6Sv2qUchk9qSoVJ2f+flwRsPNBO0hAnjt6mTNYUT+vw9Gy2ihXg4sUWPi2w== - dependencies: - character-entities "^2.0.0" - -defined@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" - integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== - -dequal@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" - integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== - -detective@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" - integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== - dependencies: - acorn-node "^1.8.2" - defined "^1.0.0" - minimist "^1.2.6" - -didyoumean@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" - integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== - -diff@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -dlv@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" - integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== - -electron-to-chromium@^1.4.251: - version "1.4.284" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" - integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -estree-util-attach-comments@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-2.0.0.tgz#2c06d484dfcf841b5946bcb84d5412cbcd544e22" - integrity sha512-kT9YVRvlt2ewPp9BazfIIgXMGsXOEpOm57bK8aa4F3eOEndMml2JAETjWaG3SZYHmC6axSNIzHGY718dYwIuVg== - dependencies: - "@types/estree" "^0.0.46" - -estree-util-build-jsx@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-2.0.0.tgz#4903e2a923ebc791f86e78ec3687d01715dec902" - integrity sha512-d49hPGqBCJF/bF06g1Ywg7zjH1mrrUdPPrixBlKBxcX4WvMYlUUJ8BkrwlzWc8/fm6XqGgk5jilhgeZBDEGwOQ== - dependencies: - "@types/estree-jsx" "^0.0.1" - estree-util-is-identifier-name "^2.0.0" - estree-walker "^3.0.0" - -estree-util-is-identifier-name@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-1.1.0.tgz#2e3488ea06d9ea2face116058864f6370b37456d" - integrity sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ== - -estree-util-is-identifier-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.0.tgz#e2d3d2ae3032c017b2112832bfc5d8ba938c8010" - integrity sha512-aXXZFVMnBBDRP81vS4YtAYJ0hUkgEsXea7lNKWCOeaAquGb1Jm2rcONPB5fpzwgbNxulTvrWuKnp9UElUGAKeQ== - -estree-util-to-js@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-1.1.0.tgz#3bd9bb86354063537cc3d81259be2f0d4c3af39f" - integrity sha512-490lbfCcpLk+ofK6HCgqDfYs4KAfq6QVvDw3+Bm1YoKRgiOjKiKYGAVQE1uwh7zVxBgWhqp4FDtp5SqunpUk1A== - dependencies: - "@types/estree-jsx" "^1.0.0" - astring "^1.8.0" - source-map "^0.7.0" - -estree-util-value-to-estree@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-1.3.0.tgz#1d3125594b4d6680f666644491e7ac1745a3df49" - integrity sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw== - dependencies: - is-plain-obj "^3.0.0" - -estree-util-visit@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-1.1.0.tgz#c0ea7942c40ac7889a77b57a11e92f987744bc6f" - integrity sha512-3lXJ4Us9j8TUif9cWcQy81t9p5OLasnDuuhrFiqb+XstmKC1d1LmrQWYsY49/9URcfHE64mPypDBaNK9NwWDPQ== - dependencies: - "@types/estree-jsx" "^0.0.1" - "@types/unist" "^2.0.0" - -estree-walker@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.1.tgz#c2a9fb4a30232f5039b7c030b37ead691932debd" - integrity sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g== - -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -fast-glob@^3.2.12: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -flexsearch@^0.7.21: - version "0.7.31" - resolved "https://registry.yarnpkg.com/flexsearch/-/flexsearch-0.7.31.tgz#065d4110b95083110b9b6c762a71a77cc52e4702" - integrity sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA== - -focus-visible@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/focus-visible/-/focus-visible-5.2.0.tgz#3a9e41fccf587bd25dcc2ef045508284f0a4d6b3" - integrity sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ== - -fraction.js@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" - integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -git-up@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" - integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== - dependencies: - is-ssh "^1.4.0" - parse-url "^8.1.0" - -git-url-parse@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" - integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== - dependencies: - git-up "^7.0.0" - -github-slugger@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" - integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@7.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.2.10: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -gray-matter@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" - integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== - dependencies: - js-yaml "^3.13.1" - kind-of "^6.0.2" - section-matter "^1.0.0" - strip-bom-string "^1.0.0" - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hast-util-to-estree@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-2.0.2.tgz#79c5bf588915610b3f0d47ca83a74dc0269c7dc2" - integrity sha512-UQrZVeBj6A9od0lpFvqHKNSH9zvDrNoyWKbveu1a2oSCXEDUI+3bnd6BoiQLPnLrcXXn/jzJ6y9hmJTTlvf8lQ== - dependencies: - "@types/estree-jsx" "^0.0.1" - "@types/hast" "^2.0.0" - "@types/unist" "^2.0.0" - comma-separated-tokens "^2.0.0" - estree-util-attach-comments "^2.0.0" - estree-util-is-identifier-name "^2.0.0" - hast-util-whitespace "^2.0.0" - mdast-util-mdx-expression "^1.0.0" - mdast-util-mdxjs-esm "^1.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - style-to-object "^0.3.0" - unist-util-position "^4.0.0" - zwitch "^2.0.0" - -hast-util-to-string@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hast-util-to-string/-/hast-util-to-string-1.0.4.tgz#9b24c114866bdb9478927d7e9c36a485ac728378" - integrity sha512-eK0MxRX47AV2eZ+Lyr18DCpQgodvaS3fAQO2+b9Two9F5HEoRPhiUMNzoXArMJfZi2yieFzUBMRl3HNJ3Jus3w== - -hast-util-whitespace@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz#4fc1086467cc1ef5ba20673cb6b03cec3a970f1c" - integrity sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inline-style-parser@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" - integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== - -intersection-observer@^0.12.2: - version "0.12.2" - resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.12.2.tgz#4a45349cc0cd91916682b1f44c28d7ec737dc375" - integrity sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg== - -is-alphabetical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" - integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== - -is-alphanumerical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" - integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== - dependencies: - is-alphabetical "^2.0.0" - is-decimal "^2.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" - integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== - -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-decimal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" - integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== - -is-extendable@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" - integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-obj@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.0.0.tgz#06c0999fd7574edf5a906ba5644ad0feb3a84d22" - integrity sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw== - -is-reference@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.0.tgz#b1380c03d96ddf7089709781e3208fceb0c92cd6" - integrity sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q== - dependencies: - "@types/estree" "*" - -is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.0.1" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -"js-tokens@^3.0.0 || ^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsonc-parser@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^4.0.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d" - integrity sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA== - -lilconfig@^2.0.5, lilconfig@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" - integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== - -longest-streak@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.0.1.tgz#c97315b7afa0e7d9525db9a5a2953651432bdc5d" - integrity sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg== - -loose-envify@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -markdown-extensions@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3" - integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q== - -markdown-table@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.3.tgz#e6331d30e493127e031dd385488b5bd326e4a6bd" - integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== - -match-sorter@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda" - integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw== - dependencies: - "@babel/runtime" "^7.12.5" - remove-accents "0.4.2" - -mdast-util-definitions@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz#b6d10ef00a3c4cf191e8d9a5fa58d7f4a366f817" - integrity sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - unist-util-visit "^3.0.0" - -mdast-util-find-and-replace@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz#249901ef43c5f41d6e8a8d446b3b63b17e592d7c" - integrity sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw== - dependencies: - escape-string-regexp "^5.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.0.0" - -mdast-util-from-markdown@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz#84df2924ccc6c995dec1e2368b2b208ad0a76268" - integrity sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - decode-named-character-reference "^1.0.0" - mdast-util-to-string "^3.1.0" - micromark "^3.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-decode-string "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - unist-util-stringify-position "^3.0.0" - uvu "^0.5.0" - -mdast-util-gfm-autolink-literal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz#4032dcbaddaef7d4f2f3768ed830475bb22d3970" - integrity sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg== - dependencies: - "@types/mdast" "^3.0.0" - ccount "^2.0.0" - mdast-util-find-and-replace "^2.0.0" - micromark-util-character "^1.0.0" - -mdast-util-gfm-footnote@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz#11d2d40a1a673a399c459e467fa85e00223191fe" - integrity sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.3.0" - micromark-util-normalize-identifier "^1.0.0" - -mdast-util-gfm-strikethrough@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.2.tgz#6b4fa4ae37d449ccb988192ac0afbb2710ffcefd" - integrity sha512-T/4DVHXcujH6jx1yqpcAYYwd+z5lAYMw4Ls6yhTfbMMtCt0PHY4gEfhW9+lKsLBtyhUGKRIzcUA2FATVqnvPDA== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.3.0" - -mdast-util-gfm-table@^1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.6.tgz#184e900979fe790745fc3dabf77a4114595fcd7f" - integrity sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag== - dependencies: - "@types/mdast" "^3.0.0" - markdown-table "^3.0.0" - mdast-util-from-markdown "^1.0.0" - mdast-util-to-markdown "^1.3.0" - -mdast-util-gfm-task-list-item@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz#6f35f09c6e2bcbe88af62fdea02ac199cc802c5c" - integrity sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-markdown "^1.3.0" - -mdast-util-gfm@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz#16fcf70110ae689a06d77e8f4e346223b64a0ea6" - integrity sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ== - dependencies: - mdast-util-from-markdown "^1.0.0" - mdast-util-gfm-autolink-literal "^1.0.0" - mdast-util-gfm-footnote "^1.0.0" - mdast-util-gfm-strikethrough "^1.0.0" - mdast-util-gfm-table "^1.0.0" - mdast-util-gfm-task-list-item "^1.0.0" - mdast-util-to-markdown "^1.0.0" - -mdast-util-mdx-expression@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.2.0.tgz#3e927afe27943956dc5d1c64cb949652062f71ff" - integrity sha512-wb36oi09XxqO9RVqgfD+xo8a7xaNgS+01+k3v0GKW0X0bYbeBmUZz22Z/IJ8SuphVlG+DNgNo9VoEaUJ3PKfJQ== - dependencies: - "@types/estree-jsx" "^0.0.1" - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-from-markdown "^1.0.0" - mdast-util-to-markdown "^1.0.0" - -mdast-util-mdx-jsx@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.0.1.tgz#03d003c8b0b4bd94ab092d876c0f92d2b0c83b0b" - integrity sha512-oPC7/smPBf7vxnvIYH5y3fPo2lw1rdrswFfSb4i0GTAXRUQv7JUU/t/hbp07dgGdUFTSDOHm5DNamhNg/s2Hrg== - dependencies: - "@types/estree-jsx" "^0.0.1" - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - ccount "^2.0.0" - mdast-util-to-markdown "^1.3.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-remove-position "^4.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message "^3.0.0" - -mdast-util-mdx@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz#dd4f6c993cf27da32725e50a04874f595b7b63fb" - integrity sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw== - dependencies: - mdast-util-mdx-expression "^1.0.0" - mdast-util-mdx-jsx "^2.0.0" - mdast-util-mdxjs-esm "^1.0.0" - -mdast-util-mdxjs-esm@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.2.0.tgz#eca8b985f091c2d65a72c19d2740cefbc209aa63" - integrity sha512-IPpX9GBzAIbIRCjbyeLDpMhACFb0wxTIujuR3YElB8LWbducUdMgRJuqs/Vg8xQ1bIAMm7lw8L+YNtua0xKXRw== - dependencies: - "@types/estree-jsx" "^0.0.1" - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-from-markdown "^1.0.0" - mdast-util-to-markdown "^1.0.0" - -mdast-util-to-hast@^12.1.0: - version "12.1.1" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.1.1.tgz#89a2bb405eaf3b05eb8bf45157678f35eef5dbca" - integrity sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw== - dependencies: - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - "@types/mdurl" "^1.0.0" - mdast-util-definitions "^5.0.0" - mdurl "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - unist-builder "^3.0.0" - unist-util-generated "^2.0.0" - unist-util-position "^4.0.0" - unist-util-visit "^4.0.0" - -mdast-util-to-markdown@^1.0.0, mdast-util-to-markdown@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz#38b6cdc8dc417de642a469c4fc2abdf8c931bd1e" - integrity sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA== - dependencies: - "@types/mdast" "^3.0.0" - "@types/unist" "^2.0.0" - longest-streak "^3.0.0" - mdast-util-to-string "^3.0.0" - micromark-util-decode-string "^1.0.0" - unist-util-visit "^4.0.0" - zwitch "^2.0.0" - -mdast-util-to-string@^3.0.0, mdast-util-to-string@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz#56c506d065fbf769515235e577b5a261552d56e9" - integrity sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA== - -mdurl@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz#edff4c72e5993d93724a3c206970f5a15b0585ad" - integrity sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-factory-destination "^1.0.0" - micromark-factory-label "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-factory-title "^1.0.0" - micromark-factory-whitespace "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-classify-character "^1.0.0" - micromark-util-html-tag-name "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" - -micromark-extension-gfm-autolink-literal@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz#dc589f9c37eaff31a175bab49f12290edcf96058" - integrity sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm-footnote@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz#cbfd8873b983e820c494498c6dac0105920818d5" - integrity sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg== - dependencies: - micromark-core-commonmark "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm-strikethrough@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz#162232c284ffbedd8c74e59c1525bda217295e18" - integrity sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-classify-character "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm-table@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz#7b708b728f8dc4d95d486b9e7a2262f9cddbcbb4" - integrity sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm-tagfilter@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz#fb2e303f7daf616db428bb6a26e18fda14a90a4d" - integrity sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA== - dependencies: - micromark-util-types "^1.0.0" - -micromark-extension-gfm-task-list-item@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz#7683641df5d4a09795f353574d7f7f66e47b7fc4" - integrity sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-gfm@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz#40f3209216127a96297c54c67f5edc7ef2d1a2a2" - integrity sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA== - dependencies: - micromark-extension-gfm-autolink-literal "^1.0.0" - micromark-extension-gfm-footnote "^1.0.0" - micromark-extension-gfm-strikethrough "^1.0.0" - micromark-extension-gfm-table "^1.0.0" - micromark-extension-gfm-tagfilter "^1.0.0" - micromark-extension-gfm-task-list-item "^1.0.0" - micromark-util-combine-extensions "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-extension-mdx-expression@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz#cd3843573921bf55afcfff4ae0cd2e857a16dcfa" - integrity sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA== - dependencies: - micromark-factory-mdx-expression "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-events-to-acorn "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-extension-mdx-jsx@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz#9f196be5f65eb09d2a49b237a7b3398bba2999be" - integrity sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA== - dependencies: - "@types/acorn" "^4.0.0" - estree-util-is-identifier-name "^2.0.0" - micromark-factory-mdx-expression "^1.0.0" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - vfile-message "^3.0.0" - -micromark-extension-mdx-md@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz#382f5df9ee3706dd120b51782a211f31f4760d22" - integrity sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw== - dependencies: - micromark-util-types "^1.0.0" - -micromark-extension-mdxjs-esm@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.2.tgz#df0c48743a0b1988119489c68314160b7942ffa6" - integrity sha512-bIaxblNIM+CCaJvp3L/V+168l79iuNmxEiTU6i3vB0YuDW+rumV64BFMxvhfRDxaJxQE1zD5vTPdyLBbW4efGA== - dependencies: - micromark-core-commonmark "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-events-to-acorn "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - unist-util-position-from-estree "^1.1.0" - uvu "^0.5.0" - vfile-message "^3.0.0" - -micromark-extension-mdxjs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz#772644e12fc8299a33e50f59c5aa15727f6689dd" - integrity sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ== - dependencies: - acorn "^8.0.0" - acorn-jsx "^5.0.0" - micromark-extension-mdx-expression "^1.0.0" - micromark-extension-mdx-jsx "^1.0.0" - micromark-extension-mdx-md "^1.0.0" - micromark-extension-mdxjs-esm "^1.0.0" - micromark-util-combine-extensions "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-destination@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz#fef1cb59ad4997c496f887b6977aa3034a5a277e" - integrity sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-label@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz#6be2551fa8d13542fcbbac478258fb7a20047137" - integrity sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-factory-mdx-expression@^1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz#917e17d16e6e9c2551f3a862e6a9ebdd22056476" - integrity sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-events-to-acorn "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - unist-util-position-from-estree "^1.0.0" - uvu "^0.5.0" - vfile-message "^3.0.0" - -micromark-factory-space@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633" - integrity sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-title@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz#7e09287c3748ff1693930f176e1c4a328382494f" - integrity sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-factory-whitespace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz#e991e043ad376c1ba52f4e49858ce0794678621c" - integrity sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-character@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.1.0.tgz#d97c54d5742a0d9611a68ca0cd4124331f264d86" - integrity sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg== - dependencies: - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-chunked@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz#5b40d83f3d53b84c4c6bce30ed4257e9a4c79d06" - integrity sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-classify-character@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz#cbd7b447cb79ee6997dd274a46fc4eb806460a20" - integrity sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-combine-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz#91418e1e74fb893e3628b8d496085639124ff3d5" - integrity sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-decode-numeric-character-reference@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz#dcc85f13b5bd93ff8d2868c3dba28039d490b946" - integrity sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-decode-string@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz#942252ab7a76dec2dbf089cc32505ee2bc3acf02" - integrity sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-symbol "^1.0.0" - -micromark-util-encode@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz#2c1c22d3800870ad770ece5686ebca5920353383" - integrity sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA== - -micromark-util-events-to-acorn@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.0.4.tgz#07d26cd675dbca8c38b8d9aff2d4cdc91c9997aa" - integrity sha512-dpo8ecREK5s/KMph7jJ46RLM6g7N21CMc9LAJQbDLdbQnTpijigkSJPTIfLXZ+h5wdXlcsQ+b6ufAE9v76AdgA== - dependencies: - "@types/acorn" "^4.0.0" - "@types/estree" "^0.0.50" - estree-util-visit "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - vfile-message "^3.0.0" - -micromark-util-html-tag-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz#75737e92fef50af0c6212bd309bc5cb8dbd489ed" - integrity sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g== - -micromark-util-normalize-identifier@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz#4a3539cb8db954bbec5203952bfe8cedadae7828" - integrity sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg== - dependencies: - micromark-util-symbol "^1.0.0" - -micromark-util-resolve-all@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz#a7c363f49a0162e931960c44f3127ab58f031d88" - integrity sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw== - dependencies: - micromark-util-types "^1.0.0" - -micromark-util-sanitize-uri@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz#27dc875397cd15102274c6c6da5585d34d4f12b2" - integrity sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-symbol "^1.0.0" - -micromark-util-subtokenize@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz#ff6f1af6ac836f8bfdbf9b02f40431760ad89105" - integrity sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA== - dependencies: - micromark-util-chunked "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - uvu "^0.5.0" - -micromark-util-symbol@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz#b90344db62042ce454f351cf0bebcc0a6da4920e" - integrity sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ== - -micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.2.tgz#f4220fdb319205812f99c40f8c87a9be83eded20" - integrity sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w== - -micromark@^3.0.0: - version "3.0.10" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.0.10.tgz#1eac156f0399d42736458a14b0ca2d86190b457c" - integrity sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - micromark-core-commonmark "^1.0.1" - micromark-factory-space "^1.0.0" - micromark-util-character "^1.0.0" - micromark-util-chunked "^1.0.0" - micromark-util-combine-extensions "^1.0.0" - micromark-util-decode-numeric-character-reference "^1.0.0" - micromark-util-encode "^1.0.0" - micromark-util-normalize-identifier "^1.0.0" - micromark-util-resolve-all "^1.0.0" - micromark-util-sanitize-uri "^1.0.0" - micromark-util-subtokenize "^1.0.0" - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.1" - uvu "^0.5.0" - -micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -mri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== - -next-seo@^5.5.0: - version "5.14.1" - resolved "https://registry.yarnpkg.com/next-seo/-/next-seo-5.14.1.tgz#d07322edc37634fbd9beca51fb04177910d8031c" - integrity sha512-NiJeQbxYP3z+EMp52q8k3Q+OfX2+Yv2WehERDj98r2wjXxL+woKpRBdsSVYolTD0Hm8IWs42SzaISE93RoQdOw== - -next-themes@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.2.1.tgz#0c9f128e847979daf6c67f70b38e6b6567856e45" - integrity sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A== - -next@^13.0.6: - version "13.0.6" - resolved "https://registry.yarnpkg.com/next/-/next-13.0.6.tgz#f9a2e9e2df9ad60e1b6b716488c9ad501a383621" - integrity sha512-COvigvms2LRt1rrzfBQcMQ2GZd86Mvk1z+LOLY5pniFtL4VrTmhZ9salrbKfSiXbhsD01TrDdD68ec3ABDyscA== - dependencies: - "@next/env" "13.0.6" - "@swc/helpers" "0.4.14" - caniuse-lite "^1.0.30001406" - postcss "8.4.14" - styled-jsx "5.1.0" - optionalDependencies: - "@next/swc-android-arm-eabi" "13.0.6" - "@next/swc-android-arm64" "13.0.6" - "@next/swc-darwin-arm64" "13.0.6" - "@next/swc-darwin-x64" "13.0.6" - "@next/swc-freebsd-x64" "13.0.6" - "@next/swc-linux-arm-gnueabihf" "13.0.6" - "@next/swc-linux-arm64-gnu" "13.0.6" - "@next/swc-linux-arm64-musl" "13.0.6" - "@next/swc-linux-x64-gnu" "13.0.6" - "@next/swc-linux-x64-musl" "13.0.6" - "@next/swc-win32-arm64-msvc" "13.0.6" - "@next/swc-win32-ia32-msvc" "13.0.6" - "@next/swc-win32-x64-msvc" "13.0.6" - -nextra-theme-docs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nextra-theme-docs/-/nextra-theme-docs-2.0.0.tgz#ec546dd68eeee51de618ab4610039ea5f3c246f0" - integrity sha512-Bkzbx4I/q4MlhGE9/wkI+xGKQFjwE/M3hcCZY1O6vOXkKWSOZ9L7BNq77iPBOzxqdrdN3fVPh0HYMKaR9O4xHA== - dependencies: - "@headlessui/react" "^1.6.6" - "@mdx-js/react" "^2.1.5" - "@popperjs/core" "^2.11.6" - "@reach/skip-nav" "^0.17.0" - clsx "^1.2.1" - flexsearch "^0.7.21" - focus-visible "^5.2.0" - git-url-parse "^13.1.0" - github-slugger "^1.4.0" - intersection-observer "^0.12.2" - match-sorter "^6.3.1" - next-seo "^5.5.0" - next-themes "^0.2.1" - scroll-into-view-if-needed "^2.2.29" - -nextra@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nextra/-/nextra-2.0.0.tgz#c4ecb4c2d912d37cb45774bdbb65cf2493d176aa" - integrity sha512-3mf5aX+ZJVz7HRtxwtWIo1kw51xrF5MsqoUl0cQDTbFiktCn/Af5AX1gBuiX8/Z4mSEedalvTZUfR6+LxumLFg== - dependencies: - "@mdx-js/mdx" "^2.1.3" - "@napi-rs/simple-git" "^0.1.8" - github-slugger "^1.4.0" - graceful-fs "^4.2.10" - gray-matter "^4.0.3" - rehype-mdx-title "^1.0.0" - rehype-pretty-code "0.2.4" - remark-gfm "^3.0.1" - remark-reading-time "^2.0.1" - shiki "0.10.1" - slash "^3.0.0" - title "^3.5.3" - unist-util-visit "^4.1.1" - -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -object-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" - integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -parse-entities@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.0.tgz#f67c856d4e3fe19b1a445c3fabe78dcdc1053eeb" - integrity sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ== - dependencies: - "@types/unist" "^2.0.0" - character-entities "^2.0.0" - character-entities-legacy "^3.0.0" - character-reference-invalid "^2.0.0" - decode-named-character-reference "^1.0.0" - is-alphanumerical "^2.0.0" - is-decimal "^2.0.0" - is-hexadecimal "^2.0.0" - -parse-numeric-range@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" - integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== - -parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== - dependencies: - protocols "^2.0.0" - -parse-url@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" - integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== - dependencies: - parse-path "^7.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -periscopic@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.0.4.tgz#b3fbed0d1bc844976b977173ca2cd4a0ef4fa8d1" - integrity sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg== - dependencies: - estree-walker "^3.0.0" - is-reference "^3.0.0" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -postcss-import@^14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" - integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== - dependencies: - postcss-value-parser "^4.0.0" - read-cache "^1.0.0" - resolve "^1.1.7" - -postcss-js@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00" - integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== - dependencies: - camelcase-css "^2.0.1" - -postcss-load-config@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" - -postcss-nested@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" - integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-selector-parser@^6.0.10: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@8.4.14: - version "8.4.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" - integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.18, postcss@^8.4.19: - version "8.4.19" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.19.tgz#61178e2add236b17351897c8bcc0b4c8ecab56fc" - integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -property-information@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.1.1.tgz#5ca85510a3019726cb9afed4197b7b8ac5926a22" - integrity sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w== - -protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== - dependencies: - pify "^2.3.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -reading-time@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" - integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== - -regenerator-runtime@^0.13.4: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== - -rehype-mdx-title@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rehype-mdx-title/-/rehype-mdx-title-1.0.0.tgz#292598b5ad8af2c2bd01b3674caea1a44bb60f63" - integrity sha512-5B/53Y+KQHm4/nrE6pIIPc9Ie2fbPMCLs8WwMGYWWHr+5g3TkmEijRkr8TGYHULtc+C7bOoPR8LIF5DpGROIDg== - dependencies: - estree-util-is-identifier-name "^1.1.0" - hast-util-to-string "^1.0.4" - unist-util-visit "^2.0.3" - -rehype-pretty-code@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/rehype-pretty-code/-/rehype-pretty-code-0.2.4.tgz#73b1e1c3ca7f50aaeeb131185a744a5ea936a08f" - integrity sha512-vbqwIa4cNwRaVur9caUw/b0jOQR88Svrs9c9RaQoogvbBxs5X9bWrSe5oFypaRTTq2cpZ45YzJQ7UUPO76LMKA== - dependencies: - parse-numeric-range "^1.3.0" - -remark-gfm@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-3.0.1.tgz#0b180f095e3036545e9dddac0e8df3fa5cfee54f" - integrity sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-gfm "^2.0.0" - micromark-extension-gfm "^2.0.0" - unified "^10.0.0" - -remark-mdx@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-2.1.0.tgz#ae29ccd4c974a39ca671cd533acf9c7560a8bba4" - integrity sha512-J6Yqw566SaEy6A9Neni1JJTaEjbjsM3OsKqL04TtCvZhevRtFi8CG8GIQPzvxIRKRCAOnWw1Vpk1AInB1OpNqA== - dependencies: - mdast-util-mdx "^2.0.0" - micromark-extension-mdxjs "^1.0.0" - -remark-parse@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.1.tgz#6f60ae53edbf0cf38ea223fe643db64d112e0775" - integrity sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-from-markdown "^1.0.0" - unified "^10.0.0" - -remark-reading-time@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/remark-reading-time/-/remark-reading-time-2.0.1.tgz#fe8bb8e420db7678dc749385167adb4fc99318f7" - integrity sha512-fy4BKy9SRhtYbEHvp6AItbRTnrhiDGbqLQTSYVbQPGuRCncU1ubSsh9p/W5QZSxtYcUXv8KGL0xBgPLyNJA1xw== - dependencies: - estree-util-is-identifier-name "^2.0.0" - estree-util-value-to-estree "^1.3.0" - reading-time "^1.3.0" - unist-util-visit "^3.1.0" - -remark-rehype@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" - integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== - dependencies: - "@types/hast" "^2.0.0" - "@types/mdast" "^3.0.0" - mdast-util-to-hast "^12.1.0" - unified "^10.0.0" - -remove-accents@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" - integrity sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U= - -resolve@^1.1.7, resolve@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -sade@^1.7.3: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -scroll-into-view-if-needed@^2.2.29: - version "2.2.31" - resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587" - integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA== - dependencies: - compute-scroll-into-view "^1.0.20" - -section-matter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" - integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== - dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shiki@0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" - integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== - dependencies: - jsonc-parser "^3.0.0" - vscode-oniguruma "^1.6.1" - vscode-textmate "5.2.0" - -signal-exit@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map@^0.7.0: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -space-separated-tokens@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b" - integrity sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stringify-entities@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.2.tgz#13d113dc7449dc8ae4cb22c28883ee3fff8753e3" - integrity sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - -strip-bom-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -style-to-object@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" - integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== - dependencies: - inline-style-parser "0.1.1" - -styled-jsx@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.0.tgz#4a5622ab9714bd3fcfaeec292aa555871f057563" - integrity sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ== - dependencies: - client-only "0.0.1" - -supports-color@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= - dependencies: - has-flag "^2.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tailwindcss@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.4.tgz#afe3477e7a19f3ceafb48e4b083e292ce0dc0250" - integrity sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ== - dependencies: - arg "^5.0.2" - chokidar "^3.5.3" - color-name "^1.1.4" - detective "^5.2.1" - didyoumean "^1.2.2" - dlv "^1.1.3" - fast-glob "^3.2.12" - glob-parent "^6.0.2" - is-glob "^4.0.3" - lilconfig "^2.0.6" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.18" - postcss-import "^14.1.0" - postcss-js "^4.0.0" - postcss-load-config "^3.1.4" - postcss-nested "6.0.0" - postcss-selector-parser "^6.0.10" - postcss-value-parser "^4.2.0" - quick-lru "^5.1.1" - resolve "^1.22.1" - -tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -title@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/title/-/title-3.5.3.tgz#b338d701a3d949db6b49b2c86f409f9c2f36cd91" - integrity sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q== - dependencies: - arg "1.0.0" - chalk "2.3.0" - clipboardy "1.2.2" - titleize "1.0.0" - -titleize@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/titleize/-/titleize-1.0.0.tgz#7d350722061830ba6617631e0cfd3ea08398d95a" - integrity sha1-fTUHIgYYMLpmF2MeDP0+oIOY2Vo= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -trough@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" - integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== - -tslib@^2.3.0, tslib@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - -typescript@^4.9.3: - version "4.9.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.3.tgz#3aea307c1746b8c384435d8ac36b8a2e580d85db" - integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== - -unified@^10.0.0: - version "10.1.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" - integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== - dependencies: - "@types/unist" "^2.0.0" - bail "^2.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^5.0.0" - -unist-builder@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-3.0.0.tgz#728baca4767c0e784e1e64bb44b5a5a753021a04" - integrity sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-generated@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.0.tgz#86fafb77eb6ce9bfa6b663c3f5ad4f8e56a60113" - integrity sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw== - -unist-util-is@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.2.tgz#c7d1341188aa9ce5b3cff538958de9895f14a5de" - integrity sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ== - -unist-util-is@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.1.1.tgz#e8aece0b102fa9bc097b0fef8f870c496d4a6236" - integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ== - -unist-util-position-from-estree@^1.0.0, unist-util-position-from-estree@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz#96f4d543dfb0428edc01ebb928570b602d280c4c" - integrity sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-position@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.2.tgz#1915816906a3503f3e40d65b6e4fe6d41845d2e3" - integrity sha512-Y6+plxR41dOLbyyqVDLuGWgXDmxdXslCSRYQkSDagBnOT9oFsQH0J8FzhirSklUEe0xZTT0WDnAE1gXPaDFljA== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-remove-position@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-4.0.1.tgz#d5b46a7304ac114c8d91990ece085ca7c2c135c8" - integrity sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ== - dependencies: - "@types/unist" "^2.0.0" - unist-util-visit "^4.0.0" - -unist-util-stringify-position@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz#5c6aa07c90b1deffd9153be170dce628a869a447" - integrity sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg== - dependencies: - "@types/unist" "^2.0.0" - -unist-util-visit-parents@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz#d4076af3011739c71d2ce99d05de37d545f4351d" - integrity sha512-yJEfuZtzFpQmg1OSCyS9M5NJRrln/9FbYosH3iW0MG402QbdbaB8ZESwUv9RO6nRfLAKvWcMxCwdLWOov36x/g== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - -unist-util-visit-parents@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz#e83559a4ad7e6048a46b1bdb22614f2f3f4724f2" - integrity sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - -unist-util-visit-parents@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz#44bbc5d25f2411e7dfc5cecff12de43296aa8521" - integrity sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - -unist-util-visit-parents@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz#868f353e6fce6bf8fa875b251b0f4fec3be709bb" - integrity sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - -unist-util-visit@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" - integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^4.0.0" - unist-util-visit-parents "^3.0.0" - -unist-util-visit@^3.0.0, unist-util-visit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-3.1.0.tgz#9420d285e1aee938c7d9acbafc8e160186dbaf7b" - integrity sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^4.0.0" - -unist-util-visit@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.0.tgz#f41e407a9e94da31594e6b1c9811c51ab0b3d8f5" - integrity sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.0.0" - -unist-util-visit@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.1.tgz#1c4842d70bd3df6cc545276f5164f933390a9aad" - integrity sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg== - dependencies: - "@types/unist" "^2.0.0" - unist-util-is "^5.0.0" - unist-util-visit-parents "^5.1.1" - -update-browserslist-db@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uvu@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.3.tgz#3d83c5bc1230f153451877bfc7f4aea2392219ae" - integrity sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw== - dependencies: - dequal "^2.0.0" - diff "^5.0.0" - kleur "^4.0.3" - sade "^1.7.3" - -vfile-message@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.2.tgz#a2908f64d9e557315ec9d7ea3a910f658ac05f7d" - integrity sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^3.0.0" - -vfile@^5.0.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.2.tgz#b499fbc50197ea50ad3749e9b60beb16ca5b7c54" - integrity sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^3.0.0" - vfile-message "^3.0.0" - -vscode-oniguruma@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" - integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== - -vscode-textmate@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" - integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -xtend@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yaml@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -zwitch@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.2.tgz#91f8d0e901ffa3d66599756dde7f57b17c95dce1" - integrity sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA== diff --git a/mocks/handlers.ts b/mocks/handlers.ts deleted file mode 100644 index 3da4a41..0000000 --- a/mocks/handlers.ts +++ /dev/null @@ -1,1479 +0,0 @@ -import { rest } from 'msw'; - -export const handlers = [ - rest.get( - 'https://api.quran.com/api/v4/quran/verses/uthmani_tajweed', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { - id: 1, - verse_key: '1:1', - text_uthmani_tajweed: - 'بِسْمِ ٱللَّهِ ٱلرَّحْمَـٰنِ ٱلرَّحِيمِ ١', - }, - ], - }) - ); - } - ), - - rest.get('https://api.quran.com/api/v4/chapters', (_req, res, ctx) => { - return res( - ctx.json({ - chapters: [ - { - id: 1, - revelation_place: 'makkah', - revelation_order: 5, - bismillah_pre: false, - name_simple: 'Al-Fatihah', - name_complex: 'Al-Fātiĥah', - name_arabic: 'الفاتحة', - verses_count: 7, - pages: [1, 1], - translated_name: { language_name: 'english', name: 'The Opener' }, - }, - ], - }) - ); - }), - - rest.get( - 'https://api.quran.com/api/v4/resources/translations', - (_req, res, ctx) => { - return res( - ctx.json({ - translations: [ - { - id: 131, - name: 'Dr. Mustafa Khattab, the Clear Quran', - author_name: 'Dr. Mustafa Khattab', - slug: 'clearquran-with-tafsir', - language_name: 'english', - translated_name: { - name: 'Dr. Mustafa Khattab', - language_name: 'english', - }, - }, - ], - }) - ); - } - ), - - rest.get('https://api.quran.com/api/v4/search', (_req, res, ctx) => { - return res(ctx.json({})); - }), - - rest.get( - 'https://api.quran.com/api/v4/resources/recitations', - (_req, res, ctx) => { - return res( - ctx.json({ - recitations: [ - { - id: 1, - reciter_name: 'AbdulBaset AbdulSamad', - style: 'Mujawwad', - translated_name: { - name: 'AbdulBaset AbdulSamad', - language_name: 'english', - }, - }, - ], - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/quran/verses/code_v2', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { id: 1, verse_key: '1:1', code_v2: ' ﱂ ﱃ ﱄ ﱅ', v2_page: 1 }, - ], - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/chapter_recitations/:id/:chapter_number', - (_req, res, ctx) => { - return res( - ctx.json({ - audio_file: { - id: 43, - chapter_id: 22, - file_size: 19779712, - format: 'mp3', - total_files: 1, - audio_url: - 'https://download.quranicaudio.com/quran/abdullaah_3awwaad_al-juhaynee/022.mp3', - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/recitations/:recitation_id/by_ayah/:ayah_key', - (_req, res, ctx) => { - return res( - ctx.json({ - audio_files: [ - { verse_key: '1:1', url: 'AbdulBaset/Mujawwad/mp3/001001.mp3' }, - { verse_key: '1:2', url: 'AbdulBaset/Mujawwad/mp3/001002.mp3' }, - { verse_key: '1:3', url: 'AbdulBaset/Mujawwad/mp3/001003.mp3' }, - ], - pagination: { - per_page: 10, - current_page: 1, - next_page: 2, - total_pages: 15, - total_records: 148, - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/quran/verses/code_v1', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { id: 1, verse_key: '1:1', code_v1: 'ﭑ ﭒ ﭓ ﭔ ﭕ', v1_page: 1 }, - ], - }) - ); - } - ), - - rest.get('https://api.quran.com/api/v4/verses/random', (_req, res, ctx) => { - return res( - ctx.json({ - verse: { - id: 1, - verse_number: 1, - page_number: 1, - verse_key: '1:1', - juz_number: 1, - hizb_number: 1, - rub_number: 1, - sajdah_type: null, - sajdah_number: null, - words: [ - { - id: 1, - position: 1, - audio_url: 'wbw/001_001_001.mp3', - char_type_name: 'word', - line_number: 2, - page_number: 1, - code_v1: 'ﭑ', - translation: { text: 'In (the) name', language_name: 'english' }, - transliteration: { text: "bis'mi", language_name: 'english' }, - }, - ], - translations: [ - { - resource_id: 131, - text: 'In the Name of Allah—the Most Compassionate, Most Merciful.', - }, - ], - tafsirs: [ - { - id: 82641, - language_name: 'english', - name: 'Tafsir Ibn Kathir', - text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', - }, - ], - }, - }) - ); - }), - - rest.get( - 'https://api.quran.com/api/v4/recitations/:recitation_id/by_juz/:juz_number', - (_req, res, ctx) => { - return res( - ctx.json({ - audio_files: [ - { verse_key: '1:1', url: 'AbdulBaset/Mujawwad/mp3/001001.mp3' }, - { verse_key: '1:2', url: 'AbdulBaset/Mujawwad/mp3/001002.mp3' }, - { verse_key: '1:3', url: 'AbdulBaset/Mujawwad/mp3/001003.mp3' }, - ], - pagination: { - per_page: 10, - current_page: 1, - next_page: 2, - total_pages: 2, - total_records: 20, - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/quran/translations/:translation_id', - (_req, res, ctx) => { - return res( - ctx.json({ - translations: [ - { - resource_id: 131, - text: 'In the Name of Allah—the Most Compassionate, Most Merciful.', - }, - ], - meta: { - translation_name: 'Dr. Mustafa Khattab, the Clear Quran', - author_name: 'Dr. Mustafa Khattab', - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/resources/recitation_styles', - (_req, res, ctx) => { - return res( - ctx.json({ - recitation_styles: { - mujawwad: 'Mujawwad is a melodic style of Holy Quran recitation', - murattal: - 'Murattal is at a slower pace, used for study and practice', - muallim: 'Muallim is teaching style recitation of Holy Quran', - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/quran/verses/indopak', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { - id: 1, - verse_key: '1:1', - text_indopak: 'بِسۡمِ اللهِ الرَّحۡم]ٰنِ الرَّحِيۡمِ', - }, - ], - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/recitations/:recitation_id/by_page/:page_number', - (_req, res, ctx) => { - return res( - ctx.json({ - audio_files: [ - { verse_key: '1:1', url: 'AbdulBaset/Mujawwad/mp3/001001.mp3' }, - { verse_key: '1:2', url: 'AbdulBaset/Mujawwad/mp3/001002.mp3' }, - { verse_key: '1:3', url: 'AbdulBaset/Mujawwad/mp3/001003.mp3' }, - ], - pagination: { - per_page: 10, - current_page: 1, - next_page: 2, - total_pages: 15, - total_records: 148, - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/verses/by_chapter/:chapter_number', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { - id: 1, - verse_number: 1, - page_number: 1, - verse_key: '1:1', - juz_number: 1, - hizb_number: 1, - rub_number: 1, - sajdah_type: null, - sajdah_number: null, - text_indopak_nastaleeq: - 'بِسْمِ اللّٰهِ الرَّحْمٰنِ الرَّحِیْمِ ۟', - words: [ - { - id: 1, - position: 1, - audio_url: 'wbw/001_001_001.mp3', - char_type_name: 'word', - line_number: 2, - page_number: 1, - code_v1: 'ﭑ', - translation: { - text: 'In (the) name', - language_name: 'english', - }, - transliteration: { text: "bis'mi", language_name: 'english' }, - }, - ], - translations: [ - { - resource_id: 131, - text: 'In the Name of Allah—the Most Compassionate, Most Merciful.', - }, - ], - tafsirs: [ - { - id: 82641, - language_name: 'english', - name: 'Tafsir Ibn Kathir', - text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', - }, - ], - }, - ], - pagination: { - per_page: 1, - current_page: 1, - next_page: 2, - total_pages: 7, - total_records: 7, - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/chapters/:chapter_id/info', - (_req, res, ctx) => { - return res( - ctx.json({ - chapter_info: { - id: 1, - chapter_id: 1, - language_name: 'english', - short_text: - 'This Surah is named Al-Fatihah because of its subject-matter. Fatihah is that which opens a subject or a book or any other thing. In other words, Al-Fatihah is a sort of preface.', - source: - "Sayyid Abul Ala Maududi - Tafhim al-Qur'an - The Meaning of the Quran", - text: '

Name

\r\n

This Surah is named Al-Fatihah because of its subject-matter. Fatihah is that which opens a subject or a book or any other thing. In other words, Al-Fatihah is a sort of preface.

\r\n

Period of Revelation

...', - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/resources/chapter_infos', - (_req, res, ctx) => { - return res( - ctx.json({ - chapter_infos: [ - { - id: 155, - name: 'Hamza Roberto Piccardo', - author_name: 'Hamza Roberto Piccardo', - slug: 'hamza-roberto-piccardo-info', - language_name: 'italian', - translated_name: { - name: 'Hamza Roberto Piccardo', - language_name: 'english', - }, - }, - { - id: 63, - name: 'Chapter Info', - author_name: 'Sayyid Abul Ala Maududi', - slug: null, - language_name: 'malayalam', - translated_name: { - name: 'Chapter Info', - language_name: 'english', - }, - }, - { - id: 62, - name: 'Chapter Info', - author_name: 'Sayyid Abul Ala Maududi', - slug: null, - language_name: 'tamil', - translated_name: { - name: 'Chapter Info', - language_name: 'english', - }, - }, - { - id: 61, - name: 'Chapter Info', - author_name: 'Sayyid Abul Ala Maududi', - slug: null, - language_name: 'urdu', - translated_name: { - name: 'Chapter Info', - language_name: 'english', - }, - }, - ], - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/resources/verse_media', - (_req, res, ctx) => { - return res( - ctx.json({ - verse_media: [ - { - id: 64, - name: 'Bayyinah video commentary ', - author_name: 'Bayyinah', - slug: '', - language_name: 'english', - translated_name: { - name: 'Bayyinah video commentary ', - language_name: 'english', - }, - }, - ], - }) - ); - } - ), - - rest.get('https://api.quran.com/api/v4/juzs', (_req, res, ctx) => { - return res( - ctx.json({ - juzs: [ - { - id: 1, - juz_number: 1, - verse_mapping: { - 1: '1-7', - 2: '1-141', - }, - first_verse_id: 1, - last_verse_id: 148, - verses_count: 148, - }, - { - id: 2, - juz_number: 2, - verse_mapping: { - 2: '142-252', - }, - first_verse_id: 149, - last_verse_id: 259, - verses_count: 111, - }, - { - id: 3, - juz_number: 3, - verse_mapping: { - 2: '253-286', - 3: '1-92', - }, - first_verse_id: 260, - last_verse_id: 385, - verses_count: 126, - }, - { - id: 4, - juz_number: 4, - verse_mapping: { - 3: '93-200', - 4: '1-23', - }, - first_verse_id: 386, - last_verse_id: 516, - verses_count: 131, - }, - { - id: 5, - juz_number: 5, - verse_mapping: { - 4: '24-147', - }, - first_verse_id: 517, - last_verse_id: 640, - verses_count: 124, - }, - { - id: 6, - juz_number: 6, - verse_mapping: { - 4: '148-176', - 5: '1-81', - }, - first_verse_id: 641, - last_verse_id: 750, - verses_count: 110, - }, - { - id: 7, - juz_number: 7, - verse_mapping: { - 5: '82-120', - 6: '1-110', - }, - first_verse_id: 751, - last_verse_id: 899, - verses_count: 149, - }, - { - id: 8, - juz_number: 8, - verse_mapping: { - 6: '111-165', - 7: '1-87', - }, - first_verse_id: 900, - last_verse_id: 1041, - verses_count: 142, - }, - { - id: 9, - juz_number: 9, - verse_mapping: { - 7: '88-206', - 8: '1-40', - }, - first_verse_id: 1042, - last_verse_id: 1200, - verses_count: 159, - }, - { - id: 10, - juz_number: 10, - verse_mapping: { - 8: '41-75', - 9: '1-92', - }, - first_verse_id: 1201, - last_verse_id: 1327, - verses_count: 127, - }, - { - id: 11, - juz_number: 11, - verse_mapping: { - 9: '93-129', - 10: '1-109', - 11: '1-5', - }, - first_verse_id: 1328, - last_verse_id: 1478, - verses_count: 151, - }, - { - id: 12, - juz_number: 12, - verse_mapping: { - 11: '6-123', - 12: '1-52', - }, - first_verse_id: 1479, - last_verse_id: 1648, - verses_count: 170, - }, - { - id: 13, - juz_number: 13, - verse_mapping: { - 12: '53-111', - 13: '1-43', - 14: '1-52', - }, - first_verse_id: 1649, - last_verse_id: 1802, - verses_count: 154, - }, - { - id: 14, - juz_number: 14, - verse_mapping: { - 15: '1-99', - 16: '1-128', - }, - first_verse_id: 1803, - last_verse_id: 2029, - verses_count: 227, - }, - { - id: 15, - juz_number: 15, - verse_mapping: { - 17: '1-111', - 18: '1-74', - }, - first_verse_id: 2030, - last_verse_id: 2214, - verses_count: 185, - }, - { - id: 16, - juz_number: 16, - verse_mapping: { - 18: '75-110', - 19: '1-98', - 20: '1-135', - }, - first_verse_id: 2215, - last_verse_id: 2483, - verses_count: 269, - }, - { - id: 17, - juz_number: 17, - verse_mapping: { - 21: '1-112', - 22: '1-78', - }, - first_verse_id: 2484, - last_verse_id: 2673, - verses_count: 190, - }, - { - id: 18, - juz_number: 18, - verse_mapping: { - 23: '1-118', - 24: '1-64', - 25: '1-20', - }, - first_verse_id: 2674, - last_verse_id: 2875, - verses_count: 202, - }, - { - id: 19, - juz_number: 19, - verse_mapping: { - 25: '21-77', - 26: '1-227', - 27: '1-55', - }, - first_verse_id: 2876, - last_verse_id: 3214, - verses_count: 339, - }, - { - id: 20, - juz_number: 20, - verse_mapping: { - 27: '56-93', - 28: '1-88', - 29: '1-45', - }, - first_verse_id: 3215, - last_verse_id: 3385, - verses_count: 171, - }, - { - id: 21, - juz_number: 21, - verse_mapping: { - 29: '46-69', - 30: '1-60', - 31: '1-34', - 32: '1-30', - 33: '1-30', - }, - first_verse_id: 3386, - last_verse_id: 3563, - verses_count: 178, - }, - { - id: 22, - juz_number: 22, - verse_mapping: { - 33: '31-73', - 34: '1-54', - 35: '1-45', - 36: '1-27', - }, - first_verse_id: 3564, - last_verse_id: 3732, - verses_count: 169, - }, - { - id: 23, - juz_number: 23, - verse_mapping: { - 36: '28-83', - 37: '1-182', - 38: '1-88', - 39: '1-31', - }, - first_verse_id: 3733, - last_verse_id: 4089, - verses_count: 357, - }, - { - id: 24, - juz_number: 24, - verse_mapping: { - 39: '32-75', - 40: '1-85', - 41: '1-46', - }, - first_verse_id: 4090, - last_verse_id: 4264, - verses_count: 175, - }, - { - id: 25, - juz_number: 25, - verse_mapping: { - 41: '47-54', - 42: '1-53', - 43: '1-89', - 44: '1-59', - 45: '1-37', - }, - first_verse_id: 4265, - last_verse_id: 4510, - verses_count: 246, - }, - { - id: 26, - juz_number: 26, - verse_mapping: { - 46: '1-35', - 47: '1-38', - 48: '1-29', - 49: '1-18', - 50: '1-45', - 51: '1-30', - }, - first_verse_id: 4511, - last_verse_id: 4705, - verses_count: 195, - }, - { - id: 27, - juz_number: 27, - verse_mapping: { - 51: '31-60', - 52: '1-49', - 53: '1-62', - 54: '1-55', - 55: '1-78', - 56: '1-96', - 57: '1-29', - }, - first_verse_id: 4706, - last_verse_id: 5104, - verses_count: 399, - }, - { - id: 28, - juz_number: 28, - verse_mapping: { - 58: '1-22', - 59: '1-24', - 60: '1-13', - 61: '1-14', - 62: '1-11', - 63: '1-11', - 64: '1-18', - 65: '1-12', - 66: '1-12', - }, - first_verse_id: 5105, - last_verse_id: 5241, - verses_count: 137, - }, - { - id: 29, - juz_number: 29, - verse_mapping: { - 67: '1-30', - 68: '1-52', - 69: '1-52', - 70: '1-44', - 71: '1-28', - 72: '1-28', - 73: '1-20', - 74: '1-56', - 75: '1-40', - 76: '1-31', - 77: '1-50', - }, - first_verse_id: 5242, - last_verse_id: 5672, - verses_count: 431, - }, - { - id: 30, - juz_number: 30, - verse_mapping: { - 78: '1-40', - 79: '1-46', - 80: '1-42', - 81: '1-29', - 82: '1-19', - 83: '1-36', - 84: '1-25', - 85: '1-22', - 86: '1-17', - 87: '1-19', - 88: '1-26', - 89: '1-30', - 90: '1-20', - 91: '1-15', - 92: '1-21', - 93: '1-11', - 94: '1-8', - 95: '1-8', - 96: '1-19', - 97: '1-5', - 98: '1-8', - 99: '1-8', - 100: '1-11', - 101: '1-11', - 102: '1-8', - 103: '1-3', - 104: '1-9', - 105: '1-5', - 106: '1-4', - 107: '1-7', - 108: '1-3', - 109: '1-6', - 110: '1-3', - 111: '1-5', - 112: '1-4', - 113: '1-5', - 114: '1-6', - }, - first_verse_id: 5673, - last_verse_id: 6236, - verses_count: 564, - }, - ], - }) - ); - }), - - rest.get( - 'https://api.quran.com/api/v4/quran/verses/imlaei', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { - id: 1, - verse_key: '1:1', - text_imlaei: 'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ', - }, - ], - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/resources/translations/:translation_id/info', - (_req, res, ctx) => { - return res(ctx.json({ info: { id: 1, info: null } })); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/quran/verses/uthmani', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { - id: 1, - verse_key: '1:1', - text_uthmani: 'بِسْمِ ٱللَّهِ ٱلرَّحْمَـٰنِ ٱلرَّحِيمِ', - }, - ], - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/resources/tafsirs', - (_req, res, ctx) => { - return res( - ctx.json({ - tafsirs: [ - { - id: 169, - name: 'Tafsir Ibn Kathir', - author_name: 'Hafiz Ibn Kathir', - slug: 'en-tafisr-ibn-kathir', - language_name: 'english', - translated_name: { - name: 'Tafsir Ibn Kathir', - language_name: 'english', - }, - }, - ], - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/quran/tafsirs/:tafsir_id', - (_req, res, ctx) => { - return res( - ctx.json({ - tafsirs: [ - { - resource_id: 169, - text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

This Surah is called

- Al-Fatihah, that is, the Opener of the Book, the Surah with which prayers are begun.', - }, - ], - meta: { - tafsir_name: 'Tafsir Ibn Kathir', - author_name: 'Hafiz Ibn Kathir', - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/resources/recitations/:recitation_id/info', - (_req, res, ctx) => { - return res(ctx.json({ info: { id: 1, info: null } })); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/quran/recitations/:recitation_id', - (_req, res, ctx) => { - return res( - ctx.json({ - audio_files: [ - { verse_key: '1:1', url: 'Alafasy/mp3/001001.mp3' }, - { verse_key: '1:2', url: 'Alafasy/mp3/001002.mp3' }, - { verse_key: '1:3', url: 'Alafasy/mp3/001003.mp3' }, - { verse_key: '1:4', url: 'Alafasy/mp3/001004.mp3' }, - { verse_key: '1:5', url: 'Alafasy/mp3/001005.mp3' }, - { verse_key: '1:6', url: 'Alafasy/mp3/001006.mp3' }, - { verse_key: '1:7', url: 'Alafasy/mp3/001007.mp3' }, - ], - meta: { - reciter_name: 'Mishari Rashid al-`Afasy', - recitation_style: null, - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/resources/chapter_reciters', - (_req, res, ctx) => { - return res( - ctx.json({ - reciters: [ - { - id: 3, - name: 'Abu Bakr al-Shatri', - arabic_name: 'أبو بكر الشاطرى', - relative_path: 'abu_bakr_ash-shaatree/', - format: 'mp3', - files_size: 1258422528, - }, - { - id: 4, - name: 'Sa`ud ash-Shuraym', - arabic_name: 'سعود الشريم', - relative_path: 'sa3ood_al-shuraym/', - format: 'mp3', - files_size: 1258422528, - }, - { - id: 5, - name: 'Mishari Rashid al-`Afasy', - arabic_name: 'مشاري راشد العفاسي', - relative_path: 'mishaari_raashid_al_3afaasee/', - format: 'mp3', - files_size: 1258422528, - }, - ], - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/resources/languages', - (_req, res, ctx) => { - return res( - ctx.json({ - languages: [{ id: -71611860, iso_code: 'amet' }], - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/verses/by_hizb/:hizb_number', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { - id: 1, - verse_number: 1, - page_number: 1, - verse_key: '1:1', - juz_number: 1, - hizb_number: 1, - rub_number: 1, - sajdah_type: null, - sajdah_number: null, - words: [ - { - id: 1, - position: 1, - audio_url: 'wbw/001_001_001.mp3', - char_type_name: 'word', - line_number: 2, - page_number: 1, - code_v1: 'ﭑ', - translation: { - text: 'In (the) name', - language_name: 'english', - }, - transliteration: { text: "bis'mi", language_name: 'english' }, - }, - ], - translations: [ - { - resource_id: 131, - text: 'In the Name of Allah—the Most Compassionate, Most Merciful.', - }, - ], - tafsirs: [ - { - id: 82641, - language_name: 'english', - name: 'Tafsir Ibn Kathir', - text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', - }, - ], - }, - ], - pagination: { - per_page: 1, - current_page: 1, - next_page: 2, - total_pages: 7, - total_records: 7, - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/resources/tafsirs/:tafsir_id/info', - (req, res, ctx) => { - const id = req.params.tafsir_id; - if (!id || !Number.isInteger(Number(id))) - return res( - ctx.status(404), - ctx.json({ status: 404, error: 'Tafsir not found' }) - ); - - return res( - ctx.json({ - info: { - id: +id, - info: '', - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/recitations/:recitation_id/by_rub/:rub_number', - (_req, res, ctx) => { - return res( - ctx.json({ - audio_files: [ - { verse_key: '1:1', url: 'AbdulBaset/Mujawwad/mp3/001001.mp3' }, - { verse_key: '1:2', url: 'AbdulBaset/Mujawwad/mp3/001002.mp3' }, - { verse_key: '1:3', url: 'AbdulBaset/Mujawwad/mp3/001003.mp3' }, - ], - pagination: { - per_page: 10, - current_page: 1, - next_page: 2, - total_pages: 15, - total_records: 148, - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/quran/verses/uthmani_simple', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { - id: 1, - verse_key: '1:1', - text_uthmani_simple: 'بسم الله الرحمن الرحيم', - }, - ], - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/verses/by_juz/:juz_number', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { - id: 1, - verse_number: 1, - page_number: 1, - verse_key: '1:1', - juz_number: 1, - hizb_number: 1, - rub_number: 1, - sajdah_type: null, - sajdah_number: null, - words: [ - { - id: 1, - position: 1, - audio_url: 'wbw/001_001_001.mp3', - char_type_name: 'word', - line_number: 2, - page_number: 1, - code_v1: 'ﭑ', - translation: { - text: 'In (the) name', - language_name: 'english', - }, - transliteration: { text: "bis'mi", language_name: 'english' }, - }, - ], - translations: [ - { - resource_id: 131, - text: 'In the Name of Allah—the Most Compassionate, Most Merciful.', - }, - ], - tafsirs: [ - { - id: 82641, - language_name: 'english', - name: 'Tafsir Ibn Kathir', - text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', - }, - ], - }, - ], - pagination: { - per_page: 1, - current_page: 1, - next_page: 2, - total_pages: 7, - total_records: 7, - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/chapter_recitations/:id', - (_req, res, ctx) => { - return res( - ctx.json({ - audio_files: [ - { - id: 43, - chapter_id: 22, - file_size: 19779712, - format: 'mp3', - total_files: 1, - audio_url: - 'https://download.quranicaudio.com/quran/abdullaah_3awwaad_al-juhaynee//022.mp3', - }, - { - id: 87, - chapter_id: 44, - file_size: 6453376, - format: 'mp3', - total_files: 1, - audio_url: - 'https://download.quranicaudio.com/quran/abdullaah_3awwaad_al-juhaynee//044.mp3', - }, - ], - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/recitations/:recitation_id/by_chapter/:chapter_number', - (_req, res, ctx) => { - return res( - ctx.json({ - audio_files: [ - { verse_key: '1:1', url: 'AbdulBaset/Mujawwad/mp3/001001.mp3' }, - { verse_key: '1:2', url: 'AbdulBaset/Mujawwad/mp3/001002.mp3' }, - { verse_key: '1:3', url: 'AbdulBaset/Mujawwad/mp3/001003.mp3' }, - ], - pagination: { - per_page: 10, - current_page: 1, - next_page: 2, - total_pages: 2, - total_records: 20, - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/recitations/:recitation_id/by_hizb/:hizb_number', - (_req, res, ctx) => { - return res( - ctx.json({ - audio_files: [ - { verse_key: '1:1', url: 'AbdulBaset/Mujawwad/mp3/001001.mp3' }, - { verse_key: '1:2', url: 'AbdulBaset/Mujawwad/mp3/001002.mp3' }, - { verse_key: '1:3', url: 'AbdulBaset/Mujawwad/mp3/001003.mp3' }, - ], - pagination: { - per_page: 10, - current_page: 1, - next_page: 2, - total_pages: 15, - total_records: 148, - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/verses/by_page/:page_number', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { - id: 1, - verse_number: 1, - page_number: 1, - verse_key: '1:1', - juz_number: 1, - hizb_number: 1, - rub_number: 1, - sajdah_type: null, - sajdah_number: null, - words: [ - { - id: 1, - position: 1, - audio_url: 'wbw/001_001_001.mp3', - char_type_name: 'word', - line_number: 2, - page_number: 1, - code_v1: 'ﭑ', - translation: { - text: 'In (the) name', - language_name: 'english', - }, - transliteration: { text: "bis'mi", language_name: 'english' }, - }, - ], - translations: [ - { - resource_id: 131, - text: 'In the Name of Allah—the Most Compassionate, Most Merciful.', - }, - ], - tafsirs: [ - { - id: 82641, - language_name: 'english', - name: 'Tafsir Ibn Kathir', - text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', - }, - ], - }, - ], - pagination: { - per_page: 1, - current_page: 1, - next_page: 2, - total_pages: 7, - total_records: 7, - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/verses/by_key/:verse_key', - (_req, res, ctx) => { - return res( - ctx.json({ - verse: { - id: 1, - verse_number: 1, - page_number: 1, - verse_key: '1:1', - juz_number: 1, - hizb_number: 1, - rub_number: 1, - sajdah_type: null, - sajdah_number: null, - words: [ - { - id: 1, - position: 1, - audio_url: 'wbw/001_001_001.mp3', - char_type_name: 'word', - line_number: 2, - page_number: 1, - code_v1: 'ﭑ', - translation: { - text: 'In (the) name', - language_name: 'english', - }, - transliteration: { text: "bis'mi", language_name: 'english' }, - }, - ], - translations: [ - { - resource_id: 131, - text: 'In the Name of Allah—the Most Compassionate, Most Merciful.', - }, - ], - tafsirs: [ - { - id: 82641, - language_name: 'english', - name: 'Tafsir Ibn Kathir', - text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', - }, - ], - }, - }) - ); - } - ), - - rest.get( - 'https://api.quran.com/api/v4/verses/by_rub/:rub_number', - (_req, res, ctx) => { - return res( - ctx.json({ - verses: [ - { - id: 1, - verse_number: 1, - page_number: 1, - verse_key: '1:1', - juz_number: 1, - hizb_number: 1, - rub_number: 1, - sajdah_type: null, - sajdah_number: null, - words: [ - { - id: 1, - position: 1, - audio_url: 'wbw/001_001_001.mp3', - char_type_name: 'word', - line_number: 2, - page_number: 1, - code_v1: 'ﭑ', - translation: { - text: 'In (the) name', - language_name: 'english', - }, - transliteration: { text: "bis'mi", language_name: 'english' }, - }, - ], - translations: [ - { - resource_id: 131, - text: 'In the Name of Allah—the Most Compassionate, Most Merciful.', - }, - ], - tafsirs: [ - { - id: 82641, - language_name: 'english', - name: 'Tafsir Ibn Kathir', - text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', - }, - ], - }, - ], - pagination: { - per_page: 1, - current_page: 1, - next_page: 2, - total_pages: 7, - total_records: 7, - }, - }) - ); - } - ), - - rest.get('https://api.quran.com/api/v4/chapters/:id', (_req, res, ctx) => { - return res( - ctx.json({ - chapter: { - id: 1, - revelation_place: 'makkah', - revelation_order: 5, - bismillah_pre: false, - name_simple: 'Al-Fatihah', - name_complex: 'Al-Fātiĥah', - name_arabic: 'الفاتحة', - verses_count: 7, - pages: [1, 1], - translated_name: { language_name: 'english', name: 'The Opener' }, - }, - }) - ); - }), -]; diff --git a/mocks/server.ts b/mocks/server.ts deleted file mode 100644 index 304e274..0000000 --- a/mocks/server.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; -import { handlers } from './handlers'; - -export const server = setupServer( - ...handlers, - rest.get('*', (_req, res, ctx) => { - return res(ctx.status(404), ctx.json({ status: 404, error: 'Not found' })); - }) -); diff --git a/package.json b/package.json index 69ccc79..25663ba 100644 --- a/package.json +++ b/package.json @@ -1,81 +1,33 @@ { - "name": "@quranjs/api", - "description": "A library for fetching quran data from the quran.com API.", - "author": "Ahmed Riad (https://ar1.dev)", - "publishConfig": { - "access": "public" - }, - "packageManager": "pnpm@9.12.0", - "version": "1.7.1", - "license": "MIT", - "main": "dist/index.min.js", - "module": "dist/index.min.mjs", - "browser": "dist/index.umd.min.js", - "types": "dist/index.d.ts", - "exports": { - ".": { - "types": "./dist/index.d.ts", - "require": "./dist/index.min.js", - "import": "./dist/index.min.mjs" - }, - "./cdn": "./dist/index.umd.min.js" + "name": "quranjs", + "private": true, + "packageManager": "pnpm@9.15.4", + "engines": { + "node": ">=22.12.0" }, - "files": [ - "dist" - ], "scripts": { - "postversion": "node ./scripts/postversion.mjs", - "start": "tsup --watch", - "build": "tsup", - "test": "vitest run", - "test:dev": "vitest", - "test:coverage": "vitest run --coverage", - "lint": "eslint src/** test/** mocks/**", - "prepare": "husky install", - "size": "size-limit", - "analyze": "size-limit --why" - }, - "dependencies": { - "humps": "^2.0.1" + "build": "turbo run build", + "clean": "git clean -xdf node_modules", + "clean:workspaces": "turbo run clean", + "dev": "turbo watch dev --continue", + "format": "turbo run format --continue -- --cache --cache-location .cache/.prettiercache", + "format:fix": "turbo run format --continue -- --write --cache --cache-location .cache/.prettiercache", + "lint": "turbo run lint --continue --filter=\"./packages/*\" -- --cache --cache-location .cache/.eslintcache", + "test": "turbo run test --continue --filter=\"./packages/*\"", + "lint:fix": "turbo run lint --continue -- --fix --cache --cache-location .cache/.eslintcache", + "lint:ws": "pnpm dlx sherif@latest", + "postinstall": "pnpm lint:ws", + "typecheck": "turbo run typecheck --filter=\"./packages/*\"", + "changeset": "changeset", + "version-packages": "changeset version", + "release": "changeset publish" }, "devDependencies": { - "@size-limit/preset-small-lib": "^7.0.8", - "@swc/core": "^1.10.4", - "@types/humps": "^2.0.1", - "@typescript-eslint/eslint-plugin": "^5.42.0", - "@typescript-eslint/parser": "^5.42.0", - "@vitest/coverage-c8": "^0.24.4", - "cross-fetch": "^3.1.5", - "esbuild-plugin-umd-wrapper": "^3.0.0", - "eslint": "^8.26.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-prettier": "^4.2.1", - "fast-check": "^3.3.0", - "husky": "^7.0.4", - "msw": "^0.39.2", - "prettier": "^2.7.1", - "rollup-plugin-analyzer": "^4.0.0", - "size-limit": "^7.0.8", - "tslib": "^2.3.1", - "tsup": "^6.3.0", - "typescript": "^4.6.2", - "vitest": "^0.24.4" + "@changesets/cli": "^2.29.5", + "@quranjs/prettier-config": "workspace:*", + "prettier": "catalog:", + "turbo": "^2.5.5", + "typescript": "catalog:" }, - "size-limit": [ - { - "path": "dist/index.min.js", - "limit": "15 KB" - }, - { - "path": "dist/index.min.mjs", - "limit": "15 KB" - }, - { - "path": "dist/index.umd.min.js", - "limit": "15 KB" - } - ], - "engines": { - "node": ">=12" - } + "prettier": "@quranjs/prettier-config" } \ No newline at end of file diff --git a/packages/api/eslint.config.js b/packages/api/eslint.config.js new file mode 100644 index 0000000..9b484ff --- /dev/null +++ b/packages/api/eslint.config.js @@ -0,0 +1,9 @@ +import baseConfig from "@quranjs/eslint-config/base"; + +/** @type {import('typescript-eslint').Config} */ +export default [ + { + ignores: ["dist/**"], + }, + ...baseConfig, +]; diff --git a/packages/api/mocks/handlers.ts b/packages/api/mocks/handlers.ts new file mode 100644 index 0000000..e304616 --- /dev/null +++ b/packages/api/mocks/handlers.ts @@ -0,0 +1,1718 @@ +import { http, HttpResponse } from "msw"; + +/** + * Helper function to validate authentication headers + * + * @param request - The incoming request object + * @returns True if authentication headers are valid + * @throws Error if authentication headers are missing + */ +const validateAuth = (request: Request): boolean => { + const authToken = request.headers.get("x-auth-token"); + const clientId = request.headers.get("x-client-id"); + + if (!authToken || !clientId) { + throw new Error("Missing authentication headers"); + } + + return true; +}; + +export const handlers = [ + // OAuth2 token endpoint for authentication + http.post("https://oauth2.quran.foundation/oauth2/token", () => { + return HttpResponse.json({ + access_token: "mock-access-token", + token_type: "Bearer", + expires_in: 3600, + scope: "content", + }); + }), + + http.get( + "https://apis.quran.foundation/content/api/v4/quran/verses/uthmani_tajweed", + () => { + return HttpResponse.json({ + verses: [ + { + id: 1, + verse_key: "1:1", + text_uthmani_tajweed: + "بِسْمِ ٱللَّهِ ٱلرَّحْمَـٰنِ ٱلرَّحِيمِ ١", + }, + ], + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/chapters", + ({ request }) => { + try { + validateAuth(request); + return HttpResponse.json({ + chapters: [ + { + id: 1, + revelation_place: "makkah", + revelation_order: 5, + bismillah_pre: false, + name_simple: "Al-Fatihah", + name_complex: "Al-Fātiĥah", + name_arabic: "الفاتحة", + verses_count: 7, + pages: [1, 1], + translated_name: { + language_name: "english", + name: "The Opener", + }, + }, + ], + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/translations", + ({ request }) => { + try { + validateAuth(request); + return HttpResponse.json({ + translations: [ + { + id: 131, + name: "Dr. Mustafa Khattab, the Clear Quran", + author_name: "Dr. Mustafa Khattab", + slug: "clearquran-with-tafsir", + language_name: "english", + translated_name: { + name: "Dr. Mustafa Khattab", + language_name: "english", + }, + }, + ], + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/search", + ({ request }) => { + try { + validateAuth(request); + return HttpResponse.json({}); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/recitations", + ({ request }) => { + try { + validateAuth(request); + return HttpResponse.json({ + recitations: [ + { + id: 1, + reciter_name: "AbdulBaset AbdulSamad", + style: "Mujawwad", + translated_name: { + name: "AbdulBaset AbdulSamad", + language_name: "english", + }, + }, + ], + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + // Audio endpoints for recitations + http.get( + "https://apis.quran.foundation/content/api/v4/recitations/:reciterId", + ({ request, params }) => { + try { + validateAuth(request); + return HttpResponse.json({ + audioFiles: [ + { + id: 1, + chapter_id: 1, + file_size: 123456, + format: "mp3", + total_files: 114, + recitation_id: params.reciterId, + }, + ], + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/recitations/:reciterId/:chapterId", + ({ request, params }) => { + try { + validateAuth(request); + return HttpResponse.json({ + audioFile: { + id: 1, + chapter_id: params.chapterId, + file_size: 123456, + format: "mp3", + recitation_id: params.reciterId, + }, + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/recitations/:recitationId/by_chapter/:chapterId", + ({ request, params }) => { + try { + validateAuth(request); + return HttpResponse.json({ + audioFiles: [ + { + id: 1, + chapter_id: params.chapterId, + verse_key: "1:1", + file_size: 123456, + format: "mp3", + recitation_id: params.recitationId, + }, + ], + pagination: { + per_page: 50, + current_page: 1, + next_page: null, + total_pages: 1, + total_records: 1, + }, + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/recitations/:recitationId/by_ayah/:key", + ({ request, params }) => { + try { + validateAuth(request); + return HttpResponse.json({ + audioFiles: [ + { + id: 1, + verse_key: params.key, + file_size: 123456, + format: "mp3", + recitation_id: params.recitationId, + }, + ], + pagination: { + per_page: 50, + current_page: 1, + next_page: null, + total_pages: 1, + total_records: 1, + }, + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + // Resource info endpoints + http.get( + "https://apis.quran.foundation/content/api/v4/resources/recitations/:id/info", + ({ request, params }) => { + try { + validateAuth(request); + return HttpResponse.json({ + recitationInfo: { + id: params.id, + reciter_name: "AbdulBaset AbdulSamad", + style: "Mujawwad", + qirat: "Hafs", + }, + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/translations/:id/info", + ({ request, params }) => { + try { + validateAuth(request); + return HttpResponse.json({ + translationInfo: { + id: params.id, + name: "Dr. Mustafa Khattab, the Clear Quran", + author_name: "Dr. Mustafa Khattab", + slug: "clearquran-with-tafsir", + language_name: "english", + }, + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/tafsirs/:id/info", + ({ request, params }) => { + try { + validateAuth(request); + return HttpResponse.json({ + tafsirInfo: { + id: params.id, + name: "Tafsir Ibn Kathir", + author_name: "Ibn Kathir", + slug: "ibn-kathir", + language_name: "arabic", + }, + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + // Additional resource endpoints that were missing + http.get( + "https://apis.quran.foundation/content/api/v4/resources/chapter_infos", + ({ request }) => { + try { + validateAuth(request); + return HttpResponse.json({ + chapterInfos: [ + { + id: 1, + chapter_id: 1, + language_name: "english", + short_text: "Brief info about Al-Fatihah", + source: "Quran.com", + }, + ], + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/chapter_reciters", + ({ request }) => { + try { + validateAuth(request); + return HttpResponse.json({ + reciters: [ + { + id: 1, + reciter_name: "AbdulBaset AbdulSamad", + style: "Mujawwad", + }, + ], + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/recitation_styles", + ({ request }) => { + try { + validateAuth(request); + return HttpResponse.json({ + recitationStyles: { + mujawwad: "Mujawwad", + murattal: "Murattal", + }, + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/verse_media", + ({ request }) => { + try { + validateAuth(request); + return HttpResponse.json({ + verseMedia: { + id: 1, + verse_key: "1:1", + media_type: "image", + url: "https://example.com/verse-media.jpg", + }, + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/quran/verses/code_v2", + () => { + return HttpResponse.json({ + verses: [{ id: 1, verse_key: "1:1", code_v2: " ﱂ ﱃ ﱄ ﱅ", v2_page: 1 }], + }); + }, + ), + + http.get( + "https://apis.quran.foundation/chapter_recitations/:id/:chapter_number", + () => { + return HttpResponse.json({ + audio_file: { + id: 43, + chapter_id: 22, + file_size: 19779712, + format: "mp3", + total_files: 1, + audio_url: + "https://download.quranicaudio.com/quran/abdullaah_3awwaad_al-juhaynee/022.mp3", + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/recitations/:recitation_id/by_ayah/:ayah_key", + () => { + return HttpResponse.json({ + audio_files: [ + { verse_key: "1:1", url: "AbdulBaset/Mujawwad/mp3/001001.mp3" }, + { verse_key: "1:2", url: "AbdulBaset/Mujawwad/mp3/001002.mp3" }, + { verse_key: "1:3", url: "AbdulBaset/Mujawwad/mp3/001003.mp3" }, + ], + pagination: { + per_page: 10, + current_page: 1, + next_page: 2, + total_pages: 15, + total_records: 148, + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/quran/verses/code_v1", + () => { + return HttpResponse.json({ + verses: [{ id: 1, verse_key: "1:1", code_v1: "ﭑ ﭒ ﭓ ﭔ ﭕ", v1_page: 1 }], + }); + }, + ), + + http.get("https://apis.quran.foundation/content/api/v4/verses/random", () => { + return HttpResponse.json({ + verse: { + id: 1, + verse_number: 1, + page_number: 1, + verse_key: "1:1", + juz_number: 1, + hizb_number: 1, + rub_number: 1, + sajdah_type: null, + sajdah_number: null, + words: [ + { + id: 1, + position: 1, + audio_url: "wbw/001_001_001.mp3", + char_type_name: "word", + line_number: 2, + page_number: 1, + code_v1: "ﭑ", + translation: { + text: "In (the) name", + language_name: "english", + }, + transliteration: { text: "bis'mi", language_name: "english" }, + }, + ], + translations: [ + { + resource_id: 131, + text: "In the Name of Allah—the Most Compassionate, Most Merciful.", + }, + ], + tafsirs: [ + { + id: 82641, + language_name: "english", + name: "Tafsir Ibn Kathir", + text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', + }, + ], + }, + }); + }), + + http.get( + "https://apis.quran.foundation/content/api/v4/recitations/:recitation_id/by_juz/:juz_number", + () => { + return HttpResponse.json({ + audio_files: [ + { verse_key: "1:1", url: "AbdulBaset/Mujawwad/mp3/001001.mp3" }, + { verse_key: "1:2", url: "AbdulBaset/Mujawwad/mp3/001002.mp3" }, + { verse_key: "1:3", url: "AbdulBaset/Mujawwad/mp3/001003.mp3" }, + ], + pagination: { + per_page: 10, + current_page: 1, + next_page: 2, + total_pages: 2, + total_records: 20, + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/quran/translations/:translation_id", + () => { + return HttpResponse.json({ + translations: [ + { + resource_id: 131, + text: "In the Name of Allah—the Most Compassionate, Most Merciful.", + }, + ], + meta: { + translation_name: "Dr. Mustafa Khattab, the Clear Quran", + author_name: "Dr. Mustafa Khattab", + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/recitation_styles", + () => { + return HttpResponse.json({ + recitation_styles: { + mujawwad: "Mujawwad is a melodic style of Holy Quran recitation", + murattal: "Murattal is at a slower pace, used for study and practice", + muallim: "Muallim is teaching style recitation of Holy Quran", + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/quran/verses/indopak", + () => { + return HttpResponse.json({ + verses: [ + { + id: 1, + verse_key: "1:1", + text_indopak: "بِسۡمِ اللهِ الرَّحۡم]ٰنِ الرَّحِيۡمِ", + }, + ], + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/recitations/:recitation_id/by_page/:page_number", + () => { + return HttpResponse.json({ + audio_files: [ + { verse_key: "1:1", url: "AbdulBaset/Mujawwad/mp3/001001.mp3" }, + { verse_key: "1:2", url: "AbdulBaset/Mujawwad/mp3/001002.mp3" }, + { verse_key: "1:3", url: "AbdulBaset/Mujawwad/mp3/001003.mp3" }, + ], + pagination: { + per_page: 10, + current_page: 1, + next_page: 2, + total_pages: 15, + total_records: 148, + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/verses/by_chapter/:chapter_number", + () => { + return HttpResponse.json({ + verses: [ + { + id: 1, + verse_number: 1, + page_number: 1, + verse_key: "1:1", + juz_number: 1, + hizb_number: 1, + rub_number: 1, + sajdah_type: null, + sajdah_number: null, + words: [ + { + id: 1, + position: 1, + audio_url: "wbw/001_001_001.mp3", + char_type_name: "word", + line_number: 2, + page_number: 1, + code_v1: "ﭑ", + translation: { + text: "In (the) name", + language_name: "english", + }, + transliteration: { text: "bis'mi", language_name: "english" }, + }, + ], + translations: [ + { + resource_id: 131, + text: "In the Name of Allah—the Most Compassionate, Most Merciful.", + }, + ], + tafsirs: [ + { + id: 82641, + language_name: "english", + name: "Tafsir Ibn Kathir", + text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', + }, + ], + }, + ], + pagination: { + per_page: 1, + current_page: 1, + next_page: 2, + total_pages: 7, + total_records: 7, + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/chapters/:chapter_id/info", + () => { + return HttpResponse.json({ + chapterInfo: { + id: 1, + chapter_id: 1, + language_name: "english", + short_text: + "This Surah is named Al-Fatihah because of its subject-matter. Fatihah is that which opens a subject or a book or any other thing. In other words, Al-Fatihah is a sort of preface.", + source: + "Sayyid Abul Ala Maududi - Tafhim al-Qur'an - The Meaning of the Quran", + text: "

Name

\r\n

This Surah is named Al-Fatihah because of its subject-matter. Fatihah is that which opens a subject or a book or any other thing. In other words, Al-Fatihah is a sort of preface.

\r\n

Period of Revelation

...", + }, + }); + }, + ), + + http.get("https://apis.quran.foundation/chapters/:chapter_id/info", () => { + return HttpResponse.json({ + chapter_info: { + id: 1, + chapter_id: 1, + language_name: "english", + short_text: + "This Surah is named Al-Fatihah because of its subject-matter. Fatihah is that which opens a subject or a book or any other thing. In other words, Al-Fatihah is a sort of preface.", + source: + "Sayyid Abul Ala Maududi - Tafhim al-Qur'an - The Meaning of the Quran", + text: "

Name

\r\n

This Surah is named Al-Fatihah because of its subject-matter. Fatihah is that which opens a subject or a book or any other thing. In other words, Al-Fatihah is a sort of preface.

\r\n

Period of Revelation

...", + }, + }); + }), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/chapter_infos", + () => { + return HttpResponse.json({ + chapter_infos: [ + { + id: 155, + name: "Hamza Roberto Piccardo", + author_name: "Hamza Roberto Piccardo", + slug: "hamza-roberto-piccardo-info", + language_name: "italian", + translated_name: { + name: "Hamza Roberto Piccardo", + language_name: "english", + }, + }, + { + id: 63, + name: "Chapter Info", + author_name: "Sayyid Abul Ala Maududi", + slug: null, + language_name: "malayalam", + translated_name: { + name: "Chapter Info", + language_name: "english", + }, + }, + { + id: 62, + name: "Chapter Info", + author_name: "Sayyid Abul Ala Maududi", + slug: null, + language_name: "tamil", + translated_name: { + name: "Chapter Info", + language_name: "english", + }, + }, + { + id: 61, + name: "Chapter Info", + author_name: "Sayyid Abul Ala Maududi", + slug: null, + language_name: "urdu", + translated_name: { + name: "Chapter Info", + language_name: "english", + }, + }, + ], + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/verse_media", + () => { + return HttpResponse.json({ + verse_media: [ + { + id: 64, + name: "Bayyinah video commentary ", + author_name: "Bayyinah", + slug: "", + language_name: "english", + translated_name: { + name: "Bayyinah video commentary ", + language_name: "english", + }, + }, + ], + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/juzs", + ({ request }) => { + try { + validateAuth(request); + return HttpResponse.json({ + juzs: [ + { + id: 1, + juz_number: 1, + verse_mapping: { + 1: "1-7", + 2: "1-141", + }, + first_verse_id: 1, + last_verse_id: 148, + verses_count: 148, + }, + { + id: 2, + juz_number: 2, + verse_mapping: { + 2: "142-252", + }, + first_verse_id: 149, + last_verse_id: 259, + verses_count: 111, + }, + { + id: 3, + juz_number: 3, + verse_mapping: { + 2: "253-286", + 3: "1-92", + }, + first_verse_id: 260, + last_verse_id: 385, + verses_count: 126, + }, + { + id: 4, + juz_number: 4, + verse_mapping: { + 3: "93-200", + 4: "1-23", + }, + first_verse_id: 386, + last_verse_id: 516, + verses_count: 131, + }, + { + id: 5, + juz_number: 5, + verse_mapping: { + 4: "24-147", + }, + first_verse_id: 517, + last_verse_id: 640, + verses_count: 124, + }, + { + id: 6, + juz_number: 6, + verse_mapping: { + 4: "148-176", + 5: "1-81", + }, + first_verse_id: 641, + last_verse_id: 750, + verses_count: 110, + }, + { + id: 7, + juz_number: 7, + verse_mapping: { + 5: "82-120", + 6: "1-110", + }, + first_verse_id: 751, + last_verse_id: 899, + verses_count: 149, + }, + { + id: 8, + juz_number: 8, + verse_mapping: { + 6: "111-165", + 7: "1-87", + }, + first_verse_id: 900, + last_verse_id: 1041, + verses_count: 142, + }, + { + id: 9, + juz_number: 9, + verse_mapping: { + 7: "88-206", + 8: "1-40", + }, + first_verse_id: 1042, + last_verse_id: 1200, + verses_count: 159, + }, + { + id: 10, + juz_number: 10, + verse_mapping: { + 8: "41-75", + 9: "1-92", + }, + first_verse_id: 1201, + last_verse_id: 1327, + verses_count: 127, + }, + { + id: 11, + juz_number: 11, + verse_mapping: { + 9: "93-129", + 10: "1-109", + 11: "1-5", + }, + first_verse_id: 1328, + last_verse_id: 1478, + verses_count: 151, + }, + { + id: 12, + juz_number: 12, + verse_mapping: { + 11: "6-123", + 12: "1-52", + }, + first_verse_id: 1479, + last_verse_id: 1648, + verses_count: 170, + }, + { + id: 13, + juz_number: 13, + verse_mapping: { + 12: "53-111", + 13: "1-43", + 14: "1-52", + }, + first_verse_id: 1649, + last_verse_id: 1802, + verses_count: 154, + }, + { + id: 14, + juz_number: 14, + verse_mapping: { + 15: "1-99", + 16: "1-128", + }, + first_verse_id: 1803, + last_verse_id: 2029, + verses_count: 227, + }, + { + id: 15, + juz_number: 15, + verse_mapping: { + 17: "1-111", + 18: "1-74", + }, + first_verse_id: 2030, + last_verse_id: 2214, + verses_count: 185, + }, + { + id: 16, + juz_number: 16, + verse_mapping: { + 18: "75-110", + 19: "1-98", + 20: "1-135", + }, + first_verse_id: 2215, + last_verse_id: 2483, + verses_count: 269, + }, + { + id: 17, + juz_number: 17, + verse_mapping: { + 21: "1-112", + 22: "1-78", + }, + first_verse_id: 2484, + last_verse_id: 2673, + verses_count: 190, + }, + { + id: 18, + juz_number: 18, + verse_mapping: { + 23: "1-118", + 24: "1-64", + 25: "1-20", + }, + first_verse_id: 2674, + last_verse_id: 2875, + verses_count: 202, + }, + { + id: 19, + juz_number: 19, + verse_mapping: { + 25: "21-77", + 26: "1-227", + 27: "1-55", + }, + first_verse_id: 2876, + last_verse_id: 3214, + verses_count: 339, + }, + { + id: 20, + juz_number: 20, + verse_mapping: { + 27: "56-93", + 28: "1-88", + 29: "1-45", + }, + first_verse_id: 3215, + last_verse_id: 3385, + verses_count: 171, + }, + { + id: 21, + juz_number: 21, + verse_mapping: { + 29: "46-69", + 30: "1-60", + 31: "1-34", + 32: "1-30", + 33: "1-30", + }, + first_verse_id: 3386, + last_verse_id: 3563, + verses_count: 178, + }, + { + id: 22, + juz_number: 22, + verse_mapping: { + 33: "31-73", + 34: "1-54", + 35: "1-45", + 36: "1-27", + }, + first_verse_id: 3564, + last_verse_id: 3732, + verses_count: 169, + }, + { + id: 23, + juz_number: 23, + verse_mapping: { + 36: "28-83", + 37: "1-182", + 38: "1-88", + 39: "1-31", + }, + first_verse_id: 3733, + last_verse_id: 4089, + verses_count: 357, + }, + { + id: 24, + juz_number: 24, + verse_mapping: { + 39: "32-75", + 40: "1-85", + 41: "1-46", + }, + first_verse_id: 4090, + last_verse_id: 4264, + verses_count: 175, + }, + { + id: 25, + juz_number: 25, + verse_mapping: { + 41: "47-54", + 42: "1-53", + 43: "1-89", + 44: "1-59", + 45: "1-37", + }, + first_verse_id: 4265, + last_verse_id: 4510, + verses_count: 246, + }, + { + id: 26, + juz_number: 26, + verse_mapping: { + 46: "1-35", + 47: "1-38", + 48: "1-29", + 49: "1-18", + 50: "1-45", + 51: "1-30", + }, + first_verse_id: 4511, + last_verse_id: 4705, + verses_count: 195, + }, + { + id: 27, + juz_number: 27, + verse_mapping: { + 51: "31-60", + 52: "1-49", + 53: "1-62", + 54: "1-55", + 55: "1-78", + 56: "1-96", + 57: "1-29", + }, + first_verse_id: 4706, + last_verse_id: 5104, + verses_count: 399, + }, + { + id: 28, + juz_number: 28, + verse_mapping: { + 58: "1-22", + 59: "1-24", + 60: "1-13", + 61: "1-14", + 62: "1-11", + 63: "1-11", + 64: "1-18", + 65: "1-12", + 66: "1-12", + }, + first_verse_id: 5105, + last_verse_id: 5241, + verses_count: 137, + }, + { + id: 29, + juz_number: 29, + verse_mapping: { + 67: "1-30", + 68: "1-52", + 69: "1-52", + 70: "1-44", + 71: "1-28", + 72: "1-28", + 73: "1-20", + 74: "1-56", + 75: "1-40", + 76: "1-31", + 77: "1-50", + }, + first_verse_id: 5242, + last_verse_id: 5672, + verses_count: 431, + }, + { + id: 30, + juz_number: 30, + verse_mapping: { + 78: "1-40", + 79: "1-46", + 80: "1-42", + 81: "1-29", + 82: "1-19", + 83: "1-36", + 84: "1-25", + 85: "1-22", + 86: "1-17", + 87: "1-19", + 88: "1-26", + 89: "1-30", + 90: "1-20", + 91: "1-15", + 92: "1-21", + 93: "1-11", + 94: "1-8", + 95: "1-8", + 96: "1-19", + 97: "1-5", + 98: "1-8", + 99: "1-8", + 100: "1-11", + 101: "1-11", + 102: "1-8", + 103: "1-3", + 104: "1-9", + 105: "1-5", + 106: "1-4", + 107: "1-7", + 108: "1-3", + 109: "1-6", + 110: "1-3", + 111: "1-5", + 112: "1-4", + 113: "1-5", + 114: "1-6", + }, + first_verse_id: 5673, + last_verse_id: 6236, + verses_count: 564, + }, + ], + }); + } catch { + return HttpResponse.text("Unauthorized", { status: 401 }); + } + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/quran/verses/imlaei", + () => { + return HttpResponse.json({ + verses: [ + { + id: 1, + verse_key: "1:1", + text_imlaei: "بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ", + }, + ], + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/translations/:translation_id/info", + () => { + return HttpResponse.json({ info: { id: 1, info: null } }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/quran/verses/uthmani", + () => { + return HttpResponse.json({ + verses: [ + { + id: 1, + verse_key: "1:1", + text_uthmani: "بِسْمِ ٱللَّهِ ٱلرَّحْمَـٰنِ ٱلرَّحِيمِ", + }, + ], + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/tafsirs", + () => { + return HttpResponse.json({ + tafsirs: [ + { + id: 169, + name: "Tafsir Ibn Kathir", + author_name: "Hafiz Ibn Kathir", + slug: "en-tafisr-ibn-kathir", + language_name: "english", + translated_name: { + name: "Tafsir Ibn Kathir", + language_name: "english", + }, + }, + ], + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/quran/tafsirs/:tafsir_id", + () => { + return HttpResponse.json({ + tafsirs: [ + { + resource_id: 169, + text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

This Surah is called

- Al-Fatihah, that is, the Opener of the Book, the Surah with which prayers are begun.', + }, + ], + meta: { + tafsir_name: "Tafsir Ibn Kathir", + author_name: "Hafiz Ibn Kathir", + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/recitations/:recitation_id/info", + () => { + return HttpResponse.json({ info: { id: 1, info: null } }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/quran/recitations/:recitation_id", + () => { + return HttpResponse.json({ + audio_files: [ + { verse_key: "1:1", url: "Alafasy/mp3/001001.mp3" }, + { verse_key: "1:2", url: "Alafasy/mp3/001002.mp3" }, + { verse_key: "1:3", url: "Alafasy/mp3/001003.mp3" }, + { verse_key: "1:4", url: "Alafasy/mp3/001004.mp3" }, + { verse_key: "1:5", url: "Alafasy/mp3/001005.mp3" }, + { verse_key: "1:6", url: "Alafasy/mp3/001006.mp3" }, + { verse_key: "1:7", url: "Alafasy/mp3/001007.mp3" }, + ], + meta: { + reciter_name: "Mishari Rashid al-`Afasy", + recitation_style: null, + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/chapter_reciters", + () => { + return HttpResponse.json({ + reciters: [ + { + id: 3, + name: "Abu Bakr al-Shatri", + arabic_name: "أبو بكر الشاطرى", + relative_path: "abu_bakr_ash-shaatree/", + format: "mp3", + files_size: 1258422528, + }, + { + id: 4, + name: "Sa`ud ash-Shuraym", + arabic_name: "سعود الشريم", + relative_path: "sa3ood_al-shuraym/", + format: "mp3", + files_size: 1258422528, + }, + { + id: 5, + name: "Mishari Rashid al-`Afasy", + arabic_name: "مشاري راشد العفاسي", + relative_path: "mishaari_raashid_al_3afaasee/", + format: "mp3", + files_size: 1258422528, + }, + ], + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/languages", + () => { + return HttpResponse.json({ + languages: [{ id: -71611860, iso_code: "amet" }], + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/verses/by_hizb/:hizb_number", + () => { + return HttpResponse.json({ + verses: [ + { + id: 1, + verse_number: 1, + page_number: 1, + verse_key: "1:1", + juz_number: 1, + hizb_number: 1, + rub_number: 1, + sajdah_type: null, + sajdah_number: null, + words: [ + { + id: 1, + position: 1, + audio_url: "wbw/001_001_001.mp3", + char_type_name: "word", + line_number: 2, + page_number: 1, + code_v1: "ﭑ", + translation: { + text: "In (the) name", + language_name: "english", + }, + transliteration: { text: "bis'mi", language_name: "english" }, + }, + ], + translations: [ + { + resource_id: 131, + text: "In the Name of Allah—the Most Compassionate, Most Merciful.", + }, + ], + tafsirs: [ + { + id: 82641, + language_name: "english", + name: "Tafsir Ibn Kathir", + text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', + }, + ], + }, + ], + pagination: { + per_page: 1, + current_page: 1, + next_page: 2, + total_pages: 7, + total_records: 7, + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/resources/tafsirs/:tafsir_id/info", + ({ params }) => { + const id = params.tafsir_id; + if (!id || !Number.isInteger(Number(id))) + return HttpResponse.json( + { status: 404, error: "Tafsir not found" }, + { status: 404 }, + ); + + return HttpResponse.json({ + info: { + id: +id, + info: "", + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/recitations/:recitation_id/by_rub/:rub_number", + () => { + return HttpResponse.json({ + audio_files: [ + { verse_key: "1:1", url: "AbdulBaset/Mujawwad/mp3/001001.mp3" }, + { verse_key: "1:2", url: "AbdulBaset/Mujawwad/mp3/001002.mp3" }, + { verse_key: "1:3", url: "AbdulBaset/Mujawwad/mp3/001003.mp3" }, + ], + pagination: { + per_page: 10, + current_page: 1, + next_page: 2, + total_pages: 15, + total_records: 148, + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/quran/verses/uthmani_simple", + () => { + return HttpResponse.json({ + verses: [ + { + id: 1, + verse_key: "1:1", + text_uthmani_simple: "بسم الله الرحمن الرحيم", + }, + ], + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/verses/by_juz/:juz_number", + () => { + return HttpResponse.json({ + verses: [ + { + id: 1, + verse_number: 1, + page_number: 1, + verse_key: "1:1", + juz_number: 1, + hizb_number: 1, + rub_number: 1, + sajdah_type: null, + sajdah_number: null, + words: [ + { + id: 1, + position: 1, + audio_url: "wbw/001_001_001.mp3", + char_type_name: "word", + line_number: 2, + page_number: 1, + code_v1: "ﭑ", + translation: { + text: "In (the) name", + language_name: "english", + }, + transliteration: { text: "bis'mi", language_name: "english" }, + }, + ], + translations: [ + { + resource_id: 131, + text: "In the Name of Allah—the Most Compassionate, Most Merciful.", + }, + ], + tafsirs: [ + { + id: 82641, + language_name: "english", + name: "Tafsir Ibn Kathir", + text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', + }, + ], + }, + ], + pagination: { + per_page: 1, + current_page: 1, + next_page: 2, + total_pages: 7, + total_records: 7, + }, + }); + }, + ), + + http.get("https://apis.quran.foundation/chapter_recitations/:id", () => { + return HttpResponse.json({ + audio_files: [ + { + id: 43, + chapter_id: 22, + file_size: 19779712, + format: "mp3", + total_files: 1, + audio_url: + "https://download.quranicaudio.com/quran/abdullaah_3awwaad_al-juhaynee//022.mp3", + }, + { + id: 87, + chapter_id: 44, + file_size: 6453376, + format: "mp3", + total_files: 1, + audio_url: + "https://download.quranicaudio.com/quran/abdullaah_3awwaad_al-juhaynee//044.mp3", + }, + ], + }); + }), + + http.get( + "https://apis.quran.foundation/content/api/v4/recitations/:recitation_id/by_chapter/:chapter_number", + () => { + return HttpResponse.json({ + audio_files: [ + { verse_key: "1:1", url: "AbdulBaset/Mujawwad/mp3/001001.mp3" }, + { verse_key: "1:2", url: "AbdulBaset/Mujawwad/mp3/001002.mp3" }, + { verse_key: "1:3", url: "AbdulBaset/Mujawwad/mp3/001003.mp3" }, + ], + pagination: { + per_page: 10, + current_page: 1, + next_page: 2, + total_pages: 2, + total_records: 20, + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/recitations/:recitation_id/by_hizb/:hizb_number", + () => { + return HttpResponse.json({ + audio_files: [ + { verse_key: "1:1", url: "AbdulBaset/Mujawwad/mp3/001001.mp3" }, + { verse_key: "1:2", url: "AbdulBaset/Mujawwad/mp3/001002.mp3" }, + { verse_key: "1:3", url: "AbdulBaset/Mujawwad/mp3/001003.mp3" }, + ], + pagination: { + per_page: 10, + current_page: 1, + next_page: 2, + total_pages: 15, + total_records: 148, + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/verses/by_page/:page_number", + () => { + return HttpResponse.json({ + verses: [ + { + id: 1, + verse_number: 1, + page_number: 1, + verse_key: "1:1", + juz_number: 1, + hizb_number: 1, + rub_number: 1, + sajdah_type: null, + sajdah_number: null, + words: [ + { + id: 1, + position: 1, + audio_url: "wbw/001_001_001.mp3", + char_type_name: "word", + line_number: 2, + page_number: 1, + code_v1: "ﭑ", + translation: { + text: "In (the) name", + language_name: "english", + }, + transliteration: { text: "bis'mi", language_name: "english" }, + }, + ], + translations: [ + { + resource_id: 131, + text: "In the Name of Allah—the Most Compassionate, Most Merciful.", + }, + ], + tafsirs: [ + { + id: 82641, + language_name: "english", + name: "Tafsir Ibn Kathir", + text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', + }, + ], + }, + ], + pagination: { + per_page: 1, + current_page: 1, + next_page: 2, + total_pages: 7, + total_records: 7, + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/verses/by_key/:verse_key", + () => { + return HttpResponse.json({ + verse: { + id: 1, + verse_number: 1, + page_number: 1, + verse_key: "1:1", + juz_number: 1, + hizb_number: 1, + rub_number: 1, + sajdah_type: null, + sajdah_number: null, + words: [ + { + id: 1, + position: 1, + audio_url: "wbw/001_001_001.mp3", + char_type_name: "word", + line_number: 2, + page_number: 1, + code_v1: "ﭑ", + translation: { + text: "In (the) name", + language_name: "english", + }, + transliteration: { text: "bis'mi", language_name: "english" }, + }, + ], + translations: [ + { + resource_id: 131, + text: "In the Name of Allah—the Most Compassionate, Most Merciful.", + }, + ], + tafsirs: [ + { + id: 82641, + language_name: "english", + name: "Tafsir Ibn Kathir", + text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', + }, + ], + }, + }); + }, + ), + + http.get( + "https://apis.quran.foundation/content/api/v4/verses/by_rub/:rub_number", + () => { + return HttpResponse.json({ + verses: [ + { + id: 1, + verse_number: 1, + page_number: 1, + verse_key: "1:1", + juz_number: 1, + hizb_number: 1, + rub_number: 1, + sajdah_type: null, + sajdah_number: null, + words: [ + { + id: 1, + position: 1, + audio_url: "wbw/001_001_001.mp3", + char_type_name: "word", + line_number: 2, + page_number: 1, + code_v1: "ﭑ", + translation: { + text: "In (the) name", + language_name: "english", + }, + transliteration: { text: "bis'mi", language_name: "english" }, + }, + ], + translations: [ + { + resource_id: 131, + text: "In the Name of Allah—the Most Compassionate, Most Merciful.", + }, + ], + tafsirs: [ + { + id: 82641, + language_name: "english", + name: "Tafsir Ibn Kathir", + text: '

Which was revealed in Makkah

The Meaning of Al-Fatihah and its Various Names

', + }, + ], + }, + ], + pagination: { + per_page: 1, + current_page: 1, + next_page: 2, + total_pages: 7, + total_records: 7, + }, + }); + }, + ), + + http.get("https://apis.quran.foundation/content/api/v4/chapters/:id", () => { + return HttpResponse.json({ + chapter: { + id: 1, + revelation_place: "makkah", + revelation_order: 5, + bismillah_pre: false, + name_simple: "Al-Fatihah", + name_complex: "Al-Fātiĥah", + name_arabic: "الفاتحة", + verses_count: 7, + pages: [1, 1], + translated_name: { language_name: "english", name: "The Opener" }, + }, + }); + }), +]; diff --git a/packages/api/mocks/server.ts b/packages/api/mocks/server.ts new file mode 100644 index 0000000..9ec1bed --- /dev/null +++ b/packages/api/mocks/server.ts @@ -0,0 +1,14 @@ +import { http, HttpResponse } from "msw"; +import { setupServer } from "msw/node"; + +import { handlers } from "./handlers"; + +export const server = setupServer( + ...handlers, + http.get("*", () => { + return HttpResponse.json( + { status: 404, error: "Not found" }, + { status: 404 }, + ); + }), +); diff --git a/packages/api/package.json b/packages/api/package.json new file mode 100644 index 0000000..0a0b49d --- /dev/null +++ b/packages/api/package.json @@ -0,0 +1,81 @@ +{ + "name": "@quranjs/api", + "description": "A library for fetching quran data from the quran.com API.", + "author": "Ahmed Riad (https://ar1.dev)", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/quran/api-js", + "directory": "packages/api" + }, + "publishConfig": { + "access": "public" + }, + "version": "1.7.1", + "main": "dist/index.min.js", + "module": "dist/index.min.mjs", + "browser": "dist/index.umd.min.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.min.js", + "import": "./dist/index.min.mjs" + }, + "./cdn": "./dist/index.umd.min.js" + }, + "files": [ + "dist", + "package.json", + "LICENSE", + "README.md" + ], + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "test": "vitest run", + "test:dev": "vitest", + "test:coverage": "vitest run --coverage", + "lint": "eslint \"src/**/*.ts*\" \"test/**/*.ts*\" \"mocks/**/*.ts*\"", + "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist", + "size": "size-limit", + "analyze": "size-limit --why" + }, + "dependencies": { + "humps": "^2.0.1" + }, + "devDependencies": { + "@quranjs/eslint-config": "workspace:*", + "@quranjs/prettier-config": "workspace:*", + "@quranjs/tsconfig": "workspace:*", + "@size-limit/preset-small-lib": "^7.0.8", + "@swc/core": "^1.10.4", + "@types/humps": "^2.0.1", + "@types/node": "^24.2.0", + "@vitest/coverage-v8": "^3.2.4", + "cross-fetch": "^3.1.5", + "eslint": "catalog:", + "fast-check": "^3.3.0", + "msw": "^2.11.5", + "prettier": "catalog:", + "rollup-plugin-analyzer": "^4.0.0", + "size-limit": "^7.0.8", + "tsup": "^8.5.0", + "typescript": "catalog:", + "vitest": "^3.2.4" + }, + "prettier": "@quranjs/prettier-config", + "size-limit": [ + { + "path": "dist/index.min.js", + "limit": "15 KB" + }, + { + "path": "dist/index.min.mjs", + "limit": "15 KB" + } + ], + "engines": { + "node": ">=18" + } +} \ No newline at end of file diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts new file mode 100644 index 0000000..b17d194 --- /dev/null +++ b/packages/api/src/index.ts @@ -0,0 +1,4 @@ +export { QuranClient } from "./sdk/client"; + +export * from "./types"; +export * from "./utils"; diff --git a/packages/api/src/lib/retry.ts b/packages/api/src/lib/retry.ts new file mode 100644 index 0000000..5692942 --- /dev/null +++ b/packages/api/src/lib/retry.ts @@ -0,0 +1,24 @@ +export const retry = async ( + fn: () => Promise, + options: { retries: number } = { retries: 3 }, +): Promise => { + let lastError: Error; + + for (let i = 0; i <= options.retries; i++) { + try { + return await fn(); + } catch (error) { + lastError = error as Error; + if (i === options.retries) { + throw lastError; + } + + // Simple exponential backoff + await new Promise((resolve) => + setTimeout(resolve, Math.pow(2, i) * 1000), + ); + } + } + + throw lastError!; +}; diff --git a/packages/api/src/lib/url.ts b/packages/api/src/lib/url.ts new file mode 100644 index 0000000..50e1ddf --- /dev/null +++ b/packages/api/src/lib/url.ts @@ -0,0 +1,44 @@ +import type { ApiParams } from "@/types"; +import humps from "humps"; + +const { decamelize, decamelizeKeys } = humps; + +export const removeBeginningSlash = (url: string) => { + return url.startsWith("/") ? url.slice(1) : url; +}; + +const fieldsKey = ["wordFields", "translationFields", "fields"]; + +export const paramsToString = (params?: ApiParams): string => { + if (!params) return ""; + + const paramsWithDecamelizedKeys = decamelizeKeys(params) as ApiParams; + const paramsString = new URLSearchParams(); + + for (const [key, value] of Object.entries(paramsWithDecamelizedKeys)) { + if (value === undefined) continue; + + if (typeof value === "string") { + paramsString.set(key, value); + } else if (typeof value === "number") { + paramsString.set(key, value.toString()); + } else if (typeof value === "boolean") { + paramsString.set(key, value.toString()); + } else if (Array.isArray(value)) { + paramsString.set(key, value.join(",")); + } + + // fields is a special case, it's an object with boolean values + if (fieldsKey.includes(key)) { + const fields = Object.entries(value) + .filter(([, value]) => value) + .map(([key]) => decamelize(key)); + if (fields.length > 0) { + paramsString.set(key, fields.join(",")); + } + } + } + + if (paramsString.size === 0) return ""; + return `?${paramsString.toString()}`; +}; diff --git a/packages/api/src/sdk/audio.ts b/packages/api/src/sdk/audio.ts new file mode 100644 index 0000000..cee35c0 --- /dev/null +++ b/packages/api/src/sdk/audio.ts @@ -0,0 +1,114 @@ +import type { + BaseApiParams, + ChapterId, + ChapterRecitation, + Pagination, + VerseKey, + VerseRecitation, + VerseRecitationField, +} from "@/types"; +import { isValidChapterId, isValidVerseKey } from "@/utils"; + +import type { QuranFetcher } from "./fetcher"; + +type GetChapterRecitationOptions = BaseApiParams; + +type GetVerseRecitationOptions = BaseApiParams & { + fields?: Partial>; +}; + +/** + * Audio API methods + */ +export class QuranAudio { + constructor(private fetcher: QuranFetcher) {} + + /** + * Get all chapter recitations for specific reciter + * @param {string} reciterId + * @param {GetChapterRecitationOptions} options + * @example + * client.audio.findAllChapterRecitations('2') + */ + async findAllChapterRecitations( + reciterId: string, + options?: GetChapterRecitationOptions, + ): Promise { + const { audioFiles } = await this.fetcher.fetch<{ + audioFiles: ChapterRecitation[]; + }>(`/content/api/v4/recitations/${reciterId}`, options); + + return audioFiles; + } + + /** + * Get a specific chapter recitation by reciter and chapter + * @param {string} reciterId + * @param {ChapterId} chapterId + * @param {GetChapterRecitationOptions} options + * @example + * client.audio.findChapterRecitationById('2', '1') + */ + async findChapterRecitationById( + reciterId: string, + chapterId: ChapterId, + options?: GetChapterRecitationOptions, + ): Promise { + if (!isValidChapterId(chapterId)) throw new Error("Invalid chapter id"); + + const { audioFile } = await this.fetcher.fetch<{ + audioFile: ChapterRecitation; + }>(`/content/api/v4/recitations/${reciterId}/${chapterId}`, options); + + return audioFile; + } + + /** + * Get verse recitations by chapter + * @param {ChapterId} chapterId + * @param {string} recitationId + * @param {GetVerseRecitationOptions} options + * @example + * client.audio.findVerseRecitationsByChapter('1', '2') + */ + async findVerseRecitationsByChapter( + chapterId: ChapterId, + recitationId: string, + options?: GetVerseRecitationOptions, + ): Promise<{ audioFiles: VerseRecitation[]; pagination: Pagination }> { + if (!isValidChapterId(chapterId)) throw new Error("Invalid chapter id"); + + const data = await this.fetcher.fetch<{ + audioFiles: VerseRecitation[]; + pagination: Pagination; + }>( + `/content/api/v4/recitations/${recitationId}/by_chapter/${chapterId}`, + options, + ); + + return data; + } + + /** + * Get verse recitations by verse key + * @param {VerseKey} key + * @param {string} recitationId + * @param {GetVerseRecitationOptions} options + * @example + * client.audio.findVerseRecitationsByKey('1:1', '2') + */ + async findVerseRecitationsByKey( + key: VerseKey, + recitationId: string, + options?: GetVerseRecitationOptions, + ): Promise<{ audioFiles: VerseRecitation[]; pagination: Pagination }> { + if (!isValidVerseKey(key)) throw new Error("Invalid verse key"); + + const data = await this.fetcher.fetch<{ + audioFiles: VerseRecitation[]; + pagination: Pagination; + }>(`/content/api/v4/recitations/${recitationId}/by_ayah/${key}`, options); + + return data; + } +} diff --git a/packages/api/src/sdk/chapters.ts b/packages/api/src/sdk/chapters.ts new file mode 100644 index 0000000..fa966c7 --- /dev/null +++ b/packages/api/src/sdk/chapters.ts @@ -0,0 +1,71 @@ +import type { BaseApiParams, Chapter, ChapterId, ChapterInfo } from "@/types"; +import { isValidChapterId } from "@/utils"; + +import type { QuranFetcher } from "./fetcher"; + +type GetChapterOptions = BaseApiParams; + +/** + * Chapters API methods + */ +export class QuranChapters { + constructor(private fetcher: QuranFetcher) {} + + /** + * Get all chapters. + * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-chapters + * @param {GetChapterOptions} options + * @example + * client.chapters.findAll() + */ + async findAll(options?: GetChapterOptions): Promise { + const { chapters } = await this.fetcher.fetch<{ chapters: Chapter[] }>( + "/content/api/v4/chapters", + options, + ); + + return chapters; + } + + /** + * Get chapter by id. + * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/get-chapter + * @param {ChapterId} id chapter id, minimum 1, maximum 114 + * @param {GetChapterOptions} options + * @example + * client.chapters.findById('1') + * client.chapters.findById('114') + */ + async findById(id: ChapterId, options?: GetChapterOptions): Promise { + if (!isValidChapterId(id)) throw new Error("Invalid chapter id"); + + const { chapter } = await this.fetcher.fetch<{ chapter: Chapter }>( + `/content/api/v4/chapters/${id}`, + options, + ); + + return chapter; + } + + /** + * Get chapter info by id. + * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/get-chapter-info + * @param {ChapterId} id chapter id, minimum 1, maximum 114 + * @param {GetChapterOptions} options + * @example + * client.chapters.findInfoById('1') + * client.chapters.findInfoById('114') + */ + async findInfoById( + id: ChapterId, + options?: GetChapterOptions, + ): Promise { + if (!isValidChapterId(id)) throw new Error("Invalid chapter id"); + + const { chapterInfo } = await this.fetcher.fetch<{ + chapterInfo: ChapterInfo; + }>(`/content/api/v4/chapters/${id}/info`, options); + + return chapterInfo; + } +} diff --git a/packages/api/src/sdk/client.ts b/packages/api/src/sdk/client.ts new file mode 100644 index 0000000..52e1653 --- /dev/null +++ b/packages/api/src/sdk/client.ts @@ -0,0 +1,84 @@ +import type { QuranClientConfig } from "@/types"; +import { Language } from "@/types"; + +import { QuranAudio } from "./audio"; +import { QuranChapters } from "./chapters"; +import { QuranFetcher } from "./fetcher"; +import { QuranJuzs } from "./juzs"; +import { QuranResources } from "./resources"; +import { QuranSearch } from "./search"; +import { QuranVerses } from "./verses"; + +/** + * Main Quran API client + */ +export class QuranClient { + private config: Required< + Pick + > & + Omit; + private fetcher: QuranFetcher; + + public readonly chapters: QuranChapters; + public readonly verses: QuranVerses; + public readonly juzs: QuranJuzs; + public readonly audio: QuranAudio; + public readonly resources: QuranResources; + public readonly search: QuranSearch; + + constructor(config: QuranClientConfig) { + // Resolve configuration with defaults + this.config = { + contentBaseUrl: "https://apis.quran.foundation", + authBaseUrl: "https://oauth2.quran.foundation", + ...config, + defaults: { + language: Language.ARABIC, + ...config.defaults, + }, + }; + + // Initialize the fetcher + this.fetcher = new QuranFetcher(this.config); + this.fetcher.getFetch(); // validate fetch function is available + + // Initialize all API modules with the fetcher only + this.chapters = new QuranChapters(this.fetcher); + this.verses = new QuranVerses(this.fetcher); + this.juzs = new QuranJuzs(this.fetcher); + this.audio = new QuranAudio(this.fetcher); + this.resources = new QuranResources(this.fetcher); + this.search = new QuranSearch(this.fetcher); + } + + /** + * Get the current configuration + */ + public getConfig(): QuranClientConfig { + return { ...this.config }; + } + + /** + * Update the configuration + */ + public updateConfig(newConfig: Partial): void { + this.config = { + ...this.config, + ...newConfig, + defaults: { + ...this.config.defaults, + ...newConfig.defaults, + }, + }; + + // Update the fetcher with new config + this.fetcher.updateConfig(this.config); + } + + /** + * Clear cached authentication token + */ + public clearCachedToken(): void { + this.fetcher.clearCachedToken(); + } +} diff --git a/packages/api/src/sdk/fetcher.ts b/packages/api/src/sdk/fetcher.ts new file mode 100644 index 0000000..dc22d77 --- /dev/null +++ b/packages/api/src/sdk/fetcher.ts @@ -0,0 +1,140 @@ +import type { + ApiParams, + CachedToken, + CustomFetcher, + QuranClientConfig, + TokenResponse, +} from "@/types"; +import { retry } from "@/lib/retry"; +import { paramsToString, removeBeginningSlash } from "@/lib/url"; +import humps from "humps"; + +const { camelizeKeys } = humps; + +type Config = Required< + Pick +> & + Omit; + +/** + * Handles HTTP requests with authentication for the Quran API + */ +export class QuranFetcher { + private cachedToken: CachedToken | null = null; + + constructor(private config: Config) {} + + /** + * Update the configuration + */ + updateConfig(config: Config): void { + this.config = config; + } + + public getFetch(): CustomFetcher { + const { fetch: fetchFn } = this.config; + const doFetch = fetchFn ?? globalThis.fetch; + + if (typeof doFetch !== "function") { + throw new Error( + "No fetch function available. Please provide a fetch implementation or ensure global fetch is available.", + ); + } + + return doFetch; + } + + private doFetch(...args: Parameters) { + const runFetch = this.getFetch(); + return runFetch(...args); + } + + /** + * Get access token for API authentication + */ + private async getAccessToken(): Promise { + // add 30 seconds to the expiration time to account for clock skew + if (this.cachedToken && this.cachedToken.expiresAt > Date.now() + 30_000) { + return this.cachedToken.value; // still fresh + } + + const { clientId, clientSecret, authBaseUrl } = this.config; + + const auth = btoa(`${clientId}:${clientSecret}`); + + const body = new URLSearchParams({ + grant_type: "client_credentials", + scope: "content", + }).toString(); + + const res = await retry( + () => + this.doFetch(`${authBaseUrl}/oauth2/token`, { + method: "POST", + headers: { + Authorization: `Basic ${auth}`, + "Content-Type": "application/x-www-form-urlencoded", + Accept: "application/json", + }, + body, + }), + { retries: 3 }, + ); + + if (!res.ok) { + throw new Error(`Token request failed: ${res.statusText}`); + } + + const json = (await res.json()) as TokenResponse; + + // Calculate expiration time (current time + expires_in seconds - converted to milliseconds) + const expiresAt = Date.now() + json.expires_in * 1000; + + this.cachedToken = { + value: json.access_token, + expiresAt, + }; + + return this.cachedToken.value; + } + + /** + * Clear cached token (useful for testing or forcing re-authentication) + */ + clearCachedToken(): void { + this.cachedToken = null; + } + + /** + * Make URL with base URL and query parameters + */ + private makeUrl(url: string, params?: ApiParams): string { + const { contentBaseUrl } = this.config; + return `${contentBaseUrl}/${removeBeginningSlash(url)}${paramsToString(params)}`; + } + + /** + * Make authenticated HTTP request + */ + async fetch(url: string, params?: ApiParams): Promise { + const { clientId, defaults } = this.config; + + const token = await this.getAccessToken(); + const fullUrl = this.makeUrl(url, { ...defaults, ...params }); + + const res = await this.doFetch(fullUrl, { + headers: { + "x-auth-token": token, + "x-client-id": clientId, + "Content-Type": "application/json", + }, + }); + + if (!res.ok || res.status >= 400) { + throw new Error(`${res.status} ${res.statusText}`); + } + + const json = await res.json(); + return camelizeKeys(json as object) as T; + } +} diff --git a/packages/api/src/sdk/juzs.ts b/packages/api/src/sdk/juzs.ts new file mode 100644 index 0000000..0e4ee9c --- /dev/null +++ b/packages/api/src/sdk/juzs.ts @@ -0,0 +1,23 @@ +import type { Juz } from "@/types"; + +import type { QuranFetcher } from "./fetcher"; + +/** + * Juzs API methods + */ +export class QuranJuzs { + constructor(private fetcher: QuranFetcher) {} + + /** + * Get All Juzs + * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/juzs + * @example + * client.juzs.findAll() + */ + async findAll(): Promise { + const { juzs } = await this.fetcher.fetch<{ juzs: Juz[] }>( + "/content/api/v4/juzs", + ); + return juzs; + } +} diff --git a/packages/api/src/sdk/resources.ts b/packages/api/src/sdk/resources.ts new file mode 100644 index 0000000..49cd06b --- /dev/null +++ b/packages/api/src/sdk/resources.ts @@ -0,0 +1,207 @@ +import type { + BaseApiParams, + ChapterInfoResource, + ChapterReciterResource, + LanguageResource, + RecitationInfoResource, + RecitationResource, + RecitationStylesResource, + TafsirInfoResource, + TafsirResource, + TranslationInfoResource, + TranslationResource, + VerseMediaResource, +} from "@/types"; + +import type { QuranFetcher } from "./fetcher"; + +type GetResourceOptions = BaseApiParams; + +/** + * Resources API methods + */ +export class QuranResources { + constructor(private fetcher: QuranFetcher) {} + + /** + * Get all recitations. + * @param {GetResourceOptions} options + * @example + * client.resources.findAllRecitations() + */ + async findAllRecitations( + options?: GetResourceOptions, + ): Promise { + const { recitations } = await this.fetcher.fetch<{ + recitations: RecitationResource[]; + }>("/content/api/v4/resources/recitations", options); + + return recitations; + } + + /** + * Get all translations. + * @param {GetResourceOptions} options + * @example + * client.resources.findAllTranslations() + */ + async findAllTranslations( + options?: GetResourceOptions, + ): Promise { + const { translations } = await this.fetcher.fetch<{ + translations: TranslationResource[]; + }>("/content/api/v4/resources/translations", options); + + return translations; + } + + /** + * Get all tafsirs. + * @param {GetResourceOptions} options + * @example + * client.resources.findAllTafsirs() + */ + async findAllTafsirs( + options?: GetResourceOptions, + ): Promise { + const { tafsirs } = await this.fetcher.fetch<{ + tafsirs: TafsirResource[]; + }>("/content/api/v4/resources/tafsirs", options); + + return tafsirs; + } + + /** + * Get all languages. + * @param {GetResourceOptions} options + * @example + * client.resources.findAllLanguages() + */ + async findAllLanguages( + options?: GetResourceOptions, + ): Promise { + const { languages } = await this.fetcher.fetch<{ + languages: LanguageResource[]; + }>("/content/api/v4/resources/languages", options); + + return languages; + } + + /** + * Get recitation info by id. + * @param {string} id recitation id + * @param {GetResourceOptions} options + * @example + * client.resources.findRecitationInfo('1') + */ + async findRecitationInfo( + id: string, + options?: GetResourceOptions, + ): Promise { + const { recitationInfo } = await this.fetcher.fetch<{ + recitationInfo: RecitationInfoResource; + }>(`/content/api/v4/resources/recitations/${id}/info`, options); + + return recitationInfo; + } + + /** + * Get translation info by id. + * @param {string} id translation id + * @param {GetResourceOptions} options + * @example + * client.resources.findTranslationInfo('131') + */ + async findTranslationInfo( + id: string, + options?: GetResourceOptions, + ): Promise { + const { translationInfo } = await this.fetcher.fetch<{ + translationInfo: TranslationInfoResource; + }>(`/content/api/v4/resources/translations/${id}/info`, options); + + return translationInfo; + } + + /** + * Get tafsir info by id. + * @param {string} id tafsir id + * @param {GetResourceOptions} options + * @example + * client.resources.findTafsirInfo('171') + */ + async findTafsirInfo( + id: string, + options?: GetResourceOptions, + ): Promise { + const { tafsirInfo } = await this.fetcher.fetch<{ + tafsirInfo: TafsirInfoResource; + }>(`/content/api/v4/resources/tafsirs/${id}/info`, options); + + return tafsirInfo; + } + + /** + * Get all chapter infos. + * @param {GetResourceOptions} options + * @example + * client.resources.findAllChapterInfos() + */ + async findAllChapterInfos( + options?: GetResourceOptions, + ): Promise { + const { chapterInfos } = await this.fetcher.fetch<{ + chapterInfos: ChapterInfoResource[]; + }>("/content/api/v4/resources/chapter_infos", options); + + return chapterInfos; + } + + /** + * Get all chapter reciters. + * @param {GetResourceOptions} options + * @example + * client.resources.findAllChapterReciters() + */ + async findAllChapterReciters( + options?: GetResourceOptions, + ): Promise { + const { reciters } = await this.fetcher.fetch<{ + reciters: ChapterReciterResource[]; + }>("/content/api/v4/resources/chapter_reciters", options); + + return reciters; + } + + /** + * Get all recitation styles. + * @param {GetResourceOptions} options + * @example + * client.resources.findAllRecitationStyles() + */ + async findAllRecitationStyles( + options?: GetResourceOptions, + ): Promise { + const { recitationStyles } = await this.fetcher.fetch<{ + recitationStyles: RecitationStylesResource; + }>("/content/api/v4/resources/recitation_styles", options); + + return recitationStyles; + } + + /** + * Get verse media. + * @param {GetResourceOptions} options + * @example + * client.resources.findVerseMedia() + */ + async findVerseMedia( + options?: GetResourceOptions, + ): Promise { + const { verseMedia } = await this.fetcher.fetch<{ + verseMedia: VerseMediaResource; + }>("/content/api/v4/resources/verse_media", options); + + return verseMedia; + } +} diff --git a/packages/api/src/sdk/search.ts b/packages/api/src/sdk/search.ts new file mode 100644 index 0000000..89d0bea --- /dev/null +++ b/packages/api/src/sdk/search.ts @@ -0,0 +1,39 @@ +import type { SearchParams, SearchResponse } from "@/types"; + +import type { QuranFetcher } from "./fetcher"; + +type SearchOptions = SearchParams; + +/** + * Search API methods + */ +export class QuranSearch { + constructor(private fetcher: QuranFetcher) {} + + /** + * Search + * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/search + * @param {string} q search query + * @param {SearchOptions} options + * @example + * client.search.search('نور') + * client.search.search('نور', { language: Language.ENGLISH }) + * client.search.search('نور', { language: Language.ENGLISH, size: 10 }) + * client.search.search('نور', { language: Language.ENGLISH, page: 2 }) + */ + async search( + q: string, + options?: SearchOptions, + ): Promise { + const { search } = await this.fetcher.fetch( + "/content/api/v4/search", + { + q, + size: 30, // search-specific default + ...options, + }, + ); + + return search; + } +} diff --git a/packages/api/src/sdk/verses.ts b/packages/api/src/sdk/verses.ts new file mode 100644 index 0000000..4d030b9 --- /dev/null +++ b/packages/api/src/sdk/verses.ts @@ -0,0 +1,196 @@ +import type { + BaseApiParams, + ChapterId, + HizbNumber, + JuzNumber, + PageNumber, + PaginationParams, + RubNumber, + TranslationField, + Verse, + VerseField, + VerseKey, + WordField, +} from "@/types"; +import { + isValidChapterId, + isValidHizb, + isValidJuz, + isValidQuranPage, + isValidRub, + isValidVerseKey, +} from "@/utils"; + +import type { QuranFetcher } from "./fetcher"; + +type GetVerseOptions = BaseApiParams & + PaginationParams & { + reciter?: string | number; + words?: boolean; + translations?: string[] | number[]; + tafsirs?: string[] | number[]; + wordFields?: Partial>; + translationFields?: Partial>; + fields?: Partial>; + }; + +/** + * Verses API methods + */ +export class QuranVerses { + constructor(private fetcher: QuranFetcher) {} + + /** + * Get a specific verse by its key. + * @param {VerseKey} key verse key in format "chapter:verse" (e.g., "1:1") + * @param {GetVerseOptions} options + * @example + * client.verses.findByKey('1:1') + * client.verses.findByKey('2:255') + */ + async findByKey(key: VerseKey, options?: GetVerseOptions): Promise { + if (!isValidVerseKey(key)) throw new Error("Invalid verse key"); + + const { verse } = await this.fetcher.fetch<{ verse: Verse }>( + `/content/api/v4/verses/by_key/${key}`, + { + words: false, // verses-specific default + ...options, + }, + ); + + return verse; + } + + /** + * Get verses by chapter. + * @param {ChapterId} id chapter id, minimum 1, maximum 114 + * @param {GetVerseOptions} options + * @example + * client.verses.findByChapter('1') + */ + async findByChapter( + id: ChapterId, + options?: GetVerseOptions, + ): Promise { + if (!isValidChapterId(id)) throw new Error("Invalid chapter id"); + + const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>( + `/content/api/v4/verses/by_chapter/${id}`, + { + words: false, // verses-specific default + ...options, + }, + ); + + return verses; + } + + /** + * Get verses by page number. + * @param {PageNumber} page page number + * @param {GetVerseOptions} options + * @example + * client.verses.findByPage('1') + */ + async findByPage( + page: PageNumber, + options?: GetVerseOptions, + ): Promise { + if (!isValidQuranPage(page)) throw new Error("Invalid page number"); + + const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>( + `/content/api/v4/verses/by_page/${page}`, + { + words: false, // verses-specific default + ...options, + }, + ); + + return verses; + } + + /** + * Get verses by juz number. + * @param {JuzNumber} juz juz number + * @param {GetVerseOptions} options + * @example + * client.verses.findByJuz('1') + */ + async findByJuz(juz: JuzNumber, options?: GetVerseOptions): Promise { + if (!isValidJuz(juz)) throw new Error("Invalid juz"); + + const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>( + `/content/api/v4/verses/by_juz/${juz}`, + { + words: false, // verses-specific default + ...options, + }, + ); + + return verses; + } + + /** + * Get verses by hizb number. + * @param {HizbNumber} hizb hizb number + * @param {GetVerseOptions} options + * @example + * client.verses.findByHizb('1') + */ + async findByHizb( + hizb: HizbNumber, + options?: GetVerseOptions, + ): Promise { + if (!isValidHizb(hizb)) throw new Error("Invalid hizb"); + + const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>( + `/content/api/v4/verses/by_hizb/${hizb}`, + { + words: false, // verses-specific default + ...options, + }, + ); + + return verses; + } + + /** + * Get verses by rub number. + * @param {RubNumber} rub rub number + * @param {GetVerseOptions} options + * @example + * client.verses.findByRub('1') + */ + async findByRub(rub: RubNumber, options?: GetVerseOptions): Promise { + if (!isValidRub(rub)) throw new Error("Invalid rub"); + + const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>( + `/content/api/v4/verses/by_rub/${rub}`, + { + words: false, // verses-specific default + ...options, + }, + ); + + return verses; + } + + /** + * Get a random verse. + * @param {GetVerseOptions} options + * @example + * client.verses.findRandom() + */ + async findRandom(options?: GetVerseOptions): Promise { + const { verse } = await this.fetcher.fetch<{ verse: Verse }>( + "/content/api/v4/verses/random", + { + words: false, // verses-specific default + ...options, + }, + ); + + return verse; + } +} diff --git a/packages/api/src/types/BaseApiOptions.ts b/packages/api/src/types/BaseApiOptions.ts new file mode 100644 index 0000000..c075c21 --- /dev/null +++ b/packages/api/src/types/BaseApiOptions.ts @@ -0,0 +1,6 @@ +import type { CustomFetcher, Language } from "."; + +export interface BaseApiOptions { + language: Language; + fetchFn?: CustomFetcher; +} diff --git a/packages/api/src/types/BaseApiParams.ts b/packages/api/src/types/BaseApiParams.ts new file mode 100644 index 0000000..02b7cf3 --- /dev/null +++ b/packages/api/src/types/BaseApiParams.ts @@ -0,0 +1,34 @@ +import type { Language } from "."; + +export type ApiParams = Record< + string, + string | number | boolean | unknown[] | undefined | Record +>; + +/** + * Base parameters that are common across most API endpoints + */ +export interface BaseApiParams extends ApiParams { + /** Language for the response */ + language?: Language; +} + +/** + * Pagination parameters + */ +export interface PaginationParams extends ApiParams { + /** Page number for pagination */ + page?: number; + /** Number of items per page */ + perPage?: number; +} + +/** + * Search parameters + */ +export interface SearchParams extends BaseApiParams { + /** Number of results to return */ + size?: number; + /** Page number for pagination */ + page?: number; +} diff --git a/src/types/api/ApiResponses.ts b/packages/api/src/types/api/ApiResponses.ts similarity index 79% rename from src/types/api/ApiResponses.ts rename to packages/api/src/types/api/ApiResponses.ts index 3082cb9..7049e91 100644 --- a/src/types/api/ApiResponses.ts +++ b/packages/api/src/types/api/ApiResponses.ts @@ -1,5 +1,5 @@ -import { Translation } from './Translation'; -import { Word } from './Word'; +import type { Translation } from "./Translation"; +import type { Word } from "./Word"; export interface SearchResponse { search: { diff --git a/src/types/api/AudioData.ts b/packages/api/src/types/api/AudioData.ts similarity index 75% rename from src/types/api/AudioData.ts rename to packages/api/src/types/api/AudioData.ts index d195773..988a3b5 100644 --- a/src/types/api/AudioData.ts +++ b/packages/api/src/types/api/AudioData.ts @@ -1,5 +1,5 @@ -import { VerseKey } from '../VerseKey'; -import { Segment } from './Segment'; +import type { VerseKey } from "../common/verse-key"; +import type { Segment } from "./Segment"; export interface ChapterRecitation { id: number; diff --git a/src/types/api/AudioResponse.ts b/packages/api/src/types/api/AudioResponse.ts similarity index 76% rename from src/types/api/AudioResponse.ts rename to packages/api/src/types/api/AudioResponse.ts index 5e46d3f..7e8225e 100644 --- a/src/types/api/AudioResponse.ts +++ b/packages/api/src/types/api/AudioResponse.ts @@ -1,4 +1,4 @@ -import { Segment } from './Segment'; +import type { Segment } from "./Segment"; export interface AudioResponse { url?: string; diff --git a/src/types/api/Chapter.ts b/packages/api/src/types/api/Chapter.ts similarity index 84% rename from src/types/api/Chapter.ts rename to packages/api/src/types/api/Chapter.ts index 5bfe2e9..2d01d21 100644 --- a/src/types/api/Chapter.ts +++ b/packages/api/src/types/api/Chapter.ts @@ -1,4 +1,4 @@ -import { TranslatedName } from './TranslatedName'; +import type { TranslatedName } from "./TranslatedName"; export interface Chapter { id: number; diff --git a/src/types/api/ChapterInfo.ts b/packages/api/src/types/api/ChapterInfo.ts similarity index 100% rename from src/types/api/ChapterInfo.ts rename to packages/api/src/types/api/ChapterInfo.ts diff --git a/src/types/api/Footnote.ts b/packages/api/src/types/api/Footnote.ts similarity index 100% rename from src/types/api/Footnote.ts rename to packages/api/src/types/api/Footnote.ts diff --git a/src/types/api/Juz.ts b/packages/api/src/types/api/Juz.ts similarity index 100% rename from src/types/api/Juz.ts rename to packages/api/src/types/api/Juz.ts diff --git a/src/types/api/Pagination.ts b/packages/api/src/types/api/Pagination.ts similarity index 100% rename from src/types/api/Pagination.ts rename to packages/api/src/types/api/Pagination.ts diff --git a/src/types/api/Reciter.ts b/packages/api/src/types/api/Reciter.ts similarity index 100% rename from src/types/api/Reciter.ts rename to packages/api/src/types/api/Reciter.ts diff --git a/src/types/api/Resources.ts b/packages/api/src/types/api/Resources.ts similarity index 96% rename from src/types/api/Resources.ts rename to packages/api/src/types/api/Resources.ts index 5b3155e..c3de2a0 100644 --- a/src/types/api/Resources.ts +++ b/packages/api/src/types/api/Resources.ts @@ -1,4 +1,4 @@ -import { TranslatedName } from './TranslatedName'; +import type { TranslatedName } from "./TranslatedName"; export interface RecitationResource { id?: number; diff --git a/src/types/api/Segment.ts b/packages/api/src/types/api/Segment.ts similarity index 100% rename from src/types/api/Segment.ts rename to packages/api/src/types/api/Segment.ts diff --git a/src/types/api/Tafsir.ts b/packages/api/src/types/api/Tafsir.ts similarity index 100% rename from src/types/api/Tafsir.ts rename to packages/api/src/types/api/Tafsir.ts diff --git a/src/types/api/TafsirInfo.ts b/packages/api/src/types/api/TafsirInfo.ts similarity index 74% rename from src/types/api/TafsirInfo.ts rename to packages/api/src/types/api/TafsirInfo.ts index 311af96..e9d9d2a 100644 --- a/src/types/api/TafsirInfo.ts +++ b/packages/api/src/types/api/TafsirInfo.ts @@ -1,4 +1,4 @@ -import { TranslatedName } from './TranslatedName'; +import type { TranslatedName } from "./TranslatedName"; export interface TafsirInfo { id?: number; diff --git a/src/types/api/TranslatedName.ts b/packages/api/src/types/api/TranslatedName.ts similarity index 100% rename from src/types/api/TranslatedName.ts rename to packages/api/src/types/api/TranslatedName.ts diff --git a/src/types/api/Translation.ts b/packages/api/src/types/api/Translation.ts similarity index 86% rename from src/types/api/Translation.ts rename to packages/api/src/types/api/Translation.ts index cd4f7e2..cdfc6dc 100644 --- a/src/types/api/Translation.ts +++ b/packages/api/src/types/api/Translation.ts @@ -1,4 +1,4 @@ -import { VerseKey } from '../VerseKey'; +import type { VerseKey } from "../common/verse-key"; export interface Translation { id?: number; diff --git a/src/types/api/Transliteration.ts b/packages/api/src/types/api/Transliteration.ts similarity index 100% rename from src/types/api/Transliteration.ts rename to packages/api/src/types/api/Transliteration.ts diff --git a/src/types/api/Verse.ts b/packages/api/src/types/api/Verse.ts similarity index 74% rename from src/types/api/Verse.ts rename to packages/api/src/types/api/Verse.ts index 8b67e1a..d2addd3 100644 --- a/src/types/api/Verse.ts +++ b/packages/api/src/types/api/Verse.ts @@ -1,8 +1,8 @@ -import { VerseKey } from '../VerseKey'; -import { AudioResponse } from './AudioResponse'; -import { Tafsir } from './Tafsir'; -import { Translation } from './Translation'; -import { Word } from './Word'; +import type { VerseKey } from "../common/verse-key"; +import type { AudioResponse } from "./AudioResponse"; +import type { Tafsir } from "./Tafsir"; +import type { Translation } from "./Translation"; +import type { Word } from "./Word"; export interface Verse { id: number; diff --git a/src/types/api/Word.ts b/packages/api/src/types/api/Word.ts similarity index 62% rename from src/types/api/Word.ts rename to packages/api/src/types/api/Word.ts index 9258f21..20e654a 100644 --- a/src/types/api/Word.ts +++ b/packages/api/src/types/api/Word.ts @@ -1,13 +1,13 @@ -import { VerseKey } from '../VerseKey'; -import { Translation } from './Translation'; -import { Transliteration } from './Transliteration'; +import type { VerseKey } from "../common/verse-key"; +import type { Translation } from "./Translation"; +import type { Transliteration } from "./Transliteration"; export enum CharType { - Word = 'word', - End = 'end', - Pause = 'pause', - Sajdah = 'sajdah', - RubElHizb = 'rub-el-hizb', + Word = "word", + End = "end", + Pause = "pause", + Sajdah = "sajdah", + RubElHizb = "rub-el-hizb", } export interface Word { diff --git a/src/types/api/index.ts b/packages/api/src/types/api/index.ts similarity index 94% rename from src/types/api/index.ts rename to packages/api/src/types/api/index.ts index bd56a5e..ced9d6d 100644 --- a/src/types/api/index.ts +++ b/packages/api/src/types/api/index.ts @@ -16,3 +16,4 @@ export * from './Word'; export * from './Juz'; export * from './Pagination'; export * from './Resources'; +export * from './search-result'; diff --git a/packages/api/src/types/api/search-result.ts b/packages/api/src/types/api/search-result.ts new file mode 100644 index 0000000..0524d7c --- /dev/null +++ b/packages/api/src/types/api/search-result.ts @@ -0,0 +1,12 @@ +import type { VerseKey } from "../common/verse-key"; +import type { Translation } from "./Translation"; +import type { Word } from "./Word"; + +export interface SearchResult { + verseKey: VerseKey; + verseId: number; + text: string; + highlighted?: string; + words: Word[]; + translations: Translation[]; +} diff --git a/packages/api/src/types/common/chapter-id.ts b/packages/api/src/types/common/chapter-id.ts new file mode 100644 index 0000000..51be2c5 --- /dev/null +++ b/packages/api/src/types/common/chapter-id.ts @@ -0,0 +1,7 @@ +import type { versesMapping } from "@/utils/verses-mapping"; + +import type { NumberUnionToString } from "../utils"; + +export type ChapterId = + | keyof typeof versesMapping + | NumberUnionToString; diff --git a/src/types/HizbNumber.ts b/packages/api/src/types/common/hizb-number.ts similarity index 63% rename from src/types/HizbNumber.ts rename to packages/api/src/types/common/hizb-number.ts index a84b8f9..ed73b58 100644 --- a/src/types/HizbNumber.ts +++ b/packages/api/src/types/common/hizb-number.ts @@ -1,4 +1,4 @@ -import { NumberRange, NumberUnionToString } from './utils'; +import type { NumberRange, NumberUnionToString } from "../utils"; type _HizbNumber = NumberRange<1, 61>; export type HizbNumber = _HizbNumber | NumberUnionToString<_HizbNumber>; diff --git a/src/types/JuzNumber.ts b/packages/api/src/types/common/juz-number.ts similarity index 62% rename from src/types/JuzNumber.ts rename to packages/api/src/types/common/juz-number.ts index edc52ea..cdf4a4b 100644 --- a/src/types/JuzNumber.ts +++ b/packages/api/src/types/common/juz-number.ts @@ -1,4 +1,4 @@ -import { NumberRange, NumberUnionToString } from './utils'; +import type { NumberRange, NumberUnionToString } from "../utils"; type _JuzNumber = NumberRange<1, 31>; export type JuzNumber = _JuzNumber | NumberUnionToString<_JuzNumber>; diff --git a/src/types/PageNumber.ts b/packages/api/src/types/common/page-number.ts similarity index 63% rename from src/types/PageNumber.ts rename to packages/api/src/types/common/page-number.ts index 5706548..290a2ad 100644 --- a/src/types/PageNumber.ts +++ b/packages/api/src/types/common/page-number.ts @@ -1,4 +1,4 @@ -import { NumberRange, NumberUnionToString } from './utils'; +import type { NumberRange, NumberUnionToString } from "../utils"; type _PageNumber = NumberRange<1, 605>; export type PageNumber = _PageNumber | NumberUnionToString<_PageNumber>; diff --git a/src/types/RubNumber.ts b/packages/api/src/types/common/rub-number.ts similarity index 62% rename from src/types/RubNumber.ts rename to packages/api/src/types/common/rub-number.ts index 47fe902..3029039 100644 --- a/src/types/RubNumber.ts +++ b/packages/api/src/types/common/rub-number.ts @@ -1,4 +1,4 @@ -import { NumberRange, NumberUnionToString } from './utils'; +import type { NumberRange, NumberUnionToString } from "../utils"; type _RubNumber = NumberRange<1, 241>; export type RubNumber = _RubNumber | NumberUnionToString<_RubNumber>; diff --git a/packages/api/src/types/common/verse-key.ts b/packages/api/src/types/common/verse-key.ts new file mode 100644 index 0000000..af807f4 --- /dev/null +++ b/packages/api/src/types/common/verse-key.ts @@ -0,0 +1,16 @@ +import type { versesMapping } from "@/utils/verses-mapping"; + +import type { Increment, NumberRange } from "../utils"; + +/** + * A `VerseKey` is a string literal in the form `${chapter}:${verse}` where: + * - `chapter` is a valid chapter id from `versesMapping` + * - `verse` is within the range 1..(verseCount for that chapter) + */ +export type VerseKey = { + [TChapter in keyof typeof versesMapping]: `${TChapter}:${NumberRange< + 1, + // @ts-expect-error - we are using the versesMapping type + Increment<(typeof versesMapping)[TChapter]> + >}`; +}[keyof typeof versesMapping]; diff --git a/packages/api/src/types/index.ts b/packages/api/src/types/index.ts new file mode 100644 index 0000000..05784e7 --- /dev/null +++ b/packages/api/src/types/index.ts @@ -0,0 +1,127 @@ +export enum Language { + ARABIC = "ar", + ENGLISH = "en", + URDU = "ur", + BENGALI = "bn", + TURKISH = "tr", + SPANISH = "es", + GERMAN = "de", + BOSNIAN = "bs", + RUSSIAN = "ru", + ALBANIAN_AL = "al", + FRENCH = "fr", + DUTCH = "nl", + TAMIL = "ta", + TAJIK = "tg", + INDONESIAN = "id", + UZBEK = "uz", + VIETNAMESE = "vi", + CHINESE = "zh", + ITALIAN = "it", + JAPANESE = "ja", + MALAYALAM = "ml", + AMHARIC = "am", + KAZAKH = "kk", + PORTUGUESE = "pt", + TAGALOG = "tl", + THAI = "th", + KOREAN = "ko", + HINDI = "hi", + KURDISH = "ku", + HAUSA = "ha", + AZERI = "az", + SWAHILI = "sw", + PERSIAN = "fa", + SERBIAN = "sr", + MARANAO = "mrn", + AMAZIGH = "zgh", + ASSAMESE = "as", + BULGARIAN = "bg", + CHECHEN = "ce", + CZECH = "cs", + DIVEHI = "dv", + FINNISH = "fi", + GUJAARATI = "gu", + HEBREW = "he", + GEORGIAN = "ka", + CENTRAL_KHMER = "km", + GANDA = "lg", + MARATHI = "mr", + YORUBA = "yo", + MALAY = "ms", + NEPALI = "ne", + SWEDISH = "sv", + TELUGU = "te", + TATAR = "tt", + UYGHUR = "ug", + UKRAINIAN = "uk", + NORWEGIAN = "no", + OROMO = "om", + POLISH = "pl", + PASHTO = "ps", + ROMANIAN = "ro", + SINDHI = "sd", + NORTHERN_SAMI = "se", + SINHALA = "si", + SOMALI = "so", + ALBANIAN_SQ = "sq", +} + +export enum QuranFont { + MadaniV1 = "code_v1", + MadaniV2 = "code_v2", + Uthmani = "text_uthmani", +} + +export type VerseField = + | "chapterId" + | "textUthmani" + | "textUthmaniSimple" + | "textImlaei" + | "textImlaeiSimple" + | "textIndopak" + | "textIndopakNastaleeq" + | "textUthmaniTajweed" + | "imageUrl" + | "imageWidth" + | "codeV1" + | "codeV2" + | "v1Page" + | "v2Page"; + +export type WordField = + | "v1Page" + | "v2Page" + | "textUthmani" + | "textImlaei" + | "textIndopak" + | "verseKey" + | "location" + | "codeV1" + | "codeV2"; + +export type TranslationField = + | "resourceName" + | "verseId" + | "languageId" + | "languageName" + | "verseKey" + | "chapterId" + | "verseNumber" + | "juzNumber" + | "hizbNumber" + | "rubNumber" + | "pageNumber"; + +export type VerseRecitationField = "id" | "chapterId" | "segments" | "format"; + +export * from "./common/verse-key"; +export * from "./common/chapter-id"; +export * from "./common/hizb-number"; +export * from "./common/juz-number"; +export * from "./common/page-number"; +export * from "./common/rub-number"; + +export * from "./api"; +export * from "./BaseApiParams"; +export * from "./quran-client"; diff --git a/packages/api/src/types/quran-client.ts b/packages/api/src/types/quran-client.ts new file mode 100644 index 0000000..438b03e --- /dev/null +++ b/packages/api/src/types/quran-client.ts @@ -0,0 +1,34 @@ +import type { BaseApiParams } from "./BaseApiParams"; + +/** + * Custom fetcher function type that matches the native fetch API + */ +export type CustomFetcher = typeof fetch; + +export interface QuranClientConfig { + /** Client ID for authentication */ + clientId: string; + /** Client secret for authentication */ + clientSecret: string; + + /** Base URL for content APIs */ + contentBaseUrl?: string; + /** Base URL for authentication */ + authBaseUrl?: string; + + /** Custom fetch implementation */ + fetch?: CustomFetcher; + + /** Default parameters for all API calls */ + defaults?: Partial; +} + +export interface CachedToken { + value: string; + expiresAt: number; +} + +export interface TokenResponse { + access_token: string; + expires_in: number; +} diff --git a/packages/api/src/types/utils.ts b/packages/api/src/types/utils.ts new file mode 100644 index 0000000..ef53c2d --- /dev/null +++ b/packages/api/src/types/utils.ts @@ -0,0 +1,47 @@ +type _NumbersFrom0ToN = Nr extends Nr + ? number extends Nr + ? number + : Nr extends 0 + ? never + : _NumbersFrom0ToNRec + : never; + +type _NumbersFrom0ToNRec< + Nr extends number, + Counter extends unknown[], + Accumulator extends number, +> = Counter["length"] extends Nr + ? Accumulator + : _NumbersFrom0ToNRec< + Nr, + [unknown, ...Counter], + Accumulator | Counter["length"] + >; + +export type NumberRange = Exclude< + _NumbersFrom0ToN, + _NumbersFrom0ToN +>; + +export type NumberUnionToString = TType extends number + ? `${TType}` + : TType; + +/** + * Builds a tuple with a length equal to the provided number literal. + * Used for type-level arithmetic. + */ +type BuildTuple< + TLength extends number, + TAccumulator extends unknown[] = [], +> = TAccumulator["length"] extends TLength + ? TAccumulator + : BuildTuple; + +/** + * Increments a numeric literal type by 1. + */ +export type Increment = [ + ...BuildTuple, + unknown, +]["length"]; diff --git a/packages/api/src/utils/index.ts b/packages/api/src/utils/index.ts new file mode 100644 index 0000000..27818f5 --- /dev/null +++ b/packages/api/src/utils/index.ts @@ -0,0 +1,6 @@ +export { isValidChapterId } from "./is-valid-chapter-id"; +export { isValidJuz } from "./is-valid-juz"; +export { isValidRub } from "./is-valid-rub"; +export { isValidHizb } from "./is-valid-hizb"; +export { isValidQuranPage } from "./is-valid-quran-page"; +export { isValidVerseKey } from "./is-valid-verse-key"; diff --git a/packages/api/src/utils/is-valid-chapter-id.ts b/packages/api/src/utils/is-valid-chapter-id.ts new file mode 100644 index 0000000..7645195 --- /dev/null +++ b/packages/api/src/utils/is-valid-chapter-id.ts @@ -0,0 +1,17 @@ +import type { ChapterId } from "../types"; + +/** + * Validates chapter id + * @param id chapter id + * @example + * isValidChapterId('1') // true + * isValidChapterId('114') // true + * isValidChapterId('0') // false + * isValidChapterId('-1') // false + * isValidChapterId('200') // false + */ +export const isValidChapterId = (id: string | number): id is ChapterId => { + const parsedId = typeof id === "number" ? id : Number(id); + if (!parsedId || parsedId <= 0 || parsedId > 114) return false; + return true; +}; diff --git a/packages/api/src/utils/is-valid-hizb.ts b/packages/api/src/utils/is-valid-hizb.ts new file mode 100644 index 0000000..6330663 --- /dev/null +++ b/packages/api/src/utils/is-valid-hizb.ts @@ -0,0 +1,17 @@ +import type { HizbNumber } from "../types"; + +/** + * Validates hizb number + * @param hizb hizb number + * @example + * isValidHizb('1') // true + * isValidHizb('60') // true + * isValidHizb('0') // false + * isValidHizb('-1') // false + * isValidHizb('200') // false + */ +export const isValidHizb = (hizb: string | number): hizb is HizbNumber => { + const parsedHizb = typeof hizb === "number" ? hizb : Number(hizb); + if (!parsedHizb || parsedHizb <= 0 || parsedHizb > 60) return false; + return true; +}; diff --git a/packages/api/src/utils/is-valid-juz.ts b/packages/api/src/utils/is-valid-juz.ts new file mode 100644 index 0000000..c28cc07 --- /dev/null +++ b/packages/api/src/utils/is-valid-juz.ts @@ -0,0 +1,17 @@ +import type { JuzNumber } from "../types"; + +/** + * Validates juz number + * @param juz juz number + * @example + * isValidJuz('1') // true + * isValidJuz('30') // true + * isValidJuz('0') // false + * isValidJuz('-1') // false + * isValidJuz('200') // false + */ +export const isValidJuz = (juz: string | number): juz is JuzNumber => { + const parsedJuz = typeof juz === "number" ? juz : Number(juz); + if (!parsedJuz || parsedJuz <= 0 || parsedJuz > 30) return false; + return true; +}; diff --git a/packages/api/src/utils/is-valid-quran-page.ts b/packages/api/src/utils/is-valid-quran-page.ts new file mode 100644 index 0000000..012076a --- /dev/null +++ b/packages/api/src/utils/is-valid-quran-page.ts @@ -0,0 +1,17 @@ +import type { PageNumber } from "../types"; + +/** + * Validates mushaf page number + * @param page mushaf page number + * @example + * isValidQuranPage('1') // true + * isValidQuranPage('604') // true + * isValidQuranPage('0') // false + * isValidQuranPage('-1') // false + * isValidQuranPage('1000') // false + */ +export const isValidQuranPage = (page: string | number): page is PageNumber => { + const parsedPage = typeof page === "number" ? page : Number(page); + if (!parsedPage || parsedPage <= 0 || parsedPage > 604) return false; + return true; +}; diff --git a/packages/api/src/utils/is-valid-rub.ts b/packages/api/src/utils/is-valid-rub.ts new file mode 100644 index 0000000..14755d0 --- /dev/null +++ b/packages/api/src/utils/is-valid-rub.ts @@ -0,0 +1,17 @@ +import type { RubNumber } from "../types"; + +/** + * Validates rub number + * @param rub rub number + * @example + * isValidRub('1') // true + * isValidRub('240') // true + * isValidRub('0') // false + * isValidRub('-1') // false + * isValidRub('300') // false + */ +export const isValidRub = (rub: string | number): rub is RubNumber => { + const parsedRub = typeof rub === "number" ? rub : Number(rub); + if (!parsedRub || parsedRub <= 0 || parsedRub > 240) return false; + return true; +}; diff --git a/packages/api/src/utils/is-valid-verse-key.ts b/packages/api/src/utils/is-valid-verse-key.ts new file mode 100644 index 0000000..f6c7ac9 --- /dev/null +++ b/packages/api/src/utils/is-valid-verse-key.ts @@ -0,0 +1,25 @@ +import type { ChapterId, VerseKey } from "../types"; +import { isValidChapterId } from "./is-valid-chapter-id"; +import { versesMapping } from "./verses-mapping"; + +/** + * Validates verse key + * @param key colon separated verse key (chapter:verse) + * @example + * isValidVerseKey('1:1') // true + * isValidVerseKey('30:1') // true + * isValidVerseKey('0') // false + * isValidVerseKey('1:-') // false + * isValidVerseKey('1_1') // false + */ +export const isValidVerseKey = (key: string): key is VerseKey => { + const [chapterId, verseId] = key.trim().split(":"); + if (!chapterId || !verseId || !isValidChapterId(chapterId)) return false; + + const parsedVerse = Number(verseId); + const verseCount = versesMapping[chapterId as ChapterId]; + if (!parsedVerse || parsedVerse <= 0 || parsedVerse > verseCount) + return false; + + return true; +}; diff --git a/packages/api/src/utils/verses-mapping.ts b/packages/api/src/utils/verses-mapping.ts new file mode 100644 index 0000000..c2eaf92 --- /dev/null +++ b/packages/api/src/utils/verses-mapping.ts @@ -0,0 +1,119 @@ +/** + * Maps chapter number to verse count + */ +export const versesMapping = { + 1: 7, + 2: 286, + 3: 200, + 4: 176, + 5: 120, + 6: 165, + 7: 206, + 8: 75, + 9: 129, + 10: 109, + 11: 123, + 12: 111, + 13: 43, + 14: 52, + 15: 99, + 16: 128, + 17: 111, + 18: 110, + 19: 98, + 20: 135, + 21: 112, + 22: 78, + 23: 118, + 24: 64, + 25: 77, + 26: 227, + 27: 93, + 28: 88, + 29: 69, + 30: 60, + 31: 34, + 32: 30, + 33: 73, + 34: 54, + 35: 45, + 36: 83, + 37: 182, + 38: 88, + 39: 75, + 40: 85, + 41: 54, + 42: 53, + 43: 89, + 44: 59, + 45: 37, + 46: 35, + 47: 38, + 48: 29, + 49: 18, + 50: 45, + 51: 60, + 52: 49, + 53: 62, + 54: 55, + 55: 78, + 56: 96, + 57: 29, + 58: 22, + 59: 24, + 60: 13, + 61: 14, + 62: 11, + 63: 11, + 64: 18, + 65: 12, + 66: 12, + 67: 30, + 68: 52, + 69: 52, + 70: 44, + 71: 28, + 72: 28, + 73: 20, + 74: 56, + 75: 40, + 76: 31, + 77: 50, + 78: 40, + 79: 46, + 80: 42, + 81: 29, + 82: 19, + 83: 36, + 84: 25, + 85: 22, + 86: 17, + 87: 19, + 88: 26, + 89: 30, + 90: 20, + 91: 15, + 92: 21, + 93: 11, + 94: 8, + 95: 8, + 96: 19, + 97: 5, + 98: 8, + 99: 8, + 100: 11, + 101: 11, + 102: 8, + 103: 3, + 104: 9, + 105: 5, + 106: 4, + 107: 7, + 108: 3, + 109: 6, + 110: 3, + 111: 5, + 112: 4, + 113: 5, + 114: 6, +} as const satisfies Record; diff --git a/packages/api/test/audio.test.ts b/packages/api/test/audio.test.ts new file mode 100644 index 0000000..a9e59b3 --- /dev/null +++ b/packages/api/test/audio.test.ts @@ -0,0 +1,80 @@ +import { describe, expect, it } from "vitest"; + +import { testClient } from "./test-client"; + +const VALID_RECITATION_ID = "1"; +const VALID_CHAPTER_ID = "1"; +const INVALID_CHAPTER_ID = "0"; +const VALID_VERSE_KEY = "1:1"; +const INVALID_VERSE_KEY = "0:0"; + +describe("Audio API", () => { + describe("findAllChapterRecitations()", () => { + it("should return all chapter recitations for valid reciter", async () => { + const response = + await testClient.audio.findAllChapterRecitations(VALID_RECITATION_ID); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + }); + + describe("findChapterRecitationById()", () => { + it("should return chapter recitation for valid params", async () => { + const response = await testClient.audio.findChapterRecitationById( + VALID_RECITATION_ID, + VALID_CHAPTER_ID, + ); + expect(response).toBeDefined(); + }); + + it("should throw error for invalid chapter ID", async () => { + await expect( + testClient.audio.findChapterRecitationById( + VALID_RECITATION_ID, + // @ts-expect-error - invalid chapter ID + INVALID_CHAPTER_ID, + ), + ).rejects.toThrowError(); + }); + }); + + describe("findVerseRecitationsByChapter()", () => { + it("should return verse recitations for valid chapter", async () => { + const response = await testClient.audio.findVerseRecitationsByChapter( + VALID_CHAPTER_ID, + VALID_RECITATION_ID, + ); + expect(response).toBeDefined(); + }); + + it("should throw error for invalid chapter ID", async () => { + await expect( + testClient.audio.findVerseRecitationsByChapter( + // @ts-expect-error - invalid chapter ID + INVALID_CHAPTER_ID, + VALID_RECITATION_ID, + ), + ).rejects.toThrowError(); + }); + }); + + describe("findVerseRecitationsByKey()", () => { + it("should return verse recitations for valid verse key", async () => { + const response = await testClient.audio.findVerseRecitationsByKey( + VALID_VERSE_KEY, + VALID_RECITATION_ID, + ); + expect(response).toBeDefined(); + }); + + it("should throw error for invalid verse key", async () => { + await expect( + testClient.audio.findVerseRecitationsByKey( + // @ts-expect-error - invalid verse key + INVALID_VERSE_KEY, + VALID_RECITATION_ID, + ), + ).rejects.toThrowError(); + }); + }); +}); diff --git a/packages/api/test/chapters.test.ts b/packages/api/test/chapters.test.ts new file mode 100644 index 0000000..ac76fc6 --- /dev/null +++ b/packages/api/test/chapters.test.ts @@ -0,0 +1,41 @@ +import { describe, expect, it } from "vitest"; + +import { testClient } from "./test-client"; + +describe("Chapters API", () => { + describe("findAll()", () => { + it("should return an array of chapters", async () => { + const response = await testClient.chapters.findAll(); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + }); + + describe("findById()", () => { + it("should return chapter for valid chapter ID", async () => { + const response = await testClient.chapters.findById("1"); + expect(response).toBeDefined(); + }); + + it("should throw error for invalid chapter ID", async () => { + await expect( + // @ts-expect-error - invalid chapter ID + testClient.chapters.findById("0"), + ).rejects.toThrowError(); + }); + }); + + describe("findInfoById()", () => { + it("should return chapter info for valid chapter ID", async () => { + const response = await testClient.chapters.findInfoById("1"); + expect(response).toBeDefined(); + }); + + it("should throw error for invalid chapter ID", async () => { + await expect( + // @ts-expect-error - invalid chapter ID + testClient.chapters.findInfoById("0"), + ).rejects.toThrowError(); + }); + }); +}); diff --git a/packages/api/test/fetch-fn.test.ts b/packages/api/test/fetch-fn.test.ts new file mode 100644 index 0000000..b23e46f --- /dev/null +++ b/packages/api/test/fetch-fn.test.ts @@ -0,0 +1,34 @@ +import { describe, expect, it } from "vitest"; + +import { QuranClient } from "../src"; + +describe("Custom fetcher", () => { + it("should fail with no fetch", () => { + // @ts-expect-error - we are testing this + globalThis.fetch = undefined; + + expect( + () => + new QuranClient({ + clientId: "test", + clientSecret: "test", + }), + ).toThrowError(/No fetch function available/); + }); + + it("should not fail if you pass a fetchFn", async () => { + // Save the original fetch that MSW has mocked + const originalFetch = globalThis.fetch; + + // @ts-expect-error - we are testing this + globalThis.fetch = undefined; + + const client = new QuranClient({ + clientId: "test", + clientSecret: "test", + fetch: originalFetch, + }); + + await expect(client.chapters.findById("1")).resolves.not.toThrow(); + }); +}); diff --git a/packages/api/test/juzs.test.ts b/packages/api/test/juzs.test.ts new file mode 100644 index 0000000..3c9bcd7 --- /dev/null +++ b/packages/api/test/juzs.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, it } from "vitest"; + +import { testClient } from "./test-client"; + +describe("Juzs API", () => { + describe("findAll()", () => { + it("should return an array of juzs", async () => { + const response = await testClient.juzs.findAll(); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + }); +}); diff --git a/packages/api/test/resources.test.ts b/packages/api/test/resources.test.ts new file mode 100644 index 0000000..3e06763 --- /dev/null +++ b/packages/api/test/resources.test.ts @@ -0,0 +1,97 @@ +import { describe, expect, it } from "vitest"; + +import { testClient } from "./test-client"; + +const VALID_RECITATION_ID = "1"; +const VALID_TRANSLATION_ID = "1"; +const VALID_TAFSIR_ID = "169"; + +describe("Resources API", () => { + describe("findAllChapterInfos()", () => { + it("should return an array of chapter infos", async () => { + const response = await testClient.resources.findAllChapterInfos(); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + }); + + describe("findAllChapterReciters()", () => { + it("should return an array of chapter reciters", async () => { + const response = await testClient.resources.findAllChapterReciters(); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + }); + + describe("findAllLanguages()", () => { + it("should return an array of languages", async () => { + const response = await testClient.resources.findAllLanguages(); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + }); + + describe("findAllRecitationStyles()", () => { + it("should return recitation styles (not an array)", async () => { + const response = await testClient.resources.findAllRecitationStyles(); + expect(response).toBeDefined(); + // Note: This method returns an object, not an array despite containing "All" in name + expect(response).not.toBeInstanceOf(Array); + }); + }); + + describe("findAllRecitations()", () => { + it("should return an array of recitations", async () => { + const response = await testClient.resources.findAllRecitations(); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + }); + + describe("findAllTafsirs()", () => { + it("should return an array of tafsirs", async () => { + const response = await testClient.resources.findAllTafsirs(); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + }); + + describe("findAllTranslations()", () => { + it("should return an array of translations", async () => { + const response = await testClient.resources.findAllTranslations(); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + }); + + describe("findVerseMedia()", () => { + it("should return verse media information", async () => { + const response = await testClient.resources.findVerseMedia(); + expect(response).toBeDefined(); + }); + }); + + describe("findRecitationInfo()", () => { + it("should return recitation info for valid ID", async () => { + const response = + await testClient.resources.findRecitationInfo(VALID_RECITATION_ID); + expect(response).toBeDefined(); + }); + }); + + describe("findTranslationInfo()", () => { + it("should return translation info for valid ID", async () => { + const response = + await testClient.resources.findTranslationInfo(VALID_TRANSLATION_ID); + expect(response).toBeDefined(); + }); + }); + + describe("findTafsirInfo()", () => { + it("should return tafsir info for valid ID", async () => { + const response = + await testClient.resources.findTafsirInfo(VALID_TAFSIR_ID); + expect(response).toBeDefined(); + }); + }); +}); diff --git a/test/setup.ts b/packages/api/test/setup.ts similarity index 53% rename from test/setup.ts rename to packages/api/test/setup.ts index c417650..c9d4523 100644 --- a/test/setup.ts +++ b/packages/api/test/setup.ts @@ -1,24 +1,27 @@ -import fetch from 'cross-fetch'; -import { beforeAll, afterEach, afterAll, beforeEach } from 'vitest'; -import { server } from '../mocks/server'; +import fetch from "cross-fetch"; +import { afterAll, afterEach, beforeAll, beforeEach } from "vitest"; + +import { server } from "../mocks/server"; // Establish API mocking before all tests. -beforeAll(async () => { +beforeAll(() => { server.listen(); }); -beforeEach(async () => { +beforeEach(() => { // we do this instead of passing a fetchFn every time globalThis.fetch = fetch; }); // Reset any request handlers that we may add during the tests, // so they don't affect other tests. -afterEach(async () => { +afterEach(() => { + // we do this instead of passing a fetchFn every time + globalThis.fetch = fetch; server.resetHandlers(); }); // Clean up after the tests are finished. -afterAll(async () => { +afterAll(() => { server.close(); }); diff --git a/packages/api/test/test-client.ts b/packages/api/test/test-client.ts new file mode 100644 index 0000000..5b9cac5 --- /dev/null +++ b/packages/api/test/test-client.ts @@ -0,0 +1,11 @@ +import { Language, QuranClient } from "../src"; + +// Create a shared test client for all tests +export const testClient = new QuranClient({ + clientId: "test-client-id", + clientSecret: "test-client-secret", + defaults: { + language: Language.ENGLISH, + perPage: 25, + }, +}); diff --git a/test/utils.test.ts b/packages/api/test/utils.test.ts similarity index 61% rename from test/utils.test.ts rename to packages/api/test/utils.test.ts index 77ce6d1..7561413 100644 --- a/test/utils.test.ts +++ b/packages/api/test/utils.test.ts @@ -1,49 +1,48 @@ -import { quran } from '../src/index'; -import { describe, it, expect } from 'vitest'; -import fc from 'fast-check'; +import fc from "fast-check"; +import { describe, expect, it } from "vitest"; -const utils = quran.utils; +import * as utils from "../src/utils"; -describe('Utils', () => { +describe("Utils", () => { describe(`isValidChapterId`, () => { - it('should return true for valid chapter id', () => { + it("should return true for valid chapter id", () => { // This will generate numbers in the range [1, 114] // and test them against the expected the value (which is truthy) fc.assert( fc.property(fc.integer({ min: 1, max: 114 }), (chapterId) => { expect(utils.isValidChapterId(chapterId)).toBeTruthy(); - }) + }), ); }); - it('should return false for invalid chapter id (out of the range [1, 114])', () => { + it("should return false for invalid chapter id (out of the range [1, 114])", () => { // Generate numbers that out of the range [1, 114] fc.assert( fc.property(fc.integer({ max: 0 }), (chapterIdString) => { expect(utils.isValidChapterId(chapterIdString)).toBeFalsy(); - }) + }), ); fc.assert( fc.property(fc.integer({ min: 115 }), (chapterIdString) => { expect(utils.isValidChapterId(chapterIdString)).toBeFalsy(); - }) + }), ); }); - it('should return false for invalid chapter id (random strings that do not represent numbers)', () => { + it("should return false for invalid chapter id (random strings that do not represent numbers)", () => { // Generate random strings that do not represent numbers fc.assert( fc.property( fc.string().filter((s) => Number.isNaN(Number(s))), (chapterIdString) => { expect(utils.isValidChapterId(chapterIdString)).toBeFalsy(); - } + }, ), - { numRuns: 1000 } + { numRuns: 1000 }, ); }); - it('should return false for invalid chapter id (random strings that represent numbers that are out of the range [1, 114])', () => { + it("should return false for invalid chapter id (random strings that represent numbers that are out of the range [1, 114])", () => { // Generate random strings that represent numbers that are out of the range [1, 114] fc.assert( fc.property( @@ -52,24 +51,24 @@ describe('Utils', () => { .filter( (s) => Number.isInteger(Number(s)) && - (Number(s) > 114 || Number(s) <= 0) + (Number(s) > 114 || Number(s) <= 0), ), (chapterIdString) => { expect(utils.isValidChapterId(chapterIdString)).toBeFalsy(); - } + }, ), - { numRuns: 250 } + { numRuns: 250 }, ); }); }); describe(`isValidHizb`, () => { - it('should return true for valid hizb', () => { + it("should return true for valid hizb", () => { expect(utils.isValidHizb(1)).toBeTruthy(); expect(utils.isValidHizb(60)).toBeTruthy(); }); - it('should return false for invalid hizb', () => { + it("should return false for invalid hizb", () => { expect(utils.isValidHizb(0)).toBeFalsy(); expect(utils.isValidHizb(61)).toBeFalsy(); expect(utils.isValidHizb(-10)).toBeFalsy(); @@ -77,11 +76,11 @@ describe('Utils', () => { }); describe(`isValidJuz`, () => { - it('should return true for valid chapter id', () => { + it("should return true for valid chapter id", () => { expect(utils.isValidJuz(1)).toBeTruthy(); }); - it('should return false for invalid chapter id', () => { + it("should return false for invalid chapter id", () => { expect(utils.isValidJuz(0)).toBeFalsy(); expect(utils.isValidJuz(31)).toBeFalsy(); expect(utils.isValidJuz(-10)).toBeFalsy(); @@ -89,12 +88,12 @@ describe('Utils', () => { }); describe(`isValidQuranPage`, () => { - it('should return true for valid page', () => { + it("should return true for valid page", () => { expect(utils.isValidQuranPage(1)).toBeTruthy(); expect(utils.isValidQuranPage(604)).toBeTruthy(); }); - it('should return false for invalid page', () => { + it("should return false for invalid page", () => { expect(utils.isValidQuranPage(0)).toBeFalsy(); expect(utils.isValidQuranPage(605)).toBeFalsy(); expect(utils.isValidQuranPage(-10)).toBeFalsy(); @@ -102,12 +101,12 @@ describe('Utils', () => { }); describe(`isValidRub`, () => { - it('should return true for valid rub', () => { + it("should return true for valid rub", () => { expect(utils.isValidRub(1)).toBeTruthy(); expect(utils.isValidRub(240)).toBeTruthy(); }); - it('should return false for invalid rub', () => { + it("should return false for invalid rub", () => { expect(utils.isValidRub(0)).toBeFalsy(); expect(utils.isValidRub(241)).toBeFalsy(); expect(utils.isValidRub(-10)).toBeFalsy(); @@ -115,18 +114,18 @@ describe('Utils', () => { }); describe(`isValidVerseKey`, () => { - it('should return true for valid verse key', () => { - expect(utils.isValidVerseKey('1:1')).toBeTruthy(); - expect(utils.isValidVerseKey('114:1')).toBeTruthy(); + it("should return true for valid verse key", () => { + expect(utils.isValidVerseKey("1:1")).toBeTruthy(); + expect(utils.isValidVerseKey("114:1")).toBeTruthy(); }); - it('should return false for invalid verse key', () => { - expect(utils.isValidVerseKey('0')).toBeFalsy(); - expect(utils.isValidVerseKey('1')).toBeFalsy(); - expect(utils.isValidVerseKey('0!0')).toBeFalsy(); - expect(utils.isValidVerseKey('!!')).toBeFalsy(); - expect(utils.isValidVerseKey(':')).toBeFalsy(); - expect(utils.isValidVerseKey('0:')).toBeFalsy(); + it("should return false for invalid verse key", () => { + expect(utils.isValidVerseKey("0")).toBeFalsy(); + expect(utils.isValidVerseKey("1")).toBeFalsy(); + expect(utils.isValidVerseKey("0!0")).toBeFalsy(); + expect(utils.isValidVerseKey("!!")).toBeFalsy(); + expect(utils.isValidVerseKey(":")).toBeFalsy(); + expect(utils.isValidVerseKey("0:")).toBeFalsy(); }); }); }); diff --git a/packages/api/test/verses.test.ts b/packages/api/test/verses.test.ts new file mode 100644 index 0000000..471c913 --- /dev/null +++ b/packages/api/test/verses.test.ts @@ -0,0 +1,113 @@ +import { describe, expect, it } from "vitest"; + +import { testClient } from "./test-client"; + +const VALID_CHAPTER_ID = "1"; +const VALID_JUZ_NUMBER = "1"; +const VALID_VERSE_KEY = "1:1"; +const VALID_PAGE_NUMBER = "1"; +const VALID_HIZB_NUMBER = "1"; +const VALID_RUB_NUMBER = "1"; + +const INVALID_CHAPTER_ID = "0"; +const INVALID_JUZ_NUMBER = "0"; +const INVALID_VERSE_KEY = "0:0"; +const INVALID_PAGE_NUMBER = "0"; +const INVALID_HIZB_NUMBER = "0"; + +describe("Verses API", () => { + describe("findByChapter()", () => { + it("should return an array of verses for valid chapter", async () => { + const response = await testClient.verses.findByChapter(VALID_CHAPTER_ID); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + + it("should throw error for invalid chapter ID", async () => { + await expect( + // @ts-expect-error - testing invalid chapter ID + testClient.verses.findByChapter(INVALID_CHAPTER_ID), + ).rejects.toThrowError(); + }); + }); + + describe("findByJuz()", () => { + it("should return an array of verses for valid juz", async () => { + const response = await testClient.verses.findByJuz(VALID_JUZ_NUMBER); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + + it("should throw error for invalid juz number", async () => { + await expect( + // @ts-expect-error - testing invalid juz number + testClient.verses.findByJuz(INVALID_JUZ_NUMBER), + ).rejects.toThrowError(); + }); + }); + + describe("findByKey()", () => { + it("should return verse for valid verse key", async () => { + const response = await testClient.verses.findByKey(VALID_VERSE_KEY); + expect(response).toBeDefined(); + }); + + it("should throw error for invalid verse key", async () => { + await expect( + // @ts-expect-error - testing invalid verse key + testClient.verses.findByKey(INVALID_VERSE_KEY), + ).rejects.toThrowError(); + }); + }); + + describe("findByPage()", () => { + it("should return an array of verses for valid page", async () => { + const response = await testClient.verses.findByPage(VALID_PAGE_NUMBER); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + + it("should throw error for invalid page number", async () => { + await expect( + // @ts-expect-error - testing invalid page number + testClient.verses.findByPage(INVALID_PAGE_NUMBER), + ).rejects.toThrowError(); + }); + }); + + describe("findRandom()", () => { + it("should return a random verse", async () => { + const response = await testClient.verses.findRandom(); + expect(response).toBeDefined(); + }); + }); + + describe("findByHizb()", () => { + it("should return an array of verses for valid hizb", async () => { + const response = await testClient.verses.findByHizb(VALID_HIZB_NUMBER); + expect(response).toBeInstanceOf(Array); + expect(response).toBeDefined(); + }); + + it("should throw error for invalid hizb number", async () => { + await expect( + // @ts-expect-error - testing invalid hizb number + testClient.verses.findByHizb(INVALID_HIZB_NUMBER), + ).rejects.toThrowError(); + }); + }); + + describe("findByRub()", () => { + it("should return verses for valid rub", async () => { + const response = await testClient.verses.findByRub(VALID_RUB_NUMBER); + expect(response).toBeDefined(); + }); + + it("should throw error for invalid rub number", async () => { + await expect( + // @ts-expect-error - testing invalid rub number + testClient.verses.findByRub(INVALID_CHAPTER_ID), + ).rejects.toThrowError(); + }); + }); +}); diff --git a/packages/api/tsconfig.json b/packages/api/tsconfig.json new file mode 100644 index 0000000..6ff54c8 --- /dev/null +++ b/packages/api/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@quranjs/tsconfig/internal-package.json", + "include": ["src", "test", "mocks"], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "exclude": ["node_modules"] +} diff --git a/packages/api/tsup.config.ts b/packages/api/tsup.config.ts new file mode 100644 index 0000000..1b2c1cd --- /dev/null +++ b/packages/api/tsup.config.ts @@ -0,0 +1,34 @@ +import type { Options } from "tsup"; +import { defineConfig } from "tsup"; + +const baseConfig: Options = { + entry: ["src/index.ts"], + outDir: "dist", + outExtension({ format, options }) { + const ext = format === "esm" ? "mjs" : "js"; + const finalFormat = format === "cjs" || format === "esm" ? "" : format; + + const outputExtension = options.minify + ? `${finalFormat}.min.${ext}` + : `${finalFormat}.${ext}`; + + return { + js: outputExtension.startsWith(".") + ? outputExtension + : `.${outputExtension}`, + }; + }, + treeshake: true, + splitting: false, + sourcemap: true, + clean: true, + dts: true, +}; + +export default defineConfig((options) => [ + { + ...baseConfig, + format: ["cjs", "esm"], + minify: !options.watch, + }, +]); diff --git a/packages/api/vitest.config.ts b/packages/api/vitest.config.ts new file mode 100644 index 0000000..42ba234 --- /dev/null +++ b/packages/api/vitest.config.ts @@ -0,0 +1,15 @@ +import path from "path"; +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, + test: { + environment: "node", + include: ["./test/**/*.test.{js,ts,jsx,tsx}"], + setupFiles: ["./test/setup.ts"], + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9672e8..fe6166d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,2904 +4,9072 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +catalogs: + default: + eslint: + specifier: ^9.19.0 + version: 9.32.0 + prettier: + specifier: ^3.4.2 + version: 3.6.2 + tailwindcss: + specifier: ^4.1.11 + version: 4.1.11 + typescript: + specifier: ^5.9.2 + version: 5.9.2 + react19: + '@types/react': + specifier: ^19.1.2 + version: 19.1.9 + '@types/react-dom': + specifier: ^19.1.2 + version: 19.1.7 + react: + specifier: 19.1.0 + version: 19.1.0 + react-dom: + specifier: 19.1.0 + version: 19.1.0 + importers: .: + devDependencies: + '@changesets/cli': + specifier: ^2.29.5 + version: 2.29.5 + '@quranjs/prettier-config': + specifier: workspace:* + version: link:tooling/prettier + prettier: + specifier: 'catalog:' + version: 3.6.2 + turbo: + specifier: ^2.5.5 + version: 2.5.5 + typescript: + specifier: 'catalog:' + version: 5.9.2 + + apps/docs: + dependencies: + clsx: + specifier: ^2.1.1 + version: 2.1.1 + fumadocs-core: + specifier: 15.8.5 + version: 15.8.5(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + fumadocs-mdx: + specifier: 12.0.3 + version: 12.0.3(fumadocs-core@15.8.5(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.6(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.1)) + fumadocs-typescript: + specifier: ^4.0.11 + version: 4.0.11(@types/react@19.1.9)(fumadocs-core@15.8.5(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(fumadocs-ui@15.8.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.11))(typescript@5.9.2) + fumadocs-ui: + specifier: 15.8.5 + version: 15.8.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.11) + lucide-react: + specifier: ^0.539.0 + version: 0.539.0(react@19.1.0) + next: + specifier: 15.5.6 + version: 15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: + specifier: catalog:react19 + version: 19.1.0 + react-dom: + specifier: catalog:react19 + version: 19.1.0(react@19.1.0) + tailwind-merge: + specifier: ^3.3.1 + version: 3.3.1 + devDependencies: + '@quranjs/eslint-config': + specifier: workspace:* + version: link:../../tooling/eslint + '@quranjs/prettier-config': + specifier: workspace:* + version: link:../../tooling/prettier + '@quranjs/tsconfig': + specifier: workspace:* + version: link:../../tooling/typescript + '@tailwindcss/postcss': + specifier: ^4.1.11 + version: 4.1.11 + '@types/mdx': + specifier: ^2.0.13 + version: 2.0.13 + '@types/node': + specifier: ^24.2.0 + version: 24.2.0 + '@types/react': + specifier: catalog:react19 + version: 19.1.9 + '@types/react-dom': + specifier: catalog:react19 + version: 19.1.7(@types/react@19.1.9) + eslint: + specifier: 'catalog:' + version: 9.32.0(jiti@2.5.1) + postcss: + specifier: ^8.5.6 + version: 8.5.6 + prettier: + specifier: 'catalog:' + version: 3.6.2 + tailwindcss: + specifier: 'catalog:' + version: 4.1.11 + typescript: + specifier: 'catalog:' + version: 5.9.2 + + packages/api: dependencies: humps: specifier: ^2.0.1 version: 2.0.1 devDependencies: + '@quranjs/eslint-config': + specifier: workspace:* + version: link:../../tooling/eslint + '@quranjs/prettier-config': + specifier: workspace:* + version: link:../../tooling/prettier + '@quranjs/tsconfig': + specifier: workspace:* + version: link:../../tooling/typescript '@size-limit/preset-small-lib': specifier: ^7.0.8 version: 7.0.8(size-limit@7.0.8) '@swc/core': specifier: ^1.10.4 - version: 1.10.4 + version: 1.10.4(@swc/helpers@0.5.15) '@types/humps': specifier: ^2.0.1 version: 2.0.1 - '@typescript-eslint/eslint-plugin': - specifier: ^5.42.0 - version: 5.42.0(@typescript-eslint/parser@5.42.0(eslint@8.26.0)(typescript@4.6.2))(eslint@8.26.0)(typescript@4.6.2) - '@typescript-eslint/parser': - specifier: ^5.42.0 - version: 5.42.0(eslint@8.26.0)(typescript@4.6.2) - '@vitest/coverage-c8': - specifier: ^0.24.4 - version: 0.24.4 + '@types/node': + specifier: ^24.2.0 + version: 24.2.0 + '@vitest/coverage-v8': + specifier: ^3.2.4 + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(msw@2.11.5(@types/node@24.2.0)(typescript@5.9.2))(yaml@2.8.1)) cross-fetch: specifier: ^3.1.5 version: 3.1.5 - esbuild-plugin-umd-wrapper: - specifier: ^3.0.0 - version: 3.0.0 eslint: - specifier: ^8.26.0 - version: 8.26.0 - eslint-config-prettier: - specifier: ^8.5.0 - version: 8.5.0(eslint@8.26.0) - eslint-plugin-prettier: - specifier: ^4.2.1 - version: 4.2.1(eslint-config-prettier@8.5.0(eslint@8.26.0))(eslint@8.26.0)(prettier@2.7.1) + specifier: 'catalog:' + version: 9.32.0(jiti@2.5.1) fast-check: specifier: ^3.3.0 version: 3.3.0 - husky: - specifier: ^7.0.4 - version: 7.0.4 msw: - specifier: ^0.39.2 - version: 0.39.2 + specifier: ^2.11.5 + version: 2.11.5(@types/node@24.2.0)(typescript@5.9.2) prettier: - specifier: ^2.7.1 - version: 2.7.1 + specifier: 'catalog:' + version: 3.6.2 rollup-plugin-analyzer: specifier: ^4.0.0 version: 4.0.0 size-limit: specifier: ^7.0.8 version: 7.0.8 - tslib: - specifier: ^2.3.1 - version: 2.3.1 tsup: - specifier: ^6.3.0 - version: 6.3.0(@swc/core@1.10.4)(postcss@8.4.18)(typescript@4.6.2) + specifier: ^8.5.0 + version: 8.5.0(@swc/core@1.10.4(@swc/helpers@0.5.15))(jiti@2.5.1)(postcss@8.5.6)(typescript@5.9.2)(yaml@2.8.1) typescript: - specifier: ^4.6.2 - version: 4.6.2 + specifier: 'catalog:' + version: 5.9.2 vitest: - specifier: ^0.24.4 - version: 0.24.4 - -packages: + specifier: ^3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(msw@2.11.5(@types/node@24.2.0)(typescript@5.9.2))(yaml@2.8.1) + + tooling/eslint: + dependencies: + '@eslint/compat': + specifier: ^1.2.5 + version: 1.3.1(eslint@9.32.0(jiti@2.5.1)) + '@next/eslint-plugin-next': + specifier: ^15.2.1 + version: 15.4.6 + eslint-plugin-import: + specifier: ^2.31.0 + version: 2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: + specifier: ^6.10.2 + version: 6.10.2(eslint@9.32.0(jiti@2.5.1)) + eslint-plugin-react: + specifier: ^7.37.4 + version: 7.37.5(eslint@9.32.0(jiti@2.5.1)) + eslint-plugin-react-compiler: + specifier: beta + version: 19.0.0-beta-af1b7da-20250417(eslint@9.32.0(jiti@2.5.1)) + eslint-plugin-react-hooks: + specifier: ^5.1.0 + version: 5.2.0(eslint@9.32.0(jiti@2.5.1)) + eslint-plugin-turbo: + specifier: ^2.3.4 + version: 2.5.5(eslint@9.32.0(jiti@2.5.1))(turbo@2.5.5) + typescript-eslint: + specifier: ^8.21.0 + version: 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + devDependencies: + '@quranjs/prettier-config': + specifier: workspace:* + version: link:../prettier + '@quranjs/tsconfig': + specifier: workspace:* + version: link:../typescript + eslint: + specifier: 'catalog:' + version: 9.32.0(jiti@2.5.1) + prettier: + specifier: 'catalog:' + version: 3.6.2 + typescript: + specifier: 'catalog:' + version: 5.9.2 - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + tooling/prettier: + dependencies: + '@ianvs/prettier-plugin-sort-imports': + specifier: ^4.4.1 + version: 4.5.1(prettier@3.6.2) + prettier: + specifier: 'catalog:' + version: 3.6.2 + prettier-plugin-tailwindcss: + specifier: ^0.6.11 + version: 0.6.14(@ianvs/prettier-plugin-sort-imports@4.5.1(prettier@3.6.2))(prettier@3.6.2) + devDependencies: + '@quranjs/tsconfig': + specifier: workspace:* + version: link:../typescript + '@types/node': + specifier: ^24.2.0 + version: 24.2.0 + typescript: + specifier: 'catalog:' + version: 5.9.2 - '@esbuild/android-arm@0.15.12': - resolution: {integrity: sha512-IC7TqIqiyE0MmvAhWkl/8AEzpOtbhRNDo7aph47We1NbE5w2bt/Q+giAhe0YYeVpYnIhGMcuZY92qDK6dQauvA==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] + tooling/typescript: {} - '@esbuild/linux-loong64@0.15.12': - resolution: {integrity: sha512-tZEowDjvU7O7I04GYvWQOS4yyP9E/7YlsB0jjw1Ycukgr2ycEzKyIk5tms5WnLBymaewc6VmRKnn5IJWgK4eFw==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] +packages: - '@eslint/eslintrc@1.3.3': - resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} - '@humanwhocodes/config-array@0.11.7': - resolution: {integrity: sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} - '@humanwhocodes/object-schema@1.2.1': - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - deprecated: Use @eslint/object-schema instead + '@babel/compat-data@7.28.0': + resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} + engines: {node: '>=6.9.0'} - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} + '@babel/core@7.28.0': + resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} + engines: {node: '>=6.9.0'} - '@jridgewell/resolve-uri@3.1.0': - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} + '@babel/generator@7.28.0': + resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + engines: {node: '>=6.9.0'} - '@jridgewell/sourcemap-codec@1.4.14': - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} - '@jridgewell/trace-mapping@0.3.17': - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} - '@mswjs/cookies@0.2.0': - resolution: {integrity: sha512-GTKYnIfXVP8GL8HRWrse+ujqDXCLKvu7+JoL6pvZFzS/d2i9pziByoWD69cOe35JNoSrx2DPNqrhUF+vgV3qUA==} - engines: {node: '>=14'} + '@babel/helper-create-class-features-plugin@7.27.1': + resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@mswjs/interceptors@0.15.1': - resolution: {integrity: sha512-D5B+ZJNlfvBm6ZctAfRBdNJdCHYAe2Ix4My5qfbHV5WH+3lkt3mmsjiWJzEh5ZwGDauzY487TldI275If7DJVw==} - engines: {node: '>=14'} + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} + engines: {node: '>=6.9.0'} - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@babel/helper-module-transforms@7.27.3': + resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@open-draft/until@1.0.3': - resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==} + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} - '@size-limit/esbuild@7.0.8': - resolution: {integrity: sha512-AzCrxJJThDvHrBNoolebYVgXu46c6HuS3fOxoXr3V0YWNM0qz81z5F3j7RruzboZnls8ZgME4WrH6GM5rB9gtA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - peerDependencies: - size-limit: 7.0.8 + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} - '@size-limit/file@7.0.8': - resolution: {integrity: sha512-1KeFQuMXIXAH/iELqIX7x+YNYDFvzIvmxcp9PrdwEoSNL0dXdaDIo9WE/yz8xvOmUcKaLfqbWkL75DM0k91WHQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} + engines: {node: '>=6.9.0'} peerDependencies: - size-limit: 7.0.8 + '@babel/core': ^7.0.0 - '@size-limit/preset-small-lib@7.0.8': - resolution: {integrity: sha512-CT8nIYA/c2CSD+X4rAUgwqYccQMahJ6rBnaZxvi3YKFdkXIbuGNXHNjHsYaFksgwG9P4UjG/unyO5L73f3zQBw==} - peerDependencies: - size-limit: 7.0.8 + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} - '@swc/core-darwin-arm64@1.10.4': - resolution: {integrity: sha512-sV/eurLhkjn/197y48bxKP19oqcLydSel42Qsy2zepBltqUx+/zZ8+/IS0Bi7kaWVFxerbW1IPB09uq8Zuvm3g==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} - '@swc/core-darwin-x64@1.10.4': - resolution: {integrity: sha512-gjYNU6vrAUO4+FuovEo9ofnVosTFXkF0VDuo1MKPItz6e2pxc2ale4FGzLw0Nf7JB1sX4a8h06CN16/pLJ8Q2w==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} - '@swc/core-linux-arm-gnueabihf@1.10.4': - resolution: {integrity: sha512-zd7fXH5w8s+Sfvn2oO464KDWl+ZX1MJiVmE4Pdk46N3PEaNwE0koTfgx2vQRqRG4vBBobzVvzICC3618WcefOA==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} - '@swc/core-linux-arm64-gnu@1.10.4': - resolution: {integrity: sha512-+UGfoHDxsMZgFD3tABKLeEZHqLNOkxStu+qCG7atGBhS4Slri6h6zijVvf4yI5X3kbXdvc44XV/hrP/Klnui2A==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] + '@babel/helpers@7.28.2': + resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==} + engines: {node: '>=6.9.0'} - '@swc/core-linux-arm64-musl@1.10.4': - resolution: {integrity: sha512-cDDj2/uYsOH0pgAnDkovLZvKJpFmBMyXkxEG6Q4yw99HbzO6QzZ5HDGWGWVq/6dLgYKlnnmpjZCPPQIu01mXEg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + engines: {node: '>=6.0.0'} + hasBin: true - '@swc/core-linux-x64-gnu@1.10.4': - resolution: {integrity: sha512-qJXh9D6Kf5xSdGWPINpLGixAbB5JX8JcbEJpRamhlDBoOcQC79dYfOMEIxWPhTS1DGLyFakAx2FX/b2VmQmj0g==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] + '@babel/plugin-proposal-private-methods@7.18.6': + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 - '@swc/core-linux-x64-musl@1.10.4': - resolution: {integrity: sha512-A76lIAeyQnHCVt0RL/pG+0er8Qk9+acGJqSZOZm67Ve3B0oqMd871kPtaHBM0BW3OZAhoILgfHW3Op9Q3mx3Cw==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] + '@babel/runtime@7.28.2': + resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} + engines: {node: '>=6.9.0'} - '@swc/core-win32-arm64-msvc@1.10.4': - resolution: {integrity: sha512-e6j5kBu4fIY7fFxFxnZI0MlEovRvp50Lg59Fw+DVbtqHk3C85dckcy5xKP+UoXeuEmFceauQDczUcGs19SRGSQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} - '@swc/core-win32-ia32-msvc@1.10.4': - resolution: {integrity: sha512-RSYHfdKgNXV/amY5Tqk1EWVsyQnhlsM//jeqMLw5Fy9rfxP592W9UTumNikNRPdjI8wKKzNMXDb1U29tQjN0dg==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] + '@babel/traverse@7.28.0': + resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} + engines: {node: '>=6.9.0'} - '@swc/core-win32-x64-msvc@1.10.4': - resolution: {integrity: sha512-1ujYpaqfqNPYdwKBlvJnOqcl+Syn3UrQ4XE0Txz6zMYgyh6cdU6a3pxqLqIUSJ12MtXRA9ZUhEz1ekU3LfLWXw==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + engines: {node: '>=6.9.0'} - '@swc/core@1.10.4': - resolution: {integrity: sha512-ut3zfiTLORMxhr6y/GBxkHmzcGuVpwJYX4qyXWuBKkpw/0g0S5iO1/wW7RnLnZbAi8wS/n0atRZoaZlXWBkeJg==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '*' - peerDependenciesMeta: - '@swc/helpers': - optional: true + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@changesets/apply-release-plan@7.0.12': + resolution: {integrity: sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==} - '@swc/types@0.1.17': - resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==} + '@changesets/assemble-release-plan@6.0.9': + resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} - '@types/chai-subset@1.3.3': - resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + '@changesets/changelog-git@0.2.1': + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - '@types/chai@4.3.3': - resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==} + '@changesets/cli@2.29.5': + resolution: {integrity: sha512-0j0cPq3fgxt2dPdFsg4XvO+6L66RC0pZybT9F4dG5TBrLA3jA/1pNkdTXH9IBBVHkgsKrNKenI3n1mPyPlIydg==} + hasBin: true - '@types/cookie@0.4.1': - resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + '@changesets/config@3.1.1': + resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==} - '@types/humps@2.0.1': - resolution: {integrity: sha512-cxIGJjiOQRl5s/KjqoTa0u39qKrVD3T6+6eGsERva0MLBp9AMVG8udKn9JZgVDe9zF0J9H4SRVzKILK6iZ9IZQ==} + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - '@types/istanbul-lib-coverage@2.0.4': - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + '@changesets/get-dependents-graph@2.1.3': + resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} - '@types/js-levenshtein@1.1.1': - resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} + '@changesets/get-release-plan@4.0.13': + resolution: {integrity: sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==} - '@types/json-schema@7.0.10': - resolution: {integrity: sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==} + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - '@types/node@17.0.22': - resolution: {integrity: sha512-8FwbVoG4fy+ykY86XCAclKZDORttqE5/s7dyWZKLXTdv3vRy5HozBEinG5IqhvPXXzIZEcTVbuHlQEI6iuwcmw==} + '@changesets/git@3.0.4': + resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} - '@types/semver@7.3.13': - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} - '@types/set-cookie-parser@2.4.2': - resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} + '@changesets/parse@0.4.1': + resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} - '@typescript-eslint/eslint-plugin@5.42.0': - resolution: {integrity: sha512-5TJh2AgL6+wpL8H/GTSjNb4WrjKoR2rqvFxR/DDTqYNk6uXn8BJMEcncLSpMbf/XV1aS0jAjYwn98uvVCiAywQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@changesets/pre@2.0.2': + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} - '@typescript-eslint/parser@5.42.0': - resolution: {integrity: sha512-Ixh9qrOTDRctFg3yIwrLkgf33AHyEIn6lhyf5cCfwwiGtkWhNpVKlEZApi3inGQR/barWnY7qY8FbGKBO7p3JA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@changesets/read@0.6.5': + resolution: {integrity: sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==} - '@typescript-eslint/scope-manager@5.42.0': - resolution: {integrity: sha512-l5/3IBHLH0Bv04y+H+zlcLiEMEMjWGaCX6WyHE5Uk2YkSGAMlgdUPsT/ywTSKgu9D1dmmKMYgYZijObfA39Wow==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} - '@typescript-eslint/type-utils@5.42.0': - resolution: {integrity: sha512-HW14TXC45dFVZxnVW8rnUGnvYyRC0E/vxXShFCthcC9VhVTmjqOmtqj6H5rm9Zxv+ORxKA/1aLGD7vmlLsdlOg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - '@typescript-eslint/types@5.42.0': - resolution: {integrity: sha512-t4lzO9ZOAUcHY6bXQYRuu+3SSYdD9TS8ooApZft4WARt4/f2Cj/YpvbTe8A4GuhT4bNW72goDMOy7SW71mZwGw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} - '@typescript-eslint/typescript-estree@5.42.0': - resolution: {integrity: sha512-2O3vSq794x3kZGtV7i4SCWZWCwjEtkWfVqX4m5fbUBomOsEOyd6OAD1qU2lbvV5S8tgy/luJnOYluNyYVeOTTg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} - '@typescript-eslint/utils@5.42.0': - resolution: {integrity: sha512-JZ++3+h1vbeG1NUECXQZE3hg0kias9kOtcQr3+JVQ3whnjvKuMyktJAAIj6743OeNPnGBmjj7KEmiDL7qsdnCQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} - '@typescript-eslint/visitor-keys@5.42.0': - resolution: {integrity: sha512-QHbu5Hf/2lOEOwy+IUw0GoSCuAzByTAWWrOTKzTzsotiUnWFpuKnXcAhC9YztAf2EElQ0VvIK+pHJUPkM0q7jg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@esbuild/aix-ppc64@0.25.11': + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - '@vitest/coverage-c8@0.24.4': - resolution: {integrity: sha512-1mhYQip6IJw1p9hzM+sH8O/RbILMe7FwScWI7COoMGAThdDRytDjmOal38F/EVrIPZY3nZ5hf7S7JFGjbb4bTg==} - deprecated: v8 coverage is moved to @vitest/coverage-v8 package + '@esbuild/aix-ppc64@0.25.8': + resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - '@xmldom/xmldom@0.7.5': - resolution: {integrity: sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A==} - engines: {node: '>=10.0.0'} - deprecated: this version is no longer supported, please update to at least 0.8.* + '@esbuild/android-arm64@0.25.11': + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@esbuild/android-arm64@0.25.8': + resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] - acorn@8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} - engines: {node: '>=0.4.0'} - hasBin: true + '@esbuild/android-arm@0.25.11': + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + '@esbuild/android-arm@0.25.8': + resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + '@esbuild/android-x64@0.25.11': + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + '@esbuild/android-x64@0.25.8': + resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + '@esbuild/darwin-arm64@0.25.11': + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + '@esbuild/darwin-arm64@0.25.8': + resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] - anymatch@3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} - engines: {node: '>= 8'} + '@esbuild/darwin-x64@0.25.11': + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + '@esbuild/darwin-x64@0.25.8': + resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + '@esbuild/freebsd-arm64@0.25.11': + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] - assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + '@esbuild/freebsd-arm64@0.25.8': + resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + '@esbuild/freebsd-x64@0.25.11': + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + '@esbuild/freebsd-x64@0.25.8': + resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} + '@esbuild/linux-arm64@0.25.11': + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + '@esbuild/linux-arm64@0.25.8': + resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + '@esbuild/linux-arm@0.25.11': + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + '@esbuild/linux-arm@0.25.8': + resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + '@esbuild/linux-ia32@0.25.11': + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] - bundle-require@3.1.0: - resolution: {integrity: sha512-IIXtAO7fKcwPHNPt9kY/WNVJqy7NDy6YqJvv6ENH0TOZoJ+yjpEsn1w40WKZbR2ibfu5g1rfgJTvmFHpm5aOMA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.13' + '@esbuild/linux-ia32@0.25.8': + resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] - bytes-iec@3.1.1: - resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} - engines: {node: '>= 0.8'} + '@esbuild/linux-loong64@0.25.11': + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] - c8@7.12.0: - resolution: {integrity: sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==} - engines: {node: '>=10.12.0'} - hasBin: true + '@esbuild/linux-loong64@0.25.8': + resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} + '@esbuild/linux-mips64el@0.25.11': + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + '@esbuild/linux-mips64el@0.25.8': + resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] - chai@4.3.6: - resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} - engines: {node: '>=4'} + '@esbuild/linux-ppc64@0.25.11': + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] - chalk@4.1.1: - resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} - engines: {node: '>=10'} + '@esbuild/linux-ppc64@0.25.8': + resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + '@esbuild/linux-riscv64@0.25.11': + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + '@esbuild/linux-riscv64@0.25.8': + resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] - check-error@1.0.2: - resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + '@esbuild/linux-s390x@0.25.11': + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + '@esbuild/linux-s390x@0.25.8': + resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] - ci-job-number@1.2.2: - resolution: {integrity: sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==} + '@esbuild/linux-x64@0.25.11': + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + '@esbuild/linux-x64@0.25.8': + resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] - cli-spinners@2.6.1: - resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} - engines: {node: '>=6'} + '@esbuild/netbsd-arm64@0.25.11': + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] - cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} + '@esbuild/netbsd-arm64@0.25.8': + resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] - cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + '@esbuild/netbsd-x64@0.25.11': + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} + '@esbuild/netbsd-x64@0.25.8': + resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + '@esbuild/openbsd-arm64@0.25.11': + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + '@esbuild/openbsd-arm64@0.25.8': + resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} + '@esbuild/openbsd-x64@0.25.11': + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + '@esbuild/openbsd-x64@0.25.8': + resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.11': + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] - convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + '@esbuild/openharmony-arm64@0.25.8': + resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] - cookie@0.4.2: - resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} - engines: {node: '>= 0.6'} + '@esbuild/sunos-x64@0.25.11': + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] - cross-fetch@3.1.5: - resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + '@esbuild/sunos-x64@0.25.8': + resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + '@esbuild/win32-arm64@0.25.11': + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} + '@esbuild/win32-arm64@0.25.8': + resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.11': + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.25.8': + resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.11': + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.25.8': + resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - supports-color: '*' + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/compat@1.3.1': + resolution: {integrity: sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.40 || 9 peerDependenciesMeta: - supports-color: + eslint: optional: true - deep-eql@3.0.1: - resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} - engines: {node: '>=0.12'} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + '@eslint/config-helpers@0.3.0': + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - defaults@1.0.3: - resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} + '@eslint/core@0.15.1': + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + '@eslint/js@9.32.0': + resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - esbuild-android-64@0.14.27: - resolution: {integrity: sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] + '@eslint/plugin-kit@0.3.4': + resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - esbuild-android-64@0.15.12: - resolution: {integrity: sha512-MJKXwvPY9g0rGps0+U65HlTsM1wUs9lbjt5CU19RESqycGFDRijMDQsh68MtbzkqWSRdEtiKS1mtPzKneaAI0Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - esbuild-android-arm64@0.14.27: - resolution: {integrity: sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] + '@floating-ui/dom@1.7.3': + resolution: {integrity: sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==} - esbuild-android-arm64@0.15.12: - resolution: {integrity: sha512-Hc9SEcZbIMhhLcvhr1DH+lrrec9SFTiRzfJ7EGSBZiiw994gfkVV6vG0sLWqQQ6DD7V4+OggB+Hn0IRUdDUqvA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] + '@floating-ui/react-dom@2.1.5': + resolution: {integrity: sha512-HDO/1/1oH9fjj4eLgegrlH3dklZpHtUYYFiVwMUwfGvk9jWDRWqkklA2/NFScknrcNSspbV868WjXORvreDX+Q==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' - esbuild-darwin-64@0.14.27: - resolution: {integrity: sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - esbuild-darwin-64@0.15.12: - resolution: {integrity: sha512-qkmqrTVYPFiePt5qFjP8w/S+GIUMbt6k8qmiPraECUWfPptaPJUGkCKrWEfYFRWB7bY23FV95rhvPyh/KARP8Q==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] + '@formatjs/intl-localematcher@0.6.2': + resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} - esbuild-darwin-arm64@0.14.27: - resolution: {integrity: sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} - esbuild-darwin-arm64@0.15.12: - resolution: {integrity: sha512-z4zPX02tQ41kcXMyN3c/GfZpIjKoI/BzHrdKUwhC/Ki5BAhWv59A9M8H+iqaRbwpzYrYidTybBwiZAIWCLJAkw==} - engines: {node: '>=12'} + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@ianvs/prettier-plugin-sort-imports@4.5.1': + resolution: {integrity: sha512-vOQwIyQHnHz0ikvHEQDzwUkNfX74o/7qNEpm9LiPtyBvCg/AU/DOkhwe1o92chPS1QzS6G7HeiO+OwIt8a358A==} + peerDependencies: + '@prettier/plugin-oxc': ^0.0.4 + '@vue/compiler-sfc': 2.7.x || 3.x + prettier: 2 || 3 || ^4.0.0-0 + peerDependenciesMeta: + '@prettier/plugin-oxc': + optional: true + '@vue/compiler-sfc': + optional: true + + '@img/sharp-darwin-arm64@0.34.3': + resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - esbuild-freebsd-64@0.14.27: - resolution: {integrity: sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - - esbuild-freebsd-64@0.15.12: - resolution: {integrity: sha512-XFL7gKMCKXLDiAiBjhLG0XECliXaRLTZh6hsyzqUqPUf/PY4C6EJDTKIeqqPKXaVJ8+fzNek88285krSz1QECw==} - engines: {node: '>=12'} + '@img/sharp-darwin-x64@0.34.3': + resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] - os: [freebsd] + os: [darwin] - esbuild-freebsd-arm64@0.14.27: - resolution: {integrity: sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA==} - engines: {node: '>=12'} + '@img/sharp-libvips-darwin-arm64@1.2.0': + resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==} cpu: [arm64] - os: [freebsd] + os: [darwin] - esbuild-freebsd-arm64@0.15.12: - resolution: {integrity: sha512-jwEIu5UCUk6TjiG1X+KQnCGISI+ILnXzIzt9yDVrhjug2fkYzlLbl0K43q96Q3KB66v6N1UFF0r5Ks4Xo7i72g==} - engines: {node: '>=12'} + '@img/sharp-libvips-darwin-x64@1.2.0': + resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.0': + resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==} cpu: [arm64] - os: [freebsd] + os: [linux] - esbuild-linux-32@0.14.27: - resolution: {integrity: sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw==} - engines: {node: '>=12'} - cpu: [ia32] + '@img/sharp-libvips-linux-arm@1.2.0': + resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==} + cpu: [arm] os: [linux] - esbuild-linux-32@0.15.12: - resolution: {integrity: sha512-uSQuSEyF1kVzGzuIr4XM+v7TPKxHjBnLcwv2yPyCz8riV8VUCnO/C4BF3w5dHiVpCd5Z1cebBtZJNlC4anWpwA==} - engines: {node: '>=12'} - cpu: [ia32] + '@img/sharp-libvips-linux-ppc64@1.2.0': + resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==} + cpu: [ppc64] os: [linux] - esbuild-linux-64@0.14.27: - resolution: {integrity: sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg==} - engines: {node: '>=12'} - cpu: [x64] + '@img/sharp-libvips-linux-s390x@1.2.0': + resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==} + cpu: [s390x] os: [linux] - esbuild-linux-64@0.15.12: - resolution: {integrity: sha512-QcgCKb7zfJxqT9o5z9ZUeGH1k8N6iX1Y7VNsEi5F9+HzN1OIx7ESxtQXDN9jbeUSPiRH1n9cw6gFT3H4qbdvcA==} - engines: {node: '>=12'} + '@img/sharp-libvips-linux-x64@1.2.0': + resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==} cpu: [x64] os: [linux] - esbuild-linux-arm64@0.14.27: - resolution: {integrity: sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ==} - engines: {node: '>=12'} + '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==} cpu: [arm64] os: [linux] - esbuild-linux-arm64@0.15.12: - resolution: {integrity: sha512-HtNq5xm8fUpZKwWKS2/YGwSfTF+339L4aIA8yphNKYJckd5hVdhfdl6GM2P3HwLSCORS++++7++//ApEwXEuAQ==} - engines: {node: '>=12'} - cpu: [arm64] + '@img/sharp-libvips-linuxmusl-x64@1.2.0': + resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==} + cpu: [x64] os: [linux] - esbuild-linux-arm@0.14.27: - resolution: {integrity: sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw==} - engines: {node: '>=12'} - cpu: [arm] + '@img/sharp-linux-arm64@0.34.3': + resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] os: [linux] - esbuild-linux-arm@0.15.12: - resolution: {integrity: sha512-Wf7T0aNylGcLu7hBnzMvsTfEXdEdJY/hY3u36Vla21aY66xR0MS5I1Hw8nVquXjTN0A6fk/vnr32tkC/C2lb0A==} - engines: {node: '>=12'} + '@img/sharp-linux-arm@0.34.3': + resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - esbuild-linux-mips64le@0.14.27: - resolution: {integrity: sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A==} - engines: {node: '>=12'} - cpu: [mips64el] + '@img/sharp-linux-ppc64@0.34.3': + resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] os: [linux] - esbuild-linux-mips64le@0.15.12: - resolution: {integrity: sha512-Qol3+AvivngUZkTVFgLpb0H6DT+N5/zM3V1YgTkryPYFeUvuT5JFNDR3ZiS6LxhyF8EE+fiNtzwlPqMDqVcc6A==} - engines: {node: '>=12'} - cpu: [mips64el] + '@img/sharp-linux-s390x@0.34.3': + resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] os: [linux] - esbuild-linux-ppc64le@0.14.27: - resolution: {integrity: sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA==} - engines: {node: '>=12'} - cpu: [ppc64] + '@img/sharp-linux-x64@0.34.3': + resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] os: [linux] - esbuild-linux-ppc64le@0.15.12: - resolution: {integrity: sha512-4D8qUCo+CFKaR0cGXtGyVsOI7w7k93Qxb3KFXWr75An0DHamYzq8lt7TNZKoOq/Gh8c40/aKaxvcZnTgQ0TJNg==} - engines: {node: '>=12'} - cpu: [ppc64] + '@img/sharp-linuxmusl-arm64@0.34.3': + resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] os: [linux] - esbuild-linux-riscv64@0.14.27: - resolution: {integrity: sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg==} - engines: {node: '>=12'} - cpu: [riscv64] + '@img/sharp-linuxmusl-x64@0.34.3': + resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] os: [linux] - esbuild-linux-riscv64@0.15.12: - resolution: {integrity: sha512-G9w6NcuuCI6TUUxe6ka0enjZHDnSVK8bO+1qDhMOCtl7Tr78CcZilJj8SGLN00zO5iIlwNRZKHjdMpfFgNn1VA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] + '@img/sharp-wasm32@0.34.3': + resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] - esbuild-linux-s390x@0.14.27: - resolution: {integrity: sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] + '@img/sharp-win32-arm64@0.34.3': + resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] - esbuild-linux-s390x@0.15.12: - resolution: {integrity: sha512-Lt6BDnuXbXeqSlVuuUM5z18GkJAZf3ERskGZbAWjrQoi9xbEIsj/hEzVnSAFLtkfLuy2DE4RwTcX02tZFunXww==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] + '@img/sharp-win32-ia32@0.34.3': + resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] - esbuild-netbsd-64@0.14.27: - resolution: {integrity: sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q==} - engines: {node: '>=12'} + '@img/sharp-win32-x64@0.34.3': + resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] - os: [netbsd] + os: [win32] - esbuild-netbsd-64@0.15.12: - resolution: {integrity: sha512-jlUxCiHO1dsqoURZDQts+HK100o0hXfi4t54MNRMCAqKGAV33JCVvMplLAa2FwviSojT/5ZG5HUfG3gstwAG8w==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] + '@inquirer/ansi@1.0.1': + resolution: {integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==} + engines: {node: '>=18'} - esbuild-openbsd-64@0.14.27: - resolution: {integrity: sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] + '@inquirer/confirm@5.1.19': + resolution: {integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - esbuild-openbsd-64@0.15.12: - resolution: {integrity: sha512-1o1uAfRTMIWNOmpf8v7iudND0L6zRBYSH45sofCZywrcf7NcZA+c7aFsS1YryU+yN7aRppTqdUK1PgbZVaB1Dw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] + '@inquirer/core@10.3.0': + resolution: {integrity: sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - esbuild-plugin-umd-wrapper@3.0.0: - resolution: {integrity: sha512-Ht3jrO7r8oF8FgPIhMnfNQvYLHhz2QA1ggPqfBhoVq0VfYNczqJ6nwQ4PhO5UvrUymn+Q0Nc50xpiDbxI+KR2Q==} + '@inquirer/figures@1.0.14': + resolution: {integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==} + engines: {node: '>=18'} - esbuild-sunos-64@0.14.27: - resolution: {integrity: sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] + '@inquirer/type@3.0.9': + resolution: {integrity: sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} - esbuild-sunos-64@0.15.12: - resolution: {integrity: sha512-nkl251DpoWoBO9Eq9aFdoIt2yYmp4I3kvQjba3jFKlMXuqQ9A4q+JaqdkCouG3DHgAGnzshzaGu6xofGcXyPXg==} + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + + '@jridgewell/resolve-uri@3.1.0': + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + + '@mswjs/interceptors@0.39.8': + resolution: {integrity: sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==} + engines: {node: '>=18'} + + '@next/env@15.5.6': + resolution: {integrity: sha512-3qBGRW+sCGzgbpc5TS1a0p7eNxnOarGVQhZxfvTdnV0gFI61lX7QNtQ4V1TSREctXzYn5NetbUsLvyqwLFJM6Q==} + + '@next/eslint-plugin-next@15.4.6': + resolution: {integrity: sha512-2NOu3ln+BTcpnbIDuxx6MNq+pRrCyey4WSXGaJIyt0D2TYicHeO9QrUENNjcf673n3B1s7hsiV5xBYRCK1Q8kA==} + + '@next/swc-darwin-arm64@15.5.6': + resolution: {integrity: sha512-ES3nRz7N+L5Umz4KoGfZ4XX6gwHplwPhioVRc25+QNsDa7RtUF/z8wJcbuQ2Tffm5RZwuN2A063eapoJ1u4nPg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.5.6': + resolution: {integrity: sha512-JIGcytAyk9LQp2/nuVZPAtj8uaJ/zZhsKOASTjxDug0SPU9LAM3wy6nPU735M1OqacR4U20LHVF5v5Wnl9ptTA==} + engines: {node: '>= 10'} cpu: [x64] - os: [sunos] + os: [darwin] - esbuild-windows-32@0.14.27: - resolution: {integrity: sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] + '@next/swc-linux-arm64-gnu@15.5.6': + resolution: {integrity: sha512-qvz4SVKQ0P3/Im9zcS2RmfFL/UCQnsJKJwQSkissbngnB/12c6bZTCB0gHTexz1s6d/mD0+egPKXAIRFVS7hQg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] - esbuild-windows-32@0.15.12: - resolution: {integrity: sha512-WlGeBZHgPC00O08luIp5B2SP4cNCp/PcS+3Pcg31kdcJPopHxLkdCXtadLU9J82LCfw4TVls21A6lilQ9mzHrw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] + '@next/swc-linux-arm64-musl@15.5.6': + resolution: {integrity: sha512-FsbGVw3SJz1hZlvnWD+T6GFgV9/NYDeLTNQB2MXoPN5u9VA9OEDy6fJEfePfsUKAhJufFbZLgp0cPxMuV6SV0w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] - esbuild-windows-64@0.14.27: - resolution: {integrity: sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg==} - engines: {node: '>=12'} + '@next/swc-linux-x64-gnu@15.5.6': + resolution: {integrity: sha512-3QnHGFWlnvAgyxFxt2Ny8PTpXtQD7kVEeaFat5oPAHHI192WKYB+VIKZijtHLGdBBvc16tiAkPTDmQNOQ0dyrA==} + engines: {node: '>= 10'} cpu: [x64] - os: [win32] + os: [linux] - esbuild-windows-64@0.15.12: - resolution: {integrity: sha512-VActO3WnWZSN//xjSfbiGOSyC+wkZtI8I4KlgrTo5oHJM6z3MZZBCuFaZHd8hzf/W9KPhF0lY8OqlmWC9HO5AA==} - engines: {node: '>=12'} + '@next/swc-linux-x64-musl@15.5.6': + resolution: {integrity: sha512-OsGX148sL+TqMK9YFaPFPoIaJKbFJJxFzkXZljIgA9hjMjdruKht6xDCEv1HLtlLNfkx3c5w2GLKhj7veBQizQ==} + engines: {node: '>= 10'} cpu: [x64] - os: [win32] + os: [linux] - esbuild-windows-arm64@0.14.27: - resolution: {integrity: sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg==} - engines: {node: '>=12'} + '@next/swc-win32-arm64-msvc@15.5.6': + resolution: {integrity: sha512-ONOMrqWxdzXDJNh2n60H6gGyKed42Ieu6UTVPZteXpuKbLZTH4G4eBMsr5qWgOBA+s7F+uB4OJbZnrkEDnZ5Fg==} + engines: {node: '>= 10'} cpu: [arm64] os: [win32] - esbuild-windows-arm64@0.15.12: - resolution: {integrity: sha512-Of3MIacva1OK/m4zCNIvBfz8VVROBmQT+gRX6pFTLPngFYcj6TFH/12VveAqq1k9VB2l28EoVMNMUCcmsfwyuA==} - engines: {node: '>=12'} - cpu: [arm64] + '@next/swc-win32-x64-msvc@15.5.6': + resolution: {integrity: sha512-pxK4VIjFRx1MY92UycLOOw7dTdvccWsNETQ0kDHkBlcFH1GrTLUjSiHU1ohrznnux6TqRHgv5oflhfIWZwVROQ==} + engines: {node: '>= 10'} + cpu: [x64] os: [win32] - esbuild@0.14.27: - resolution: {integrity: sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q==} - engines: {node: '>=12'} - hasBin: true + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} - esbuild@0.15.12: - resolution: {integrity: sha512-PcT+/wyDqJQsRVhaE9uX/Oq4XLrFh0ce/bs2TJh4CSaw9xuvI+xFrH2nAYOADbhQjUgAhNWC5LKoUsakm4dxng==} - engines: {node: '>=12'} - hasBin: true + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} - eslint-config-prettier@8.5.0: - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} - hasBin: true + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + + '@orama/orama@3.1.16': + resolution: {integrity: sha512-scSmQBD8eANlMUOglxHrN1JdSW8tDghsPuS83otqealBiIeMukCQMOf/wc0JJjDXomqwNdEQFLXLGHrU6PGxuA==} + engines: {node: '>= 20.0.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@radix-ui/number@1.1.1': + resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} + + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-accordion@1.2.12': + resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==} peerDependencies: - eslint: '>=7.0.0' + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - eslint-plugin-prettier@4.2.1: - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} - engines: {node: '>=12.0.0'} + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} peerDependencies: - eslint: '>=7.28.0' - eslint-config-prettier: '*' - prettier: '>=2.0.0' + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - eslint-config-prettier: + '@types/react': + optional: true + '@types/react-dom': optional: true - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + '@radix-ui/react-collapsible@1.1.12': + resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - eslint-scope@7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - eslint-utils@3.0.0: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} peerDependencies: - eslint: '>=5' + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - eslint-visitor-keys@3.3.0: - resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - eslint@8.26.0: - resolution: {integrity: sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - espree@9.4.0: - resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - esquery@1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} - engines: {node: '>=0.10'} + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + '@radix-ui/react-navigation-menu@1.2.14': + resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-scroll-area@1.2.10': + resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-previous@1.1.1': + resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.46.2': + resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.46.2': + resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.46.2': + resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.46.2': + resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.46.2': + resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.46.2': + resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.46.2': + resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.46.2': + resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.46.2': + resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.46.2': + resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.46.2': + resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.46.2': + resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.46.2': + resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.46.2': + resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} + cpu: [x64] + os: [win32] + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@shikijs/core@3.13.0': + resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==} + + '@shikijs/engine-javascript@3.13.0': + resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==} + + '@shikijs/engine-oniguruma@3.13.0': + resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==} + + '@shikijs/langs@3.13.0': + resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==} + + '@shikijs/rehype@3.13.0': + resolution: {integrity: sha512-dxvB5gXEpiTI3beGwOPEwxFxQNmUWM4cwOWbvUmL6DnQJGl18/+cCjVHZK2OnasmU0v7SvM39Zh3iliWdwfBDA==} + + '@shikijs/themes@3.13.0': + resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==} + + '@shikijs/transformers@3.13.0': + resolution: {integrity: sha512-833lcuVzcRiG+fXvgslWsM2f4gHpjEgui1ipIknSizRuTgMkNZupiXE5/TVJ6eSYfhNBFhBZKkReKWO2GgYmqA==} + + '@shikijs/types@3.13.0': + resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@size-limit/esbuild@7.0.8': + resolution: {integrity: sha512-AzCrxJJThDvHrBNoolebYVgXu46c6HuS3fOxoXr3V0YWNM0qz81z5F3j7RruzboZnls8ZgME4WrH6GM5rB9gtA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + peerDependencies: + size-limit: 7.0.8 + + '@size-limit/file@7.0.8': + resolution: {integrity: sha512-1KeFQuMXIXAH/iELqIX7x+YNYDFvzIvmxcp9PrdwEoSNL0dXdaDIo9WE/yz8xvOmUcKaLfqbWkL75DM0k91WHQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + peerDependencies: + size-limit: 7.0.8 + + '@size-limit/preset-small-lib@7.0.8': + resolution: {integrity: sha512-CT8nIYA/c2CSD+X4rAUgwqYccQMahJ6rBnaZxvi3YKFdkXIbuGNXHNjHsYaFksgwG9P4UjG/unyO5L73f3zQBw==} + peerDependencies: + size-limit: 7.0.8 + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@swc/core-darwin-arm64@1.10.4': + resolution: {integrity: sha512-sV/eurLhkjn/197y48bxKP19oqcLydSel42Qsy2zepBltqUx+/zZ8+/IS0Bi7kaWVFxerbW1IPB09uq8Zuvm3g==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.10.4': + resolution: {integrity: sha512-gjYNU6vrAUO4+FuovEo9ofnVosTFXkF0VDuo1MKPItz6e2pxc2ale4FGzLw0Nf7JB1sX4a8h06CN16/pLJ8Q2w==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.10.4': + resolution: {integrity: sha512-zd7fXH5w8s+Sfvn2oO464KDWl+ZX1MJiVmE4Pdk46N3PEaNwE0koTfgx2vQRqRG4vBBobzVvzICC3618WcefOA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.10.4': + resolution: {integrity: sha512-+UGfoHDxsMZgFD3tABKLeEZHqLNOkxStu+qCG7atGBhS4Slri6h6zijVvf4yI5X3kbXdvc44XV/hrP/Klnui2A==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.10.4': + resolution: {integrity: sha512-cDDj2/uYsOH0pgAnDkovLZvKJpFmBMyXkxEG6Q4yw99HbzO6QzZ5HDGWGWVq/6dLgYKlnnmpjZCPPQIu01mXEg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.10.4': + resolution: {integrity: sha512-qJXh9D6Kf5xSdGWPINpLGixAbB5JX8JcbEJpRamhlDBoOcQC79dYfOMEIxWPhTS1DGLyFakAx2FX/b2VmQmj0g==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.10.4': + resolution: {integrity: sha512-A76lIAeyQnHCVt0RL/pG+0er8Qk9+acGJqSZOZm67Ve3B0oqMd871kPtaHBM0BW3OZAhoILgfHW3Op9Q3mx3Cw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.10.4': + resolution: {integrity: sha512-e6j5kBu4fIY7fFxFxnZI0MlEovRvp50Lg59Fw+DVbtqHk3C85dckcy5xKP+UoXeuEmFceauQDczUcGs19SRGSQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.10.4': + resolution: {integrity: sha512-RSYHfdKgNXV/amY5Tqk1EWVsyQnhlsM//jeqMLw5Fy9rfxP592W9UTumNikNRPdjI8wKKzNMXDb1U29tQjN0dg==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.10.4': + resolution: {integrity: sha512-1ujYpaqfqNPYdwKBlvJnOqcl+Syn3UrQ4XE0Txz6zMYgyh6cdU6a3pxqLqIUSJ12MtXRA9ZUhEz1ekU3LfLWXw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.10.4': + resolution: {integrity: sha512-ut3zfiTLORMxhr6y/GBxkHmzcGuVpwJYX4qyXWuBKkpw/0g0S5iO1/wW7RnLnZbAi8wS/n0atRZoaZlXWBkeJg==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@swc/types@0.1.17': + resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==} + + '@tailwindcss/node@4.1.11': + resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} + + '@tailwindcss/oxide-android-arm64@4.1.11': + resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.11': + resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.11': + resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@tailwindcss/oxide-freebsd-x64@4.1.11': + resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.11': + resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.11': + resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.11': + resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.11': + resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} + + '@ts-morph/common@0.28.1': + resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==} + + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/humps@2.0.1': + resolution: {integrity: sha512-cxIGJjiOQRl5s/KjqoTa0u39qKrVD3T6+6eGsERva0MLBp9AMVG8udKn9JZgVDe9zF0J9H4SRVzKILK6iZ9IZQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@24.2.0': + resolution: {integrity: sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==} + + '@types/react-dom@19.1.7': + resolution: {integrity: sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==} + peerDependencies: + '@types/react': ^19.0.0 + + '@types/react@19.1.9': + resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} + + '@types/statuses@2.0.6': + resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@typescript-eslint/eslint-plugin@8.39.0': + resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.39.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.39.0': + resolution: {integrity: sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.39.0': + resolution: {integrity: sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.39.0': + resolution: {integrity: sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.39.0': + resolution: {integrity: sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.39.0': + resolution: {integrity: sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.39.0': + resolution: {integrity: sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.39.0': + resolution: {integrity: sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.39.0': + resolution: {integrity: sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.39.0': + resolution: {integrity: sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@vitest/coverage-v8@3.2.4': + resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} + peerDependencies: + '@vitest/browser': 3.2.4 + vitest: 3.2.4 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + 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'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + ast-v8-to-istanbul@0.3.4: + resolution: {integrity: sha512-cxrAnZNLBnQwBPByK4CeDaw5sWZtMilJE/Q3iDA0aamgaIVNDF9T6K2/8DfYDZEejZ2jNnDrG9m8MY72HFd0KA==} + + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.10.3: + resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.25.1: + resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + + bytes-iec@3.1.1: + resolution: {integrity: sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==} + 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.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001731: + resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chai@5.2.1: + resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + engines: {node: '>=18'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + ci-job-number@1.2.2: + resolution: {integrity: sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA==} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + code-block-writer@13.0.3: + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + compute-scroll-into-view@3.1.1: + resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + cross-fetch@3.1.5: + resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.198: + resolution: {integrity: sha512-G5COfnp3w+ydVu80yprgWSfmfQaYRh9DOxfhAxstLyetKaLyl55QrNjx8C38Pc/C+RaDmb1M0Lk8wPEMQ+bGgQ==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + + 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-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + esbuild-android-64@0.14.27: + resolution: {integrity: sha512-LuEd4uPuj/16Y8j6kqy3Z2E9vNY9logfq8Tq+oTE2PZVuNs3M1kj5Qd4O95ee66yDGb3isaOCV7sOLDwtMfGaQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + esbuild-android-arm64@0.14.27: + resolution: {integrity: sha512-E8Ktwwa6vX8q7QeJmg8yepBYXaee50OdQS3BFtEHKrzbV45H4foMOeEE7uqdjGQZFBap5VAqo7pvjlyA92wznQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + esbuild-darwin-64@0.14.27: + resolution: {integrity: sha512-czw/kXl/1ZdenPWfw9jDc5iuIYxqUxgQ/Q+hRd4/3udyGGVI31r29LCViN2bAJgGvQkqyLGVcG03PJPEXQ5i2g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + esbuild-darwin-arm64@0.14.27: + resolution: {integrity: sha512-BEsv2U2U4o672oV8+xpXNxN9bgqRCtddQC6WBh4YhXKDcSZcdNh7+6nS+DM2vu7qWIWNA4JbRG24LUUYXysimQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + esbuild-freebsd-64@0.14.27: + resolution: {integrity: sha512-7FeiFPGBo+ga+kOkDxtPmdPZdayrSzsV9pmfHxcyLKxu+3oTcajeZlOO1y9HW+t5aFZPiv7czOHM4KNd0tNwCA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + esbuild-freebsd-arm64@0.14.27: + resolution: {integrity: sha512-8CK3++foRZJluOWXpllG5zwAVlxtv36NpHfsbWS7TYlD8S+QruXltKlXToc/5ZNzBK++l6rvRKELu/puCLc7jA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + esbuild-linux-32@0.14.27: + resolution: {integrity: sha512-qhNYIcT+EsYSBClZ5QhLzFzV5iVsP1YsITqblSaztr3+ZJUI+GoK8aXHyzKd7/CKKuK93cxEMJPpfi1dfsOfdw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + esbuild-linux-64@0.14.27: + resolution: {integrity: sha512-ESjck9+EsHoTaKWlFKJpPZRN26uiav5gkI16RuI8WBxUdLrrAlYuYSndxxKgEn1csd968BX/8yQZATYf/9+/qg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + esbuild-linux-arm64@0.14.27: + resolution: {integrity: sha512-no6Mi17eV2tHlJnqBHRLekpZ2/VYx+NfGxKcBE/2xOMYwctsanCaXxw4zapvNrGE9X38vefVXLz6YCF8b1EHiQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + esbuild-linux-arm@0.14.27: + resolution: {integrity: sha512-JnnmgUBdqLQO9hoNZQqNHFWlNpSX82vzB3rYuCJMhtkuaWQEmQz6Lec1UIxJdC38ifEghNTBsF9bbe8dFilnCw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + esbuild-linux-mips64le@0.14.27: + resolution: {integrity: sha512-NolWP2uOvIJpbwpsDbwfeExZOY1bZNlWE/kVfkzLMsSgqeVcl5YMen/cedRe9mKnpfLli+i0uSp7N+fkKNU27A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + esbuild-linux-ppc64le@0.14.27: + resolution: {integrity: sha512-/7dTjDvXMdRKmsSxKXeWyonuGgblnYDn0MI1xDC7J1VQXny8k1qgNp6VmrlsawwnsymSUUiThhkJsI+rx0taNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + esbuild-linux-riscv64@0.14.27: + resolution: {integrity: sha512-D+aFiUzOJG13RhrSmZgrcFaF4UUHpqj7XSKrIiCXIj1dkIkFqdrmqMSOtSs78dOtObWiOrFCDDzB24UyeEiNGg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + esbuild-linux-s390x@0.14.27: + resolution: {integrity: sha512-CD/D4tj0U4UQjELkdNlZhQ8nDHU5rBn6NGp47Hiz0Y7/akAY5i0oGadhEIg0WCY/HYVXFb3CsSPPwaKcTOW3bg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + esbuild-netbsd-64@0.14.27: + resolution: {integrity: sha512-h3mAld69SrO1VoaMpYl3a5FNdGRE/Nqc+E8VtHOag4tyBwhCQXxtvDDOAKOUQexBGca0IuR6UayQ4ntSX5ij1Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + esbuild-openbsd-64@0.14.27: + resolution: {integrity: sha512-xwSje6qIZaDHXWoPpIgvL+7fC6WeubHHv18tusLYMwL+Z6bEa4Pbfs5IWDtQdHkArtfxEkIZz77944z8MgDxGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + esbuild-sunos-64@0.14.27: + resolution: {integrity: sha512-/nBVpWIDjYiyMhuqIqbXXsxBc58cBVH9uztAOIfWShStxq9BNBik92oPQPJ57nzWXRNKQUEFWr4Q98utDWz7jg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + esbuild-windows-32@0.14.27: + resolution: {integrity: sha512-Q9/zEjhZJ4trtWhFWIZvS/7RUzzi8rvkoaS9oiizkHTTKd8UxFwn/Mm2OywsAfYymgUYm8+y2b+BKTNEFxUekw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + esbuild-windows-64@0.14.27: + resolution: {integrity: sha512-b3y3vTSl5aEhWHK66ngtiS/c6byLf6y/ZBvODH1YkBM+MGtVL6jN38FdHUsZasCz9gFwYs/lJMVY9u7GL6wfYg==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + esbuild-windows-arm64@0.14.27: + resolution: {integrity: sha512-I/reTxr6TFMcR5qbIkwRGvldMIaiBu2+MP0LlD7sOlNXrfqIl9uNjsuxFPGEG4IRomjfQ5q8WT+xlF/ySVkqKg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + esbuild@0.14.27: + resolution: {integrity: sha512-MZQt5SywZS3hA9fXnMhR22dv0oPGh6QtjJRIYbgL1AeqAoQZE+Qn5ppGYQAoHv/vq827flj4tIJ79Mrdiwk46Q==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.25.11: + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.25.8: + resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.12.1: + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.32.0: + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-react-compiler@19.0.0-beta-af1b7da-20250417: + resolution: {integrity: sha512-m3eVzHqtXFtu6rViWx/kBhv9Jcpj+Q4pkfRWyF47TIBa+Jo8DAB90OoeDh0JR896rtG1OXogLKKd+b6lzFup0A==} + engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: '>=7' + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react@7.37.5: + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-plugin-turbo@2.5.5: + resolution: {integrity: sha512-IlN65X6W7rgK88u5xl1xC+7FIGKA7eyaca0yxZQ9CBNV6keAaqtjZQLw8ZfXdv7T+MzTLYkYOeOHAv8yCRUx4Q==} + peerDependencies: + eslint: '>6.6.0' + turbo: '>2.0.0' + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.32.0: + resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.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'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-value-to-estree@3.4.0: + resolution: {integrity: sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + engines: {node: '>=12.0.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-check@3.3.0: + resolution: {integrity: sha512-Zu6tZ4g0T4H9Tiz3tdNPEHrSbuICj7yhdOM9RCZKNMkpjZ9avDV3ORklXaEmh4zvkX24/bGZ9DxKKqWfXttUqw==} + engines: {node: '>=8.0.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + fix-dts-default-cjs-exports@1.0.1: + resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fumadocs-core@15.8.5: + resolution: {integrity: sha512-hyJtKGuB2J/5y7tDfI1EnGMKlNbSXM5N5cpwvgCY0DcBJwFMDG/GpSpaVRzh3aWy67pAYDZFIwdtbKXBa/q5bg==} + peerDependencies: + '@mixedbread/sdk': ^0.19.0 + '@oramacloud/client': 1.x.x || 2.x.x + '@tanstack/react-router': 1.x.x + '@types/react': '*' + algoliasearch: 5.x.x + lucide-react: '*' + next: 14.x.x || 15.x.x + react: 18.x.x || 19.x.x + react-dom: 18.x.x || 19.x.x + react-router: 7.x.x + waku: ^0.26.0 + peerDependenciesMeta: + '@mixedbread/sdk': + optional: true + '@oramacloud/client': + optional: true + '@tanstack/react-router': + optional: true + '@types/react': + optional: true + algoliasearch: + optional: true + lucide-react: + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + react-router: + optional: true + waku: + optional: true + + fumadocs-mdx@12.0.3: + resolution: {integrity: sha512-OYqbHSmzkejG+iUMlZJJOitaVbCgBdo/REc/9Sq1WaZ1vq6bH9PCFU0cKJlRdHbQSGRfVg5EJJy5uKy5+iNFGQ==} + hasBin: true + peerDependencies: + '@fumadocs/mdx-remote': ^1.4.0 + fumadocs-core: ^14.0.0 || ^15.0.0 + next: ^15.3.0 + react: '*' + vite: 6.x.x || 7.x.x + peerDependenciesMeta: + '@fumadocs/mdx-remote': + optional: true + next: + optional: true + react: + optional: true + vite: + optional: true + + fumadocs-typescript@4.0.11: + resolution: {integrity: sha512-X18YTMmOa6cN0APjFrVZNv8G1+wAYHPS6RPjjJshmkQt50SWRjpq38xMreIWyBF+Q9kkLReC9HkMeYbpZt7Pfg==} + peerDependencies: + '@types/react': '*' + fumadocs-core: ^15.7.0 + fumadocs-ui: ^15.7.0 + typescript: '*' + peerDependenciesMeta: + '@types/react': + optional: true + fumadocs-ui: + optional: true + + fumadocs-ui@15.8.5: + resolution: {integrity: sha512-9pyB+9rOOsrFnmmZ9xREp/OgVhyaSq2ocEpqTNbeQ7tlJ6JWbdFWfW0C9lRXprQEB6DJWUDtDxqKS5QXLH0EGA==} + peerDependencies: + '@types/react': '*' + next: 14.x.x || 15.x.x + react: 18.x.x || 19.x.x + react-dom: 18.x.x || 19.x.x + tailwindcss: ^3.4.14 || ^4.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + next: + optional: true + tailwindcss: + optional: true + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + 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-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + 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==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + headers-polyfill@4.0.3: + resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + human-id@4.1.1: + resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} + hasBin: true + + humps@2.0.1: + resolution: {integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ignore@5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + image-size@2.0.2: + resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==} + engines: {node: '>=16.x'} + hasBin: true + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} + hasBin: true + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lightningcss-darwin-arm64@1.30.1: + resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.1: + resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.1: + resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.1: + resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.1: + resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.1: + resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.1: + resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.1: + resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.1: + resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.1: + resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.30.1: + resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} + engines: {node: '>= 12.0.0'} + + lilconfig@2.0.6: + resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + engines: {node: '>=10'} + + 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==} + + load-tsconfig@0.2.3: + resolution: {integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@3.2.0: + resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@11.2.2: + resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lucide-react@0.539.0: + resolution: {integrity: sha512-VVISr+VF2krO91FeuCrm1rSOLACQUYVy7NQkzrOty52Y8TlTPcXcMdQFj9bYzBgXbWCiywlwSZ3Z8u6a+6bMlg==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + engines: {node: '>= 18'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msw@2.11.5: + resolution: {integrity: sha512-atFI4GjKSJComxcigz273honh8h4j5zzpk5kwG4tGm0TPcYne6bqmVrufeRll6auBeouIkXqZYXxVbWSWxM3RA==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: '>= 4.8.x' + peerDependenciesMeta: + typescript: + optional: true + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanospinner@1.0.0: + resolution: {integrity: sha512-14c2r2QQ9xfTmdbqdF51FKCNvww+0ZON9GeEHur+pBdOufoFvxD4CZQRaYWmFrGH3Nuv7PZ/9Q+wsV+hFSp32g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@15.5.6: + resolution: {integrity: sha512-zTxsnI3LQo3c9HSdSf91O1jMNsEzIXDShXd4wVdg9y5shwLqBXi4ZtUUJyB86KGVSJLZx0PFONvO54aheGX8QQ==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-to-yarn@3.0.1: + resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.3: + resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-manager-detector@0.2.11: + resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pirates@4.0.5: + resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + engines: {node: '>= 6'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-plugin-tailwindcss@0.6.14: + resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-hermes': '*' + '@prettier/plugin-oxc': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-multiline-arrays: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-hermes': + optional: true + '@prettier/plugin-oxc': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-multiline-arrays: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + + prettier@2.7.1: + resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + punycode@2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + + pure-rand@5.0.3: + resolution: {integrity: sha512-9N8x1h8dptBQpHyC7aZMS+iNOAm97WMGY0AFrguU1cpfW3I5jINkWe5BIY5md0ofy+1TCIELsVcm/GJXZSaPbw==} + + quansync@0.2.10: + resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-dom@19.1.0: + resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + peerDependencies: + react: ^19.1.0 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-medium-image-zoom@5.4.0: + resolution: {integrity: sha512-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.1: + resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.1.0: + resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + engines: {node: '>=0.10.0'} + + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + rettime@0.7.0: + resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup-plugin-analyzer@4.0.0: + resolution: {integrity: sha512-LL9GEt3bkXp6Wa19SNR5MWcvHNMvuTFYg+eYBZN2OIFhSWN+pEJUQXEKu5BsOeABob3x9PDaLKW7w5iOJnsESQ==} + engines: {node: '>=8.0.0'} + + rollup@4.46.2: + resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + + scroll-into-view-if-needed@3.1.0: + resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.3.5: + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + sharp@0.34.3: + resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shiki@3.13.0: + resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==} + + 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'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + size-limit@7.0.8: + resolution: {integrity: sha512-3h76c9E0e/nNhYLSR7IBI/bSoXICeo7EYkYjlyVqNIsu7KvN/PQmMbIXeyd2QKIF8iZKhaiZQoXLkGWbyPDtvQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + hasBin: true + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + 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-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@3.0.0: + resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + + style-to-js@1.1.17: + resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} + + style-to-object@1.0.9: + resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tailwind-merge@3.3.1: + resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} + + tailwindcss@4.1.11: + resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} + + tapable@2.2.2: + resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} + engines: {node: '>=6'} + + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.3: + resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + engines: {node: '>=14.0.0'} + + tldts-core@7.0.17: + resolution: {integrity: sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g==} + + tldts@7.0.17: + resolution: {integrity: sha512-Y1KQBgDd/NUc+LfOtKS6mNsC9CCaH+m2P1RoIZy7RAPo3C3/t8X45+zgut31cRZtZ3xKPjfn3TkGTrctC2TQIQ==} + hasBin: true + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tough-cookie@6.0.0: + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} + engines: {node: '>=16'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-morph@27.0.2: + resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsup@8.5.0: + resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + turbo-darwin-64@2.5.5: + resolution: {integrity: sha512-RYnTz49u4F5tDD2SUwwtlynABNBAfbyT2uU/brJcyh5k6lDLyNfYKdKmqd3K2ls4AaiALWrFKVSBsiVwhdFNzQ==} + cpu: [x64] + os: [darwin] + + turbo-darwin-arm64@2.5.5: + resolution: {integrity: sha512-Tk+ZeSNdBobZiMw9aFypQt0DlLsWSFWu1ymqsAdJLuPoAH05qCfYtRxE1pJuYHcJB5pqI+/HOxtJoQ40726Btw==} + cpu: [arm64] + os: [darwin] + + turbo-linux-64@2.5.5: + resolution: {integrity: sha512-2/XvMGykD7VgsvWesZZYIIVXMlgBcQy+ZAryjugoTcvJv8TZzSU/B1nShcA7IAjZ0q7OsZ45uP2cOb8EgKT30w==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@2.5.5: + resolution: {integrity: sha512-DW+8CjCjybu0d7TFm9dovTTVg1VRnlkZ1rceO4zqsaLrit3DgHnN4to4uwyuf9s2V/BwS3IYcRy+HG9BL596Iw==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@2.5.5: + resolution: {integrity: sha512-q5p1BOy8ChtSZfULuF1BhFMYIx6bevXu4fJ+TE/hyNfyHJIfjl90Z6jWdqAlyaFLmn99X/uw+7d6T/Y/dr5JwQ==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@2.5.5: + resolution: {integrity: sha512-AXbF1KmpHUq3PKQwddMGoKMYhHsy5t1YBQO8HZ04HLMR0rWv9adYlQ8kaeQJTko1Ay1anOBFTqaxfVOOsu7+1Q==} + cpu: [arm64] + os: [win32] + + turbo@2.5.5: + resolution: {integrity: sha512-eZ7wI6KjtT1eBqCnh2JPXWNUAxtoxxfi6VdBdZFvil0ychCOTxbm7YLRBi1JSt7U3c+u3CLxpoPxLdvr/Npr3A==} + hasBin: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript-eslint@8.39.0: + resolution: {integrity: sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@7.10.0: + resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + until-async@3.0.2: + resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@7.0.6: + resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + 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==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + 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'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + + zod-validation-error@3.5.3: + resolution: {integrity: sha512-OT5Y8lbUadqVZCsnyFaTQ4/O2mys4tj7PqhdbBCp7McPwvIEKfPtdA6QfPeFQK2/Rz5LgwmAXRJTugBNBi0btw==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zod@4.1.12: + resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.0': {} + + '@babel/core@7.28.0': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/helpers': 7.28.2 + '@babel/parser': 7.28.0 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.2 + convert-source-map: 2.0.0 + debug: 4.4.1 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.28.0': + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.2 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.25.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-member-expression-to-functions@7.27.1': + dependencies: + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.28.2 + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.2': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.2 + + '@babel/parser@7.28.0': + dependencies: + '@babel/types': 7.28.2 + + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.28.0)': + dependencies: + '@babel/core': 7.28.0 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.28.2': {} + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 + + '@babel/traverse@7.28.0': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.0 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/template': 7.27.2 + '@babel/types': 7.28.2 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.2': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@bcoe/v8-coverage@1.0.2': {} + + '@changesets/apply-release-plan@7.0.12': + dependencies: + '@changesets/config': 3.1.1 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.4 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.7.1 + resolve-from: 5.0.0 + semver: 7.7.2 + + '@changesets/assemble-release-plan@6.0.9': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.7.2 + + '@changesets/changelog-git@0.2.1': + dependencies: + '@changesets/types': 6.1.0 + + '@changesets/cli@2.29.5': + dependencies: + '@changesets/apply-release-plan': 7.0.12 + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.1 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/get-release-plan': 4.0.13 + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.5 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 + '@manypkg/get-packages': 1.1.3 + ansi-colors: 4.1.3 + ci-info: 3.9.0 + enquirer: 2.4.1 + external-editor: 3.1.0 + fs-extra: 7.0.1 + mri: 1.2.0 + p-limit: 2.3.0 + package-manager-detector: 0.2.11 + picocolors: 1.1.1 + resolve-from: 5.0.0 + semver: 7.7.2 + spawndamnit: 3.0.1 + term-size: 2.2.1 + + '@changesets/config@3.1.1': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/logger': 0.1.1 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.8 + + '@changesets/errors@0.2.0': + dependencies: + extendable-error: 0.1.7 + + '@changesets/get-dependents-graph@2.1.3': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + picocolors: 1.1.1 + semver: 7.7.2 + + '@changesets/get-release-plan@4.0.13': + dependencies: + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/config': 3.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.5 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/get-version-range-type@0.4.0': {} + + '@changesets/git@3.0.4': + dependencies: + '@changesets/errors': 0.2.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 3.0.1 + + '@changesets/logger@0.1.1': + dependencies: + picocolors: 1.1.1 + + '@changesets/parse@0.4.1': + dependencies: + '@changesets/types': 6.1.0 + js-yaml: 3.14.1 + + '@changesets/pre@2.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + + '@changesets/read@0.6.5': + dependencies: + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.1 + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + p-filter: 2.1.0 + picocolors: 1.1.1 + + '@changesets/should-skip-package@0.1.2': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@6.1.0': {} + + '@changesets/write@0.4.0': + dependencies: + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + human-id: 4.1.1 + prettier: 2.7.1 + + '@emnapi/runtime@1.4.5': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.25.11': + optional: true + + '@esbuild/aix-ppc64@0.25.8': + optional: true + + '@esbuild/android-arm64@0.25.11': + optional: true + + '@esbuild/android-arm64@0.25.8': + optional: true + + '@esbuild/android-arm@0.25.11': + optional: true + + '@esbuild/android-arm@0.25.8': + optional: true + + '@esbuild/android-x64@0.25.11': + optional: true + + '@esbuild/android-x64@0.25.8': + optional: true + + '@esbuild/darwin-arm64@0.25.11': + optional: true + + '@esbuild/darwin-arm64@0.25.8': + optional: true + + '@esbuild/darwin-x64@0.25.11': + optional: true + + '@esbuild/darwin-x64@0.25.8': + optional: true + + '@esbuild/freebsd-arm64@0.25.11': + optional: true + + '@esbuild/freebsd-arm64@0.25.8': + optional: true + + '@esbuild/freebsd-x64@0.25.11': + optional: true + + '@esbuild/freebsd-x64@0.25.8': + optional: true + + '@esbuild/linux-arm64@0.25.11': + optional: true + + '@esbuild/linux-arm64@0.25.8': + optional: true + + '@esbuild/linux-arm@0.25.11': + optional: true + + '@esbuild/linux-arm@0.25.8': + optional: true + + '@esbuild/linux-ia32@0.25.11': + optional: true + + '@esbuild/linux-ia32@0.25.8': + optional: true + + '@esbuild/linux-loong64@0.25.11': + optional: true + + '@esbuild/linux-loong64@0.25.8': + optional: true + + '@esbuild/linux-mips64el@0.25.11': + optional: true + + '@esbuild/linux-mips64el@0.25.8': + optional: true + + '@esbuild/linux-ppc64@0.25.11': + optional: true + + '@esbuild/linux-ppc64@0.25.8': + optional: true + + '@esbuild/linux-riscv64@0.25.11': + optional: true + + '@esbuild/linux-riscv64@0.25.8': + optional: true + + '@esbuild/linux-s390x@0.25.11': + optional: true + + '@esbuild/linux-s390x@0.25.8': + optional: true + + '@esbuild/linux-x64@0.25.11': + optional: true + + '@esbuild/linux-x64@0.25.8': + optional: true + + '@esbuild/netbsd-arm64@0.25.11': + optional: true + + '@esbuild/netbsd-arm64@0.25.8': + optional: true + + '@esbuild/netbsd-x64@0.25.11': + optional: true + + '@esbuild/netbsd-x64@0.25.8': + optional: true + + '@esbuild/openbsd-arm64@0.25.11': + optional: true + + '@esbuild/openbsd-arm64@0.25.8': + optional: true + + '@esbuild/openbsd-x64@0.25.11': + optional: true + + '@esbuild/openbsd-x64@0.25.8': + optional: true + + '@esbuild/openharmony-arm64@0.25.11': + optional: true + + '@esbuild/openharmony-arm64@0.25.8': + optional: true + + '@esbuild/sunos-x64@0.25.11': + optional: true + + '@esbuild/sunos-x64@0.25.8': + optional: true + + '@esbuild/win32-arm64@0.25.11': + optional: true + + '@esbuild/win32-arm64@0.25.8': + optional: true + + '@esbuild/win32-ia32@0.25.11': + optional: true + + '@esbuild/win32-ia32@0.25.8': + optional: true + + '@esbuild/win32-x64@0.25.11': + optional: true + + '@esbuild/win32-x64@0.25.8': + optional: true + + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0(jiti@2.5.1))': + dependencies: + eslint: 9.32.0(jiti@2.5.1) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/compat@1.3.1(eslint@9.32.0(jiti@2.5.1))': + optionalDependencies: + eslint: 9.32.0(jiti@2.5.1) + + '@eslint/config-array@0.21.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.1 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.3.0': {} + + '@eslint/core@0.15.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.1 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.2.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.32.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.3.4': + dependencies: + '@eslint/core': 0.15.1 + levn: 0.4.1 + + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.3': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/react-dom@2.1.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/dom': 1.7.3 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + + '@floating-ui/utils@0.2.10': {} + + '@formatjs/intl-localematcher@0.6.2': + dependencies: + tslib: 2.8.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@ianvs/prettier-plugin-sort-imports@4.5.1(prettier@3.6.2)': + dependencies: + '@babel/generator': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.2 + prettier: 3.6.2 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + '@img/sharp-darwin-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.0 + optional: true + + '@img/sharp-darwin-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.0 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.0': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.0': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.0': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.0': + optional: true + + '@img/sharp-linux-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.0 + optional: true + + '@img/sharp-linux-arm@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.0 + optional: true + + '@img/sharp-linux-ppc64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.0 + optional: true + + '@img/sharp-linux-s390x@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.0 + optional: true + + '@img/sharp-linux-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.0 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + optional: true + + '@img/sharp-wasm32@0.34.3': + dependencies: + '@emnapi/runtime': 1.4.5 + optional: true + + '@img/sharp-win32-arm64@0.34.3': + optional: true + + '@img/sharp-win32-ia32@0.34.3': + optional: true + + '@img/sharp-win32-x64@0.34.3': + optional: true + + '@inquirer/ansi@1.0.1': {} + + '@inquirer/confirm@5.1.19(@types/node@24.2.0)': + dependencies: + '@inquirer/core': 10.3.0(@types/node@24.2.0) + '@inquirer/type': 3.0.9(@types/node@24.2.0) + optionalDependencies: + '@types/node': 24.2.0 + + '@inquirer/core@10.3.0(@types/node@24.2.0)': + dependencies: + '@inquirer/ansi': 1.0.1 + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@24.2.0) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.2.0 + + '@inquirer/figures@1.0.14': {} + + '@inquirer/type@3.0.9(@types/node@24.2.0)': + optionalDependencies: + '@types/node': 24.2.0 + + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + + '@istanbuljs/schema@0.1.3': {} + + '@jridgewell/gen-mapping@0.3.12': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 + + '@jridgewell/resolve-uri@3.1.0': {} + + '@jridgewell/sourcemap-codec@1.5.4': {} + + '@jridgewell/trace-mapping@0.3.29': + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.5.4 + + '@manypkg/find-root@1.1.0': + dependencies: + '@babel/runtime': 7.28.2 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + + '@manypkg/get-packages@1.1.3': + dependencies: + '@babel/runtime': 7.28.2 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + acorn: 8.15.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.15.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@mswjs/interceptors@0.39.8': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + + '@next/env@15.5.6': {} + + '@next/eslint-plugin-next@15.4.6': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@15.5.6': + optional: true + + '@next/swc-darwin-x64@15.5.6': + optional: true + + '@next/swc-linux-arm64-gnu@15.5.6': + optional: true + + '@next/swc-linux-arm64-musl@15.5.6': + optional: true + + '@next/swc-linux-x64-gnu@15.5.6': + optional: true + + '@next/swc-linux-x64-musl@15.5.6': + optional: true + + '@next/swc-win32-arm64-msvc@15.5.6': + optional: true + + '@next/swc-win32-x64-msvc@15.5.6': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + + '@orama/orama@3.1.16': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@radix-ui/number@1.1.1': {} + + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-context@1.1.2(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-direction@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-id@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-popover@1.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + aria-hidden: 1.2.6 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/number': 1.1.1 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-slot@1.2.3(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.9)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.9)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.9 + + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 + '@types/react-dom': 19.1.7(@types/react@19.1.9) + + '@radix-ui/rect@1.1.1': {} + + '@rollup/rollup-android-arm-eabi@4.46.2': + optional: true + + '@rollup/rollup-android-arm64@4.46.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.46.2': + optional: true + + '@rollup/rollup-darwin-x64@4.46.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.46.2': + optional: true + + '@rollup/rollup-freebsd-x64@4.46.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.46.2': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.46.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.46.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.46.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.46.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.46.2': + optional: true + + '@rtsao/scc@1.1.0': {} + + '@shikijs/core@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.3 + + '@shikijs/engine-oniguruma@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + + '@shikijs/rehype@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@types/hast': 3.0.4 + hast-util-to-string: 3.0.1 + shiki: 3.13.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + '@shikijs/themes@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + + '@shikijs/transformers@3.13.0': + dependencies: + '@shikijs/core': 3.13.0 + '@shikijs/types': 3.13.0 + + '@shikijs/types@3.13.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@size-limit/esbuild@7.0.8(size-limit@7.0.8)': + dependencies: + esbuild: 0.14.27 + nanoid: 3.3.11 + size-limit: 7.0.8 + + '@size-limit/file@7.0.8(size-limit@7.0.8)': + dependencies: + semver: 7.3.5 + size-limit: 7.0.8 + + '@size-limit/preset-small-lib@7.0.8(size-limit@7.0.8)': + dependencies: + '@size-limit/esbuild': 7.0.8(size-limit@7.0.8) + '@size-limit/file': 7.0.8(size-limit@7.0.8) + size-limit: 7.0.8 + + '@standard-schema/spec@1.0.0': {} + + '@swc/core-darwin-arm64@1.10.4': + optional: true + + '@swc/core-darwin-x64@1.10.4': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.10.4': + optional: true + + '@swc/core-linux-arm64-gnu@1.10.4': + optional: true + + '@swc/core-linux-arm64-musl@1.10.4': + optional: true + + '@swc/core-linux-x64-gnu@1.10.4': + optional: true + + '@swc/core-linux-x64-musl@1.10.4': + optional: true + + '@swc/core-win32-arm64-msvc@1.10.4': + optional: true + + '@swc/core-win32-ia32-msvc@1.10.4': + optional: true + + '@swc/core-win32-x64-msvc@1.10.4': + optional: true + + '@swc/core@1.10.4(@swc/helpers@0.5.15)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.17 + optionalDependencies: + '@swc/core-darwin-arm64': 1.10.4 + '@swc/core-darwin-x64': 1.10.4 + '@swc/core-linux-arm-gnueabihf': 1.10.4 + '@swc/core-linux-arm64-gnu': 1.10.4 + '@swc/core-linux-arm64-musl': 1.10.4 + '@swc/core-linux-x64-gnu': 1.10.4 + '@swc/core-linux-x64-musl': 1.10.4 + '@swc/core-win32-arm64-msvc': 1.10.4 + '@swc/core-win32-ia32-msvc': 1.10.4 + '@swc/core-win32-x64-msvc': 1.10.4 + '@swc/helpers': 0.5.15 + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@swc/types@0.1.17': + dependencies: + '@swc/counter': 0.1.3 + + '@tailwindcss/node@4.1.11': + dependencies: + '@ampproject/remapping': 2.3.0 + enhanced-resolve: 5.18.3 + jiti: 2.5.1 + lightningcss: 1.30.1 + magic-string: 0.30.17 + source-map-js: 1.2.1 + tailwindcss: 4.1.11 + + '@tailwindcss/oxide-android-arm64@4.1.11': + optional: true + + '@tailwindcss/oxide-darwin-arm64@4.1.11': + optional: true + + '@tailwindcss/oxide-darwin-x64@4.1.11': + optional: true + + '@tailwindcss/oxide-freebsd-x64@4.1.11': + optional: true + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + optional: true + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + optional: true + + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + optional: true + + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + optional: true + + '@tailwindcss/oxide-linux-x64-musl@4.1.11': + optional: true + + '@tailwindcss/oxide-wasm32-wasi@4.1.11': + optional: true + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + optional: true + + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + optional: true - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + '@tailwindcss/oxide@4.1.11': + dependencies: + detect-libc: 2.0.4 + tar: 7.4.3 + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.11 + '@tailwindcss/oxide-darwin-arm64': 4.1.11 + '@tailwindcss/oxide-darwin-x64': 4.1.11 + '@tailwindcss/oxide-freebsd-x64': 4.1.11 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.11 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.11 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.11 + '@tailwindcss/oxide-linux-x64-musl': 4.1.11 + '@tailwindcss/oxide-wasm32-wasi': 4.1.11 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 - fast-check@3.3.0: - resolution: {integrity: sha512-Zu6tZ4g0T4H9Tiz3tdNPEHrSbuICj7yhdOM9RCZKNMkpjZ9avDV3ORklXaEmh4zvkX24/bGZ9DxKKqWfXttUqw==} - engines: {node: '>=8.0.0'} + '@tailwindcss/postcss@4.1.11': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.11 + '@tailwindcss/oxide': 4.1.11 + postcss: 8.5.6 + tailwindcss: 4.1.11 - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + '@ts-morph/common@0.28.1': + dependencies: + minimatch: 10.0.3 + path-browserify: 1.0.1 + tinyglobby: 0.2.15 - fast-diff@1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 - fast-glob@3.2.11: - resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} - engines: {node: '>=8.6.0'} + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + '@types/deep-eql@4.0.2': {} - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.8 - fastq@1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + '@types/estree@1.0.8': {} - figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + '@types/humps@2.0.1': {} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + '@types/json-schema@7.0.15': {} - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + '@types/json5@0.0.29': {} - flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 - flatted@3.2.5: - resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} + '@types/mdx@2.0.13': {} - foreground-child@2.0.0: - resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} - engines: {node: '>=8.0.0'} + '@types/ms@2.1.0': {} - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + '@types/node@12.20.55': {} - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + '@types/node@24.2.0': + dependencies: + undici-types: 7.10.0 - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + '@types/react-dom@19.1.7(@types/react@19.1.9)': + dependencies: + '@types/react': 19.1.9 - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + '@types/react@19.1.9': + dependencies: + csstype: 3.1.3 - get-func-name@2.0.0: - resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + '@types/statuses@2.0.6': {} - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + '@types/unist@2.0.11': {} - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + '@types/unist@3.0.3': {} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + '@typescript-eslint/eslint-plugin@8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/type-utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.0 + eslint: 9.32.0(jiti@2.5.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color - glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - deprecated: Glob versions prior to v9 are no longer supported + '@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.39.0 + debug: 4.4.1 + eslint: 9.32.0(jiti@2.5.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + '@typescript-eslint/project-service@8.39.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + debug: 4.4.1 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color - globals@13.17.0: - resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} - engines: {node: '>=8'} + '@typescript-eslint/scope-manager@8.39.0': + dependencies: + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/visitor-keys': 8.39.0 - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + '@typescript-eslint/tsconfig-utils@8.39.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 - grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + '@typescript-eslint/type-utils@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + debug: 4.4.1 + eslint: 9.32.0(jiti@2.5.1) + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color - graphql@16.3.0: - resolution: {integrity: sha512-xm+ANmA16BzCT5pLjuXySbQVFwH3oJctUVdy81w1sV0vBU0KgDdBGtxQOUd5zqOBk/JayAFeG8Dlmeq74rjm/A==} - engines: {node: ^12.22.0 || ^14.16.0 || >=16.0.0} + '@typescript-eslint/types@8.39.0': {} - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + '@typescript-eslint/typescript-estree@8.39.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/project-service': 8.39.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.39.0(typescript@5.9.2) + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/visitor-keys': 8.39.0 + debug: 4.4.1 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color - has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + '@typescript-eslint/utils@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 8.39.0 + '@typescript-eslint/types': 8.39.0 + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + eslint: 9.32.0(jiti@2.5.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color - headers-polyfill@3.0.4: - resolution: {integrity: sha512-I1DOM1EdWYntdrnCvqQtcKwSSuiTzoqOExy4v1mdcFixFZABlWP4IPHdmoLtPda0abMHqDOY4H9svhQ10DFR4w==} + '@typescript-eslint/visitor-keys@8.39.0': + dependencies: + '@typescript-eslint/types': 8.39.0 + eslint-visitor-keys: 4.2.1 + + '@ungap/structured-clone@1.3.0': {} + + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(msw@2.11.5(@types/node@24.2.0)(typescript@5.9.2))(yaml@2.8.1))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 1.0.2 + ast-v8-to-istanbul: 0.3.4 + debug: 4.4.1 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.17 + magicast: 0.3.5 + std-env: 3.9.0 + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(msw@2.11.5(@types/node@24.2.0)(typescript@5.9.2))(yaml@2.8.1) + transitivePeerDependencies: + - supports-color - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.1 + tinyrainbow: 2.0.0 - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} + '@vitest/mocker@3.2.4(msw@2.11.5(@types/node@24.2.0)(typescript@5.9.2))(vite@7.0.6(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.1))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + msw: 2.11.5(@types/node@24.2.0)(typescript@5.9.2) + vite: 7.0.6(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.1) - humps@2.0.1: - resolution: {integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==} + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 - husky@7.0.4: - resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==} - engines: {node: '>=12'} - hasBin: true + '@vitest/runner@3.2.4': + dependencies: + '@vitest/utils': 3.2.4 + pathe: 2.0.3 + strip-literal: 3.0.0 - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + '@vitest/snapshot@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.17 + pathe: 2.0.3 - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.3 - ignore@5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} - engines: {node: '>= 4'} + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.0 + tinyrainbow: 2.0.0 - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + acorn@8.15.0: {} - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + ansi-colors@4.1.3: {} - inquirer@8.2.2: - resolution: {integrity: sha512-pG7I/si6K/0X7p1qU+rfWnpTE1UIkTONN1wxtzh0d+dHXtT/JG6qBgLxoyHVsQa8cFABxAPh0pD6uUUHiAoaow==} - engines: {node: '>=12.0.0'} + ansi-regex@5.0.1: {} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + ansi-regex@6.1.0: {} - is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + ansi-styles@6.2.1: {} - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + any-promise@1.3.0: {} - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + anymatch@3.1.2: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 - is-node-process@1.0.1: - resolution: {integrity: sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ==} + argparse@2.0.1: {} - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} + aria-query@5.3.2: {} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} + array-includes@3.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + array-union@2.1.0: {} - istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 - istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 - istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} - engines: {node: '>=8'} + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 - joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 - js-levenshtein@1.1.6: - resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} - engines: {node: '>=0.10.0'} + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 - js-sdsl@4.1.5: - resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + assertion-error@2.0.1: {} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + ast-types-flow@0.0.8: {} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + ast-v8-to-istanbul@0.3.4: + dependencies: + '@jridgewell/trace-mapping': 0.3.29 + estree-walker: 3.0.3 + js-tokens: 9.0.1 - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + astring@1.9.0: {} - lilconfig@2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} - engines: {node: '>=10'} + async-function@1.0.0: {} - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 - load-tsconfig@0.2.3: - resolution: {integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + axe-core@4.10.3: {} - local-pkg@0.4.2: - resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} - engines: {node: '>=14'} + axobject-query@4.1.0: {} - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + bail@2.0.2: {} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + balanced-match@1.0.2: {} - lodash.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + better-path-resolve@1.0.0: + dependencies: + is-windows: 1.0.2 - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + binary-extensions@2.2.0: {} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 - loupe@2.3.4: - resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} - deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5 + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + braces@3.0.3: + dependencies: + fill-range: 7.1.1 - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + browserslist@4.25.1: + dependencies: + caniuse-lite: 1.0.30001731 + electron-to-chromium: 1.5.198 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.25.1) - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + bundle-require@5.1.0(esbuild@0.25.8): + dependencies: + esbuild: 0.25.8 + load-tsconfig: 0.2.3 - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + bytes-iec@3.1.1: {} - micromatch@4.0.4: - resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} - engines: {node: '>=8.6'} + cac@6.7.14: {} - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + callsites@3.1.0: {} - msw@0.39.2: - resolution: {integrity: sha512-ju/HpqQpE4/qCxZ23t5Gaau0KREn4QuFzdG28nP1EpidMrymMJuIvNd32+2uGTGG031PMwrC41YW7vCxHOwyHA==} - engines: {node: '>=14'} - hasBin: true + caniuse-lite@1.0.30001731: {} - mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + ccount@2.0.1: {} - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + chai@5.2.1: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.2.0 + pathval: 2.0.1 - nanoid@3.3.4: - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 - nanospinner@1.0.0: - resolution: {integrity: sha512-14c2r2QQ9xfTmdbqdF51FKCNvww+0ZON9GeEHur+pBdOufoFvxD4CZQRaYWmFrGH3Nuv7PZ/9Q+wsV+hFSp32g==} + character-entities-html4@2.1.0: {} - natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + character-entities-legacy@3.0.0: {} - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + character-entities@2.0.2: {} - node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + character-reference-invalid@2.0.1: {} - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + chardet@0.7.0: {} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + check-error@2.1.1: {} - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + chokidar@3.5.3: + dependencies: + anymatch: 3.1.2 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + chownr@3.0.0: {} - optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} - engines: {node: '>= 0.8.0'} + ci-info@3.9.0: {} - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ci-job-number@1.2.2: {} - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 - outvariant@1.3.0: - resolution: {integrity: sha512-yeWM9k6UPfG/nzxdaPlJkB2p08hCg4xP6Lx99F+vP8YF7xyZVfTmJjrrNalkmzudD4WFvNLVudQikqUmF8zhVQ==} + cli-width@4.1.0: {} - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + client-only@0.0.1: {} - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + clsx@2.1.1: {} - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + code-block-writer@13.0.3: {} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + collapse-white-space@2.1.0: {} - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + color-name@1.1.4: {} - path-to-regexp@6.2.0: - resolution: {integrity: sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + optional: true - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true - pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + comma-separated-tokens@2.0.3: {} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + commander@4.1.1: {} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + compute-scroll-into-view@3.1.1: {} - pirates@4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} - engines: {node: '>= 6'} + concat-map@0.0.1: {} - postcss-load-config@3.1.4: - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + confbox@0.1.8: {} - postcss@8.4.18: - resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==} - engines: {node: ^10 || ^12 || >=14} + consola@3.4.2: {} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + convert-source-map@2.0.0: {} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} + cookie@1.0.2: {} - prettier@2.7.1: - resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} - engines: {node: '>=10.13.0'} - hasBin: true + cross-fetch@3.1.5: + dependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding - punycode@2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} - engines: {node: '>=6'} + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 - pure-rand@5.0.3: - resolution: {integrity: sha512-9N8x1h8dptBQpHyC7aZMS+iNOAm97WMGY0AFrguU1cpfW3I5jINkWe5BIY5md0ofy+1TCIELsVcm/GJXZSaPbw==} + cssesc@3.0.0: {} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + csstype@3.1.3: {} - readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} + damerau-levenshtein@1.0.8: {} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 - regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + debug@3.2.7: + dependencies: + ms: 2.1.3 - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} + debug@4.4.1: + dependencies: + ms: 2.1.3 - resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true + decode-named-character-reference@1.2.0: + dependencies: + character-entities: 2.0.2 - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + deep-eql@5.0.2: {} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + deep-is@0.1.4: {} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 - rollup-plugin-analyzer@4.0.0: - resolution: {integrity: sha512-LL9GEt3bkXp6Wa19SNR5MWcvHNMvuTFYg+eYBZN2OIFhSWN+pEJUQXEKu5BsOeABob3x9PDaLKW7w5iOJnsESQ==} - engines: {node: '>=8.0.0'} + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 - rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true + dequal@2.0.3: {} - run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} + detect-indent@6.1.0: {} - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + detect-libc@2.0.4: {} - rxjs@7.5.5: - resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==} + detect-node-es@1.1.0: {} - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 - semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 - semver@7.3.5: - resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} - engines: {node: '>=10'} - hasBin: true + dotenv@16.0.3: {} - semver@7.3.8: - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} - engines: {node: '>=10'} - hasBin: true + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 - set-cookie-parser@2.4.8: - resolution: {integrity: sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==} + eastasianwidth@0.2.0: {} - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + electron-to-chromium@1.5.198: {} - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + emoji-regex@8.0.0: {} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + emoji-regex@9.2.2: {} - size-limit@7.0.8: - resolution: {integrity: sha512-3h76c9E0e/nNhYLSR7IBI/bSoXICeo7EYkYjlyVqNIsu7KvN/PQmMbIXeyd2QKIF8iZKhaiZQoXLkGWbyPDtvQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - hasBin: true + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.2 - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 - source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 + + es-module-lexer@1.7.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.15.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} + esbuild-android-64@0.14.27: + optional: true - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} + esbuild-android-arm64@0.14.27: + optional: true - strict-event-emitter@0.2.0: - resolution: {integrity: sha512-zv7K2egoKwkQkZGEaH8m+i2D0XiKzx5jNsiSul6ja2IYFvil10A59Z9Y7PPAAe5OW53dQUf9CfsHKzjZzKkm1w==} + esbuild-darwin-64@0.14.27: + optional: true - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + esbuild-darwin-arm64@0.14.27: + optional: true - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + esbuild-freebsd-64@0.14.27: + optional: true - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + esbuild-freebsd-arm64@0.14.27: + optional: true - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} + esbuild-linux-32@0.14.27: + optional: true - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + esbuild-linux-64@0.14.27: + optional: true - strip-literal@0.4.2: - resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==} + esbuild-linux-arm64@0.14.27: + optional: true - sucrase@3.28.0: - resolution: {integrity: sha512-TK9600YInjuiIhVM3729rH4ZKPOsGeyXUwY+Ugu9eilNbdTFyHr6XcAGYbRVZPDgWj6tgI7bx95aaJjHnbffag==} - engines: {node: '>=8'} - hasBin: true + esbuild-linux-arm@0.14.27: + optional: true - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + esbuild-linux-mips64le@0.14.27: + optional: true - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + esbuild-linux-ppc64le@0.14.27: + optional: true - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + esbuild-linux-riscv64@0.14.27: + optional: true - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + esbuild-linux-s390x@0.14.27: + optional: true - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + esbuild-netbsd-64@0.14.27: + optional: true - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + esbuild-openbsd-64@0.14.27: + optional: true - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + esbuild-sunos-64@0.14.27: + optional: true - tinybench@2.3.1: - resolution: {integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==} + esbuild-windows-32@0.14.27: + optional: true - tinypool@0.3.0: - resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==} - engines: {node: '>=14.0.0'} + esbuild-windows-64@0.14.27: + optional: true - tinyspy@1.0.2: - resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==} - engines: {node: '>=14.0.0'} + esbuild-windows-arm64@0.14.27: + optional: true - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + esbuild@0.14.27: + optionalDependencies: + esbuild-android-64: 0.14.27 + esbuild-android-arm64: 0.14.27 + esbuild-darwin-64: 0.14.27 + esbuild-darwin-arm64: 0.14.27 + esbuild-freebsd-64: 0.14.27 + esbuild-freebsd-arm64: 0.14.27 + esbuild-linux-32: 0.14.27 + esbuild-linux-64: 0.14.27 + esbuild-linux-arm: 0.14.27 + esbuild-linux-arm64: 0.14.27 + esbuild-linux-mips64le: 0.14.27 + esbuild-linux-ppc64le: 0.14.27 + esbuild-linux-riscv64: 0.14.27 + esbuild-linux-s390x: 0.14.27 + esbuild-netbsd-64: 0.14.27 + esbuild-openbsd-64: 0.14.27 + esbuild-sunos-64: 0.14.27 + esbuild-windows-32: 0.14.27 + esbuild-windows-64: 0.14.27 + esbuild-windows-arm64: 0.14.27 - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + esbuild@0.25.11: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.11 + '@esbuild/android-arm': 0.25.11 + '@esbuild/android-arm64': 0.25.11 + '@esbuild/android-x64': 0.25.11 + '@esbuild/darwin-arm64': 0.25.11 + '@esbuild/darwin-x64': 0.25.11 + '@esbuild/freebsd-arm64': 0.25.11 + '@esbuild/freebsd-x64': 0.25.11 + '@esbuild/linux-arm': 0.25.11 + '@esbuild/linux-arm64': 0.25.11 + '@esbuild/linux-ia32': 0.25.11 + '@esbuild/linux-loong64': 0.25.11 + '@esbuild/linux-mips64el': 0.25.11 + '@esbuild/linux-ppc64': 0.25.11 + '@esbuild/linux-riscv64': 0.25.11 + '@esbuild/linux-s390x': 0.25.11 + '@esbuild/linux-x64': 0.25.11 + '@esbuild/netbsd-arm64': 0.25.11 + '@esbuild/netbsd-x64': 0.25.11 + '@esbuild/openbsd-arm64': 0.25.11 + '@esbuild/openbsd-x64': 0.25.11 + '@esbuild/openharmony-arm64': 0.25.11 + '@esbuild/sunos-x64': 0.25.11 + '@esbuild/win32-arm64': 0.25.11 + '@esbuild/win32-ia32': 0.25.11 + '@esbuild/win32-x64': 0.25.11 + + esbuild@0.25.8: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.8 + '@esbuild/android-arm': 0.25.8 + '@esbuild/android-arm64': 0.25.8 + '@esbuild/android-x64': 0.25.8 + '@esbuild/darwin-arm64': 0.25.8 + '@esbuild/darwin-x64': 0.25.8 + '@esbuild/freebsd-arm64': 0.25.8 + '@esbuild/freebsd-x64': 0.25.8 + '@esbuild/linux-arm': 0.25.8 + '@esbuild/linux-arm64': 0.25.8 + '@esbuild/linux-ia32': 0.25.8 + '@esbuild/linux-loong64': 0.25.8 + '@esbuild/linux-mips64el': 0.25.8 + '@esbuild/linux-ppc64': 0.25.8 + '@esbuild/linux-riscv64': 0.25.8 + '@esbuild/linux-s390x': 0.25.8 + '@esbuild/linux-x64': 0.25.8 + '@esbuild/netbsd-arm64': 0.25.8 + '@esbuild/netbsd-x64': 0.25.8 + '@esbuild/openbsd-arm64': 0.25.8 + '@esbuild/openbsd-x64': 0.25.8 + '@esbuild/openharmony-arm64': 0.25.8 + '@esbuild/sunos-x64': 0.25.8 + '@esbuild/win32-arm64': 0.25.8 + '@esbuild/win32-ia32': 0.25.8 + '@esbuild/win32-x64': 0.25.8 + + escalade@3.2.0: {} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + escape-string-regexp@4.0.0: {} - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + escape-string-regexp@5.0.0: {} - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.32.0(jiti@2.5.1)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.32.0(jiti@2.5.1) + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.32.0(jiti@2.5.1) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.32.0(jiti@2.5.1)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color - tslib@2.3.1: - resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + eslint-plugin-jsx-a11y@6.10.2(eslint@9.32.0(jiti@2.5.1)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.3 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.32.0(jiti@2.5.1) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-react-compiler@19.0.0-beta-af1b7da-20250417(eslint@9.32.0(jiti@2.5.1)): + dependencies: + '@babel/core': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.28.0) + eslint: 9.32.0(jiti@2.5.1) + hermes-parser: 0.25.1 + zod: 3.25.76 + zod-validation-error: 3.5.3(zod@3.25.76) + transitivePeerDependencies: + - supports-color - tsup@6.3.0: - resolution: {integrity: sha512-IaNQO/o1rFgadLhNonVKNCT2cks+vvnWX3DnL8sB87lBDqRvJXHENr5lSPJlqwplUlDxSwZK8dSg87rgBu6Emw==} - engines: {node: '>=14'} - hasBin: true - peerDependencies: - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: ^4.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true + eslint-plugin-react-hooks@5.2.0(eslint@9.32.0(jiti@2.5.1)): + dependencies: + eslint: 9.32.0(jiti@2.5.1) - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + eslint-plugin-react@7.37.5(eslint@9.32.0(jiti@2.5.1)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.32.0(jiti@2.5.1) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + eslint-plugin-turbo@2.5.5(eslint@9.32.0(jiti@2.5.1))(turbo@2.5.5): + dependencies: + dotenv: 16.0.3 + eslint: 9.32.0(jiti@2.5.1) + turbo: 2.5.5 - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} + eslint-visitor-keys@3.4.3: {} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + eslint-visitor-keys@4.2.1: {} - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} + eslint@9.32.0(jiti@2.5.1): + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.0 + '@eslint/core': 0.15.1 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.32.0 + '@eslint/plugin-kit': 0.3.4 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.1 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.2.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.5.1 + transitivePeerDependencies: + - supports-color - typescript@4.6.2: - resolution: {integrity: sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==} - engines: {node: '>=4.2.0'} - hasBin: true + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + esprima@4.0.1: {} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 - v8-to-istanbul@9.0.1: - resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} - engines: {node: '>=10.12.0'} + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 - vite@3.2.2: - resolution: {integrity: sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true + estraverse@5.3.0: {} - vitest@0.24.4: - resolution: {integrity: sha512-4ratHSyVEJPtBLV00uhL4Wj3Pmandc9rsxUkE0q9peNOfaOgGF4lEepdkaXGRi9AGFKr1GRVtjGOJ6Fp2lCpEg==} - engines: {node: '>=v14.16.0'} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.8 - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + estree-util-is-identifier-name@3.0.0: {} - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + estree-util-value-to-estree@3.4.0: + dependencies: + '@types/estree': 1.0.8 - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 - word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + esutils@2.0.3: {} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + expect-type@1.2.2: {} - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + extend@3.0.2: {} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + extendable-error@0.1.7: {} - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 - yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} + fast-check@3.3.0: + dependencies: + pure-rand: 5.0.3 - yargs-parser@21.0.1: - resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} - engines: {node: '>=12'} + fast-deep-equal@3.1.3: {} - yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 - yargs@17.4.0: - resolution: {integrity: sha512-WJudfrk81yWFSOkZYpAZx4Nt7V4xp7S/uJkX0CnxovMCt1wCE8LNftPpNuF9X/u9gN5nsD7ycYtRcDf2pL3UiA==} - engines: {node: '>=12'} + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + fast-json-stable-stringify@2.1.0: {} -snapshots: + fast-levenshtein@2.0.6: {} - '@bcoe/v8-coverage@0.2.3': {} + fastq@1.13.0: + dependencies: + reusify: 1.0.4 - '@esbuild/android-arm@0.15.12': - optional: true + fdir@6.4.6(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 - '@esbuild/linux-loong64@0.15.12': - optional: true + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 - '@eslint/eslintrc@1.3.3': + file-entry-cache@8.0.0: dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.4.0 - globals: 13.17.0 - ignore: 5.2.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color + flat-cache: 4.0.1 - '@humanwhocodes/config-array@0.11.7': + fill-range@7.1.1: dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@1.2.1': {} - - '@istanbuljs/schema@0.1.3': {} - - '@jridgewell/resolve-uri@3.1.0': {} - - '@jridgewell/sourcemap-codec@1.4.14': {} + to-regex-range: 5.0.1 - '@jridgewell/trace-mapping@0.3.17': + find-up@4.1.0: dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + locate-path: 5.0.0 + path-exists: 4.0.0 - '@mswjs/cookies@0.2.0': + find-up@5.0.0: dependencies: - '@types/set-cookie-parser': 2.4.2 - set-cookie-parser: 2.4.8 + locate-path: 6.0.0 + path-exists: 4.0.0 - '@mswjs/interceptors@0.15.1': + fix-dts-default-cjs-exports@1.0.1: dependencies: - '@open-draft/until': 1.0.3 - '@xmldom/xmldom': 0.7.5 - debug: 4.3.4 - headers-polyfill: 3.0.4 - outvariant: 1.3.0 - strict-event-emitter: 0.2.0 - transitivePeerDependencies: - - supports-color + magic-string: 0.30.17 + mlly: 1.7.4 + rollup: 4.46.2 - '@nodelib/fs.scandir@2.1.5': + flat-cache@4.0.1: dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + flatted: 3.3.3 + keyv: 4.5.4 - '@nodelib/fs.stat@2.0.5': {} + flatted@3.3.3: {} - '@nodelib/fs.walk@1.2.8': + for-each@0.3.5: dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 - - '@open-draft/until@1.0.3': {} + is-callable: 1.2.7 - '@size-limit/esbuild@7.0.8(size-limit@7.0.8)': + foreground-child@3.3.1: dependencies: - esbuild: 0.14.27 - nanoid: 3.3.4 - size-limit: 7.0.8 + cross-spawn: 7.0.6 + signal-exit: 4.1.0 - '@size-limit/file@7.0.8(size-limit@7.0.8)': + fs-extra@7.0.1: dependencies: - semver: 7.3.5 - size-limit: 7.0.8 + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 - '@size-limit/preset-small-lib@7.0.8(size-limit@7.0.8)': + fs-extra@8.1.0: dependencies: - '@size-limit/esbuild': 7.0.8(size-limit@7.0.8) - '@size-limit/file': 7.0.8(size-limit@7.0.8) - size-limit: 7.0.8 + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 - '@swc/core-darwin-arm64@1.10.4': + fsevents@2.3.3: optional: true - '@swc/core-darwin-x64@1.10.4': - optional: true + fumadocs-core@15.8.5(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@formatjs/intl-localematcher': 0.6.2 + '@orama/orama': 3.1.16 + '@shikijs/rehype': 3.13.0 + '@shikijs/transformers': 3.13.0 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.3 + hast-util-to-jsx-runtime: 2.3.6 + image-size: 2.0.2 + negotiator: 1.0.0 + npm-to-yarn: 3.0.1 + path-to-regexp: 8.3.0 + react-remove-scroll: 2.7.1(@types/react@19.1.9)(react@19.1.0) + remark: 15.0.1 + remark-gfm: 4.0.1 + remark-rehype: 11.1.2 + scroll-into-view-if-needed: 3.1.0 + shiki: 3.13.0 + unist-util-visit: 5.0.0 + optionalDependencies: + '@types/react': 19.1.9 + lucide-react: 0.539.0(react@19.1.0) + next: 15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + transitivePeerDependencies: + - supports-color - '@swc/core-linux-arm-gnueabihf@1.10.4': - optional: true + fumadocs-mdx@12.0.3(fumadocs-core@15.8.5(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(vite@7.0.6(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.1)): + dependencies: + '@mdx-js/mdx': 3.1.1 + '@standard-schema/spec': 1.0.0 + chokidar: 4.0.3 + esbuild: 0.25.11 + estree-util-value-to-estree: 3.4.0 + fumadocs-core: 15.8.5(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + js-yaml: 4.1.0 + lru-cache: 11.2.2 + mdast-util-to-markdown: 2.1.2 + picocolors: 1.1.1 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + tinyexec: 1.0.1 + tinyglobby: 0.2.15 + unified: 11.0.5 + unist-util-visit: 5.0.0 + zod: 4.1.12 + optionalDependencies: + next: 15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + vite: 7.0.6(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.1) + transitivePeerDependencies: + - supports-color - '@swc/core-linux-arm64-gnu@1.10.4': - optional: true + fumadocs-typescript@4.0.11(@types/react@19.1.9)(fumadocs-core@15.8.5(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(fumadocs-ui@15.8.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.11))(typescript@5.9.2): + dependencies: + estree-util-value-to-estree: 3.4.0 + fumadocs-core: 15.8.5(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + hast-util-to-estree: 3.1.3 + hast-util-to-jsx-runtime: 2.3.6 + remark: 15.0.1 + remark-rehype: 11.1.2 + tinyglobby: 0.2.15 + ts-morph: 27.0.2 + typescript: 5.9.2 + unist-util-visit: 5.0.0 + optionalDependencies: + '@types/react': 19.1.9 + fumadocs-ui: 15.8.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.11) + transitivePeerDependencies: + - supports-color + + fumadocs-ui@15.8.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tailwindcss@4.1.11): + dependencies: + '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.9)(react@19.1.0) + '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.1.7(@types/react@19.1.9))(@types/react@19.1.9)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + class-variance-authority: 0.7.1 + fumadocs-core: 15.8.5(@types/react@19.1.9)(lucide-react@0.539.0(react@19.1.0))(next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + lodash.merge: 4.6.2 + next-themes: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + postcss-selector-parser: 7.1.0 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + react-medium-image-zoom: 5.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + scroll-into-view-if-needed: 3.1.0 + tailwind-merge: 3.3.1 + optionalDependencies: + '@types/react': 19.1.9 + next: 15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + tailwindcss: 4.1.11 + transitivePeerDependencies: + - '@mixedbread/sdk' + - '@oramacloud/client' + - '@tanstack/react-router' + - '@types/react-dom' + - algoliasearch + - lucide-react + - react-router + - supports-color + - waku + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 - '@swc/core-linux-arm64-musl@1.10.4': - optional: true + functions-have-names@1.2.3: {} - '@swc/core-linux-x64-gnu@1.10.4': - optional: true + gensync@1.0.0-beta.2: {} - '@swc/core-linux-x64-musl@1.10.4': - optional: true + get-caller-file@2.0.5: {} - '@swc/core-win32-arm64-msvc@1.10.4': - optional: true + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 - '@swc/core-win32-ia32-msvc@1.10.4': - optional: true + get-nonce@1.0.1: {} - '@swc/core-win32-x64-msvc@1.10.4': - optional: true + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 - '@swc/core@1.10.4': + get-symbol-description@1.1.0: dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.17 - optionalDependencies: - '@swc/core-darwin-arm64': 1.10.4 - '@swc/core-darwin-x64': 1.10.4 - '@swc/core-linux-arm-gnueabihf': 1.10.4 - '@swc/core-linux-arm64-gnu': 1.10.4 - '@swc/core-linux-arm64-musl': 1.10.4 - '@swc/core-linux-x64-gnu': 1.10.4 - '@swc/core-linux-x64-musl': 1.10.4 - '@swc/core-win32-arm64-msvc': 1.10.4 - '@swc/core-win32-ia32-msvc': 1.10.4 - '@swc/core-win32-x64-msvc': 1.10.4 + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 - '@swc/counter@0.1.3': {} + github-slugger@2.0.0: {} - '@swc/types@0.1.17': + glob-parent@5.1.2: dependencies: - '@swc/counter': 0.1.3 + is-glob: 4.0.3 - '@types/chai-subset@1.3.3': + glob-parent@6.0.2: dependencies: - '@types/chai': 4.3.3 + is-glob: 4.0.3 - '@types/chai@4.3.3': {} + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 - '@types/cookie@0.4.1': {} + globals@14.0.0: {} - '@types/humps@2.0.1': {} + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 - '@types/istanbul-lib-coverage@2.0.4': {} + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.2.0 + merge2: 1.4.1 + slash: 3.0.0 - '@types/js-levenshtein@1.1.1': {} + gopd@1.2.0: {} - '@types/json-schema@7.0.10': {} + graceful-fs@4.2.11: {} - '@types/node@17.0.22': {} + graphemer@1.4.0: {} - '@types/semver@7.3.13': {} + graphql@16.11.0: {} - '@types/set-cookie-parser@2.4.2': - dependencies: - '@types/node': 17.0.22 + has-bigints@1.1.0: {} - '@typescript-eslint/eslint-plugin@5.42.0(@typescript-eslint/parser@5.42.0(eslint@8.26.0)(typescript@4.6.2))(eslint@8.26.0)(typescript@4.6.2)': - dependencies: - '@typescript-eslint/parser': 5.42.0(eslint@8.26.0)(typescript@4.6.2) - '@typescript-eslint/scope-manager': 5.42.0 - '@typescript-eslint/type-utils': 5.42.0(eslint@8.26.0)(typescript@4.6.2) - '@typescript-eslint/utils': 5.42.0(eslint@8.26.0)(typescript@4.6.2) - debug: 4.3.4 - eslint: 8.26.0 - ignore: 5.2.0 - natural-compare-lite: 1.4.0 - regexpp: 3.2.0 - semver: 7.3.8 - tsutils: 3.21.0(typescript@4.6.2) - optionalDependencies: - typescript: 4.6.2 - transitivePeerDependencies: - - supports-color + has-flag@4.0.0: {} - '@typescript-eslint/parser@5.42.0(eslint@8.26.0)(typescript@4.6.2)': + has-property-descriptors@1.0.2: dependencies: - '@typescript-eslint/scope-manager': 5.42.0 - '@typescript-eslint/types': 5.42.0 - '@typescript-eslint/typescript-estree': 5.42.0(typescript@4.6.2) - debug: 4.3.4 - eslint: 8.26.0 - optionalDependencies: - typescript: 4.6.2 - transitivePeerDependencies: - - supports-color + es-define-property: 1.0.1 - '@typescript-eslint/scope-manager@5.42.0': + has-proto@1.2.0: dependencies: - '@typescript-eslint/types': 5.42.0 - '@typescript-eslint/visitor-keys': 5.42.0 + dunder-proto: 1.0.1 - '@typescript-eslint/type-utils@5.42.0(eslint@8.26.0)(typescript@4.6.2)': + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: dependencies: - '@typescript-eslint/typescript-estree': 5.42.0(typescript@4.6.2) - '@typescript-eslint/utils': 5.42.0(eslint@8.26.0)(typescript@4.6.2) - debug: 4.3.4 - eslint: 8.26.0 - tsutils: 3.21.0(typescript@4.6.2) - optionalDependencies: - typescript: 4.6.2 - transitivePeerDependencies: - - supports-color + has-symbols: 1.1.0 - '@typescript-eslint/types@5.42.0': {} + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 - '@typescript-eslint/typescript-estree@5.42.0(typescript@4.6.2)': + hast-util-to-estree@3.1.3: dependencies: - '@typescript-eslint/types': 5.42.0 - '@typescript-eslint/visitor-keys': 5.42.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.3.8 - tsutils: 3.21.0(typescript@4.6.2) - optionalDependencies: - typescript: 4.6.2 + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.17 + unist-util-position: 5.0.0 + zwitch: 2.0.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.42.0(eslint@8.26.0)(typescript@4.6.2)': - dependencies: - '@types/json-schema': 7.0.10 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.42.0 - '@typescript-eslint/types': 5.42.0 - '@typescript-eslint/typescript-estree': 5.42.0(typescript@4.6.2) - eslint: 8.26.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.26.0) - semver: 7.3.8 + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.17 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/visitor-keys@5.42.0': + hast-util-to-string@3.0.1: dependencies: - '@typescript-eslint/types': 5.42.0 - eslint-visitor-keys: 3.3.0 + '@types/hast': 3.0.4 - '@vitest/coverage-c8@0.24.4': + hast-util-whitespace@3.0.0: dependencies: - c8: 7.12.0 - vitest: 0.24.4 - transitivePeerDependencies: - - '@edge-runtime/vm' - - '@vitest/browser' - - '@vitest/ui' - - happy-dom - - jsdom - - less - - sass - - stylus - - sugarss - - supports-color - - terser + '@types/hast': 3.0.4 + + headers-polyfill@4.0.3: {} - '@xmldom/xmldom@0.7.5': {} + hermes-estree@0.25.1: {} - acorn-jsx@5.3.2(acorn@8.8.1): + hermes-parser@0.25.1: dependencies: - acorn: 8.8.1 + hermes-estree: 0.25.1 - acorn@8.8.1: {} + html-escaper@2.0.2: {} - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 + html-void-elements@3.0.0: {} - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 + human-id@4.1.1: {} - ansi-regex@5.0.1: {} + humps@2.0.1: {} - ansi-styles@4.3.0: + iconv-lite@0.4.24: dependencies: - color-convert: 2.0.1 + safer-buffer: 2.1.2 - any-promise@1.3.0: {} + ignore@5.2.0: {} - anymatch@3.1.2: + ignore@7.0.5: {} + + image-size@2.0.2: {} + + import-fresh@3.3.0: dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 + parent-module: 1.0.1 + resolve-from: 4.0.0 - argparse@2.0.1: {} + imurmurhash@0.1.4: {} - array-union@2.1.0: {} + inline-style-parser@0.2.4: {} - assertion-error@1.1.0: {} + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 - balanced-match@1.0.2: {} + is-alphabetical@2.0.1: {} - base64-js@1.5.1: {} + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 - binary-extensions@2.2.0: {} + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 - bl@4.1.0: + is-arrayish@0.3.2: + optional: true + + is-async-function@2.1.1: dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.0 + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 - brace-expansion@1.1.11: + is-bigint@1.1.0: dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 + has-bigints: 1.1.0 - braces@3.0.2: + is-binary-path@2.1.0: dependencies: - fill-range: 7.0.1 + binary-extensions: 2.2.0 - buffer@5.7.1: + is-boolean-object@1.2.2: dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} - bundle-require@3.1.0(esbuild@0.15.12): + is-core-module@2.16.1: dependencies: - esbuild: 0.15.12 - load-tsconfig: 0.2.3 + hasown: 2.0.2 - bytes-iec@3.1.1: {} + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 - c8@7.12.0: + is-date-object@1.1.0: dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@istanbuljs/schema': 0.1.3 - find-up: 5.0.0 - foreground-child: 2.0.0 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-report: 3.0.0 - istanbul-reports: 3.1.5 - rimraf: 3.0.2 - test-exclude: 6.0.0 - v8-to-istanbul: 9.0.1 - yargs: 16.2.0 - yargs-parser: 20.2.9 + call-bound: 1.0.4 + has-tostringtag: 1.0.2 - cac@6.7.14: {} + is-decimal@2.0.1: {} - callsites@3.1.0: {} + is-extglob@2.1.1: {} - chai@4.3.6: + is-finalizationregistry@1.1.1: dependencies: - assertion-error: 1.1.0 - check-error: 1.0.2 - deep-eql: 3.0.1 - get-func-name: 2.0.0 - loupe: 2.3.4 - pathval: 1.1.1 - type-detect: 4.0.8 + call-bound: 1.0.4 - chalk@4.1.1: + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.1.0: dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 - chalk@4.1.2: + is-glob@4.0.3: dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 + is-extglob: 2.1.1 - chardet@0.7.0: {} + is-hexadecimal@2.0.1: {} - check-error@1.0.2: {} + is-map@2.0.3: {} - chokidar@3.5.3: + is-negative-zero@2.0.3: {} + + is-node-process@1.2.0: {} + + is-number-object@1.1.1: dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 + call-bound: 1.0.4 + has-tostringtag: 1.0.2 - ci-job-number@1.2.2: {} + is-number@7.0.0: {} - cli-cursor@3.1.0: + is-plain-obj@4.1.0: {} + + is-regex@1.2.1: dependencies: - restore-cursor: 3.1.0 + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} - cli-spinners@2.6.1: {} + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 - cli-width@3.0.0: {} + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 - cliui@7.0.4: + is-subdir@1.2.0: dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 + better-path-resolve: 1.0.0 - clone@1.0.4: {} + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 - color-convert@2.0.1: + is-typed-array@1.1.15: dependencies: - color-name: 1.1.4 + which-typed-array: 1.1.19 - color-name@1.1.4: {} + is-weakmap@2.0.2: {} - commander@4.1.1: {} + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 - concat-map@0.0.1: {} + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 - convert-source-map@1.9.0: {} + is-windows@1.0.2: {} - cookie@0.4.2: {} + isarray@2.0.5: {} - cross-fetch@3.1.5: + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: dependencies: - node-fetch: 2.6.7 + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.29 + debug: 4.4.1 + istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - - encoding + - supports-color - cross-spawn@7.0.3: + istanbul-reports@3.1.7: dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 - debug@4.3.4: + iterator.prototype@1.1.5: dependencies: - ms: 2.1.2 + define-data-property: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 - deep-eql@3.0.1: + jackspeak@3.4.3: dependencies: - type-detect: 4.0.8 + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 - deep-is@0.1.4: {} + jiti@2.5.1: {} - defaults@1.0.3: - dependencies: - clone: 1.0.4 + joycon@3.1.1: {} - dir-glob@3.0.1: + js-tokens@4.0.0: {} + + js-tokens@9.0.1: {} + + js-yaml@3.14.1: dependencies: - path-type: 4.0.0 + argparse: 1.0.10 + esprima: 4.0.1 - doctrine@3.0.0: + js-yaml@4.1.0: dependencies: - esutils: 2.0.3 + argparse: 2.0.1 - emoji-regex@8.0.0: {} + jsesc@3.1.0: {} - esbuild-android-64@0.14.27: - optional: true + json-buffer@3.0.1: {} - esbuild-android-64@0.15.12: - optional: true + json-schema-traverse@0.4.1: {} - esbuild-android-arm64@0.14.27: - optional: true + json-stable-stringify-without-jsonify@1.0.1: {} - esbuild-android-arm64@0.15.12: - optional: true + json5@1.0.2: + dependencies: + minimist: 1.2.8 - esbuild-darwin-64@0.14.27: - optional: true + json5@2.2.3: {} - esbuild-darwin-64@0.15.12: - optional: true + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 - esbuild-darwin-arm64@0.14.27: - optional: true + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 - esbuild-darwin-arm64@0.15.12: - optional: true + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 - esbuild-freebsd-64@0.14.27: - optional: true + language-subtag-registry@0.3.23: {} - esbuild-freebsd-64@0.15.12: - optional: true + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 - esbuild-freebsd-arm64@0.14.27: - optional: true + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 - esbuild-freebsd-arm64@0.15.12: + lightningcss-darwin-arm64@1.30.1: optional: true - esbuild-linux-32@0.14.27: + lightningcss-darwin-x64@1.30.1: optional: true - esbuild-linux-32@0.15.12: + lightningcss-freebsd-x64@1.30.1: optional: true - esbuild-linux-64@0.14.27: + lightningcss-linux-arm-gnueabihf@1.30.1: optional: true - esbuild-linux-64@0.15.12: + lightningcss-linux-arm64-gnu@1.30.1: optional: true - esbuild-linux-arm64@0.14.27: + lightningcss-linux-arm64-musl@1.30.1: optional: true - esbuild-linux-arm64@0.15.12: + lightningcss-linux-x64-gnu@1.30.1: optional: true - esbuild-linux-arm@0.14.27: + lightningcss-linux-x64-musl@1.30.1: optional: true - esbuild-linux-arm@0.15.12: + lightningcss-win32-arm64-msvc@1.30.1: optional: true - esbuild-linux-mips64le@0.14.27: + lightningcss-win32-x64-msvc@1.30.1: optional: true - esbuild-linux-mips64le@0.15.12: - optional: true + lightningcss@1.30.1: + dependencies: + detect-libc: 2.0.4 + optionalDependencies: + lightningcss-darwin-arm64: 1.30.1 + lightningcss-darwin-x64: 1.30.1 + lightningcss-freebsd-x64: 1.30.1 + lightningcss-linux-arm-gnueabihf: 1.30.1 + lightningcss-linux-arm64-gnu: 1.30.1 + lightningcss-linux-arm64-musl: 1.30.1 + lightningcss-linux-x64-gnu: 1.30.1 + lightningcss-linux-x64-musl: 1.30.1 + lightningcss-win32-arm64-msvc: 1.30.1 + lightningcss-win32-x64-msvc: 1.30.1 - esbuild-linux-ppc64le@0.14.27: - optional: true + lilconfig@2.0.6: {} - esbuild-linux-ppc64le@0.15.12: - optional: true + lilconfig@3.1.3: {} - esbuild-linux-riscv64@0.14.27: - optional: true + lines-and-columns@1.2.4: {} - esbuild-linux-riscv64@0.15.12: - optional: true + load-tsconfig@0.2.3: {} - esbuild-linux-s390x@0.14.27: - optional: true + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 - esbuild-linux-s390x@0.15.12: - optional: true + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 - esbuild-netbsd-64@0.14.27: - optional: true + lodash.merge@4.6.2: {} - esbuild-netbsd-64@0.15.12: - optional: true + lodash.sortby@4.7.0: {} - esbuild-openbsd-64@0.14.27: - optional: true + lodash.startcase@4.4.0: {} - esbuild-openbsd-64@0.15.12: - optional: true + longest-streak@3.1.0: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 - esbuild-plugin-umd-wrapper@3.0.0: {} + loupe@3.2.0: {} - esbuild-sunos-64@0.14.27: - optional: true + lru-cache@10.4.3: {} - esbuild-sunos-64@0.15.12: - optional: true + lru-cache@11.2.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lucide-react@0.539.0(react@19.1.0): + dependencies: + react: 19.1.0 - esbuild-windows-32@0.14.27: - optional: true + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.4 - esbuild-windows-32@0.15.12: - optional: true + magicast@0.3.5: + dependencies: + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 + source-map-js: 1.2.1 - esbuild-windows-64@0.14.27: - optional: true + make-dir@4.0.0: + dependencies: + semver: 7.7.2 - esbuild-windows-64@0.15.12: - optional: true + markdown-extensions@2.0.0: {} - esbuild-windows-arm64@0.14.27: - optional: true + markdown-table@3.0.4: {} - esbuild-windows-arm64@0.15.12: - optional: true + math-intrinsics@1.1.0: {} - esbuild@0.14.27: - optionalDependencies: - esbuild-android-64: 0.14.27 - esbuild-android-arm64: 0.14.27 - esbuild-darwin-64: 0.14.27 - esbuild-darwin-arm64: 0.14.27 - esbuild-freebsd-64: 0.14.27 - esbuild-freebsd-arm64: 0.14.27 - esbuild-linux-32: 0.14.27 - esbuild-linux-64: 0.14.27 - esbuild-linux-arm: 0.14.27 - esbuild-linux-arm64: 0.14.27 - esbuild-linux-mips64le: 0.14.27 - esbuild-linux-ppc64le: 0.14.27 - esbuild-linux-riscv64: 0.14.27 - esbuild-linux-s390x: 0.14.27 - esbuild-netbsd-64: 0.14.27 - esbuild-openbsd-64: 0.14.27 - esbuild-sunos-64: 0.14.27 - esbuild-windows-32: 0.14.27 - esbuild-windows-64: 0.14.27 - esbuild-windows-arm64: 0.14.27 + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 - esbuild@0.15.12: - optionalDependencies: - '@esbuild/android-arm': 0.15.12 - '@esbuild/linux-loong64': 0.15.12 - esbuild-android-64: 0.15.12 - esbuild-android-arm64: 0.15.12 - esbuild-darwin-64: 0.15.12 - esbuild-darwin-arm64: 0.15.12 - esbuild-freebsd-64: 0.15.12 - esbuild-freebsd-arm64: 0.15.12 - esbuild-linux-32: 0.15.12 - esbuild-linux-64: 0.15.12 - esbuild-linux-arm: 0.15.12 - esbuild-linux-arm64: 0.15.12 - esbuild-linux-mips64le: 0.15.12 - esbuild-linux-ppc64le: 0.15.12 - esbuild-linux-riscv64: 0.15.12 - esbuild-linux-s390x: 0.15.12 - esbuild-netbsd-64: 0.15.12 - esbuild-openbsd-64: 0.15.12 - esbuild-sunos-64: 0.15.12 - esbuild-windows-32: 0.15.12 - esbuild-windows-64: 0.15.12 - esbuild-windows-arm64: 0.15.12 - - escalade@3.1.1: {} - - escape-string-regexp@1.0.5: {} + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color - escape-string-regexp@4.0.0: {} + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 - eslint-config-prettier@8.5.0(eslint@8.26.0): + mdast-util-gfm-footnote@2.1.0: dependencies: - eslint: 8.26.0 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color - eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.5.0(eslint@8.26.0))(eslint@8.26.0)(prettier@2.7.1): + mdast-util-gfm-strikethrough@2.0.0: dependencies: - eslint: 8.26.0 - prettier: 2.7.1 - prettier-linter-helpers: 1.0.0 - optionalDependencies: - eslint-config-prettier: 8.5.0(eslint@8.26.0) + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - eslint-scope@5.1.1: + mdast-util-gfm-table@2.0.0: dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - eslint-scope@7.1.1: + mdast-util-gfm-task-list-item@2.0.0: dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - eslint-utils@3.0.0(eslint@8.26.0): + mdast-util-gfm@3.1.0: dependencies: - eslint: 8.26.0 - eslint-visitor-keys: 2.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - eslint-visitor-keys@2.1.0: {} + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - eslint-visitor-keys@3.3.0: {} + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color - eslint@8.26.0: + mdast-util-mdx@3.0.0: dependencies: - '@eslint/eslintrc': 1.3.3 - '@humanwhocodes/config-array': 0.11.7 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-utils: 3.0.0(eslint@8.26.0) - eslint-visitor-keys: 3.3.0 - espree: 9.4.0 - esquery: 1.4.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.17.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.0 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-sdsl: 4.1.5 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.1 - regexpp: 3.2.0 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - espree@9.4.0: + mdast-util-mdxjs-esm@2.0.1: dependencies: - acorn: 8.8.1 - acorn-jsx: 5.3.2(acorn@8.8.1) - eslint-visitor-keys: 3.3.0 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color - esquery@1.4.0: + mdast-util-phrasing@4.1.0: dependencies: - estraverse: 5.3.0 + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 - esrecurse@4.3.0: + mdast-util-to-hast@13.2.0: dependencies: - estraverse: 5.3.0 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 - estraverse@4.3.0: {} + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 - estraverse@5.3.0: {} + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 - esutils@2.0.3: {} + merge2@1.4.1: {} - events@3.3.0: {} + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 - execa@5.1.1: + micromark-extension-mdxjs-esm@3.0.0: dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 - external-editor@3.1.0: + micromark-extension-mdxjs@3.0.0: dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 - fast-check@3.3.0: + micromark-factory-destination@2.0.1: dependencies: - pure-rand: 5.0.3 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - fast-deep-equal@3.1.3: {} + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - fast-diff@1.2.0: {} + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 - fast-glob@3.2.11: + micromark-factory-space@2.0.1: dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.4 + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 - fast-json-stable-stringify@2.1.0: {} + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - fast-levenshtein@2.0.6: {} + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - fastq@1.13.0: + micromark-util-character@2.1.1: dependencies: - reusify: 1.0.4 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - figures@3.2.0: + micromark-util-chunked@2.0.1: dependencies: - escape-string-regexp: 1.0.5 + micromark-util-symbol: 2.0.1 - file-entry-cache@6.0.1: + micromark-util-classify-character@2.0.1: dependencies: - flat-cache: 3.0.4 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - fill-range@7.0.1: + micromark-util-combine-extensions@2.0.1: dependencies: - to-regex-range: 5.0.1 + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 - find-up@5.0.0: + micromark-util-decode-numeric-character-reference@2.0.2: dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 + micromark-util-symbol: 2.0.1 - flat-cache@3.0.4: + micromark-util-decode-string@2.0.1: dependencies: - flatted: 3.2.5 - rimraf: 3.0.2 + decode-named-character-reference: 1.2.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 - flatted@3.2.5: {} + micromark-util-encode@2.0.1: {} - foreground-child@2.0.0: + micromark-util-events-to-acorn@2.0.3: dependencies: - cross-spawn: 7.0.3 - signal-exit: 3.0.7 + '@types/estree': 1.0.8 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 - fs.realpath@1.0.0: {} + micromark-util-html-tag-name@2.0.1: {} - fsevents@2.3.2: - optional: true + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 - function-bind@1.1.1: {} + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 - get-caller-file@2.0.5: {} + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 - get-func-name@2.0.0: {} + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 - get-stream@6.0.1: {} + micromark-util-symbol@2.0.1: {} - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 + micromark-util-types@2.0.2: {} - glob-parent@6.0.2: + micromark@4.0.2: dependencies: - is-glob: 4.0.3 + '@types/debug': 4.1.12 + debug: 4.4.1 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color - glob@7.1.6: + micromatch@4.0.8: dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + braces: 3.0.3 + picomatch: 2.3.1 - glob@7.2.3: + minimatch@10.0.3: dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 + '@isaacs/brace-expansion': 5.0.0 - globals@13.17.0: + minimatch@3.1.2: dependencies: - type-fest: 0.20.2 + brace-expansion: 1.1.11 - globby@11.1.0: + minimatch@9.0.5: dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.11 - ignore: 5.2.0 - merge2: 1.4.1 - slash: 3.0.0 + brace-expansion: 2.0.2 - grapheme-splitter@1.0.4: {} + minimist@1.2.8: {} - graphql@16.3.0: {} - - has-flag@4.0.0: {} + minipass@7.1.2: {} - has@1.0.3: + minizlib@3.0.2: dependencies: - function-bind: 1.1.1 + minipass: 7.1.2 - headers-polyfill@3.0.4: {} + mkdirp@1.0.4: {} - html-escaper@2.0.2: {} + mkdirp@3.0.1: {} + + mlly@1.7.4: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + mri@1.2.0: {} + + ms@2.1.3: {} + + msw@2.11.5(@types/node@24.2.0)(typescript@5.9.2): + dependencies: + '@inquirer/confirm': 5.1.19(@types/node@24.2.0) + '@mswjs/interceptors': 0.39.8 + '@open-draft/deferred-promise': 2.2.0 + '@types/statuses': 2.0.6 + cookie: 1.0.2 + graphql: 16.11.0 + headers-polyfill: 4.0.3 + is-node-process: 1.2.0 + outvariant: 1.4.3 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + rettime: 0.7.0 + statuses: 2.0.2 + strict-event-emitter: 0.5.1 + tough-cookie: 6.0.0 + type-fest: 4.41.0 + until-async: 3.0.2 + yargs: 17.7.2 + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - '@types/node' - human-signals@2.1.0: {} + mute-stream@2.0.0: {} - humps@2.0.1: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 - husky@7.0.4: {} + nanoid@3.3.11: {} - iconv-lite@0.4.24: + nanospinner@1.0.0: dependencies: - safer-buffer: 2.1.2 + picocolors: 1.1.1 - ieee754@1.2.1: {} + natural-compare@1.4.0: {} - ignore@5.2.0: {} + negotiator@1.0.0: {} - import-fresh@3.3.0: + next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - imurmurhash@0.1.4: {} + next@15.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + '@next/env': 15.5.6 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001731 + postcss: 8.4.31 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + styled-jsx: 5.1.6(react@19.1.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.5.6 + '@next/swc-darwin-x64': 15.5.6 + '@next/swc-linux-arm64-gnu': 15.5.6 + '@next/swc-linux-arm64-musl': 15.5.6 + '@next/swc-linux-x64-gnu': 15.5.6 + '@next/swc-linux-x64-musl': 15.5.6 + '@next/swc-win32-arm64-msvc': 15.5.6 + '@next/swc-win32-x64-msvc': 15.5.6 + sharp: 0.34.3 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros - inflight@1.0.6: + node-fetch@2.6.7: dependencies: - once: 1.4.0 - wrappy: 1.0.2 + whatwg-url: 5.0.0 + + node-releases@2.0.19: {} + + normalize-path@3.0.0: {} + + npm-to-yarn@3.0.1: {} - inherits@2.0.4: {} + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} - inquirer@8.2.2: + object-keys@1.1.1: {} + + object.assign@4.1.7: dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 5.4.1 - run-async: 2.4.1 - rxjs: 7.5.5 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 - is-binary-path@2.1.0: + object.entries@1.1.9: dependencies: - binary-extensions: 2.2.0 + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 - is-core-module@2.11.0: + object.fromentries@2.0.8: dependencies: - has: 1.0.3 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 - is-extglob@2.1.1: {} + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 - is-fullwidth-code-point@3.0.0: {} + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 - is-glob@4.0.3: + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.3: dependencies: - is-extglob: 2.1.1 + oniguruma-parser: 0.12.1 + regex: 6.0.1 + regex-recursion: 6.0.2 - is-interactive@1.0.0: {} + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 - is-node-process@1.0.1: {} + os-tmpdir@1.0.2: {} - is-number@7.0.0: {} + outdent@0.5.0: {} - is-path-inside@3.0.3: {} + outvariant@1.4.3: {} - is-stream@2.0.1: {} + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 - is-unicode-supported@0.1.0: {} + p-filter@2.1.0: + dependencies: + p-map: 2.1.0 - isexe@2.0.0: {} + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 - istanbul-lib-coverage@3.2.0: {} + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 - istanbul-lib-report@3.0.0: + p-locate@4.1.0: dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 - supports-color: 7.2.0 + p-limit: 2.3.0 - istanbul-reports@3.1.5: + p-locate@5.0.0: dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 + p-limit: 3.1.0 - joycon@3.1.1: {} + p-map@2.1.0: {} - js-levenshtein@1.1.6: {} + p-try@2.2.0: {} - js-sdsl@4.1.5: {} + package-json-from-dist@1.0.1: {} - js-yaml@4.1.0: + package-manager-detector@0.2.11: dependencies: - argparse: 2.0.1 - - json-schema-traverse@0.4.1: {} + quansync: 0.2.10 - json-stable-stringify-without-jsonify@1.0.1: {} + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 - levn@0.4.1: + parse-entities@4.0.2: dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.2.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 - lilconfig@2.0.6: {} + path-browserify@1.0.1: {} - lines-and-columns@1.2.4: {} + path-exists@4.0.0: {} - load-tsconfig@0.2.3: {} + path-key@3.1.1: {} - local-pkg@0.4.2: {} + path-parse@1.0.7: {} - locate-path@6.0.0: + path-scurry@1.11.1: dependencies: - p-locate: 5.0.0 + lru-cache: 10.4.3 + minipass: 7.1.2 - lodash.merge@4.6.2: {} + path-to-regexp@6.3.0: {} - lodash.sortby@4.7.0: {} + path-to-regexp@8.3.0: {} - lodash@4.17.21: {} + path-type@4.0.0: {} - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 + pathe@2.0.3: {} - loupe@2.3.4: - dependencies: - get-func-name: 2.0.0 + pathval@2.0.1: {} - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 + picocolors@1.1.1: {} - make-dir@3.1.0: - dependencies: - semver: 6.3.0 + picomatch@2.3.1: {} - merge-stream@2.0.0: {} + picomatch@4.0.3: {} - merge2@1.4.1: {} + pify@4.0.1: {} + + pirates@4.0.5: {} - micromatch@4.0.4: + pkg-types@1.3.1: dependencies: - braces: 3.0.2 - picomatch: 2.3.1 + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 - mimic-fn@2.1.0: {} + possible-typed-array-names@1.1.0: {} - minimatch@3.1.2: + postcss-load-config@6.0.1(jiti@2.5.1)(postcss@8.5.6)(yaml@2.8.1): dependencies: - brace-expansion: 1.1.11 + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.5.1 + postcss: 8.5.6 + yaml: 2.8.1 - mkdirp@1.0.4: {} + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 - ms@2.1.2: {} + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 - msw@0.39.2: + postcss@8.5.6: dependencies: - '@mswjs/cookies': 0.2.0 - '@mswjs/interceptors': 0.15.1 - '@open-draft/until': 1.0.3 - '@types/cookie': 0.4.1 - '@types/js-levenshtein': 1.1.1 - chalk: 4.1.1 - chokidar: 3.5.3 - cookie: 0.4.2 - graphql: 16.3.0 - headers-polyfill: 3.0.4 - inquirer: 8.2.2 - is-node-process: 1.0.1 - js-levenshtein: 1.1.6 - node-fetch: 2.6.7 - path-to-regexp: 6.2.0 - statuses: 2.0.1 - strict-event-emitter: 0.2.0 - type-fest: 1.4.0 - yargs: 17.4.0 - transitivePeerDependencies: - - encoding - - supports-color + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier-plugin-tailwindcss@0.6.14(@ianvs/prettier-plugin-sort-imports@4.5.1(prettier@3.6.2))(prettier@3.6.2): + dependencies: + prettier: 3.6.2 + optionalDependencies: + '@ianvs/prettier-plugin-sort-imports': 4.5.1(prettier@3.6.2) + + prettier@2.7.1: {} - mute-stream@0.0.8: {} + prettier@3.6.2: {} - mz@2.7.0: + prop-types@15.8.1: dependencies: - any-promise: 1.3.0 + loose-envify: 1.4.0 object-assign: 4.1.1 - thenify-all: 1.6.0 + react-is: 16.13.1 - nanoid@3.3.4: {} + property-information@7.1.0: {} - nanospinner@1.0.0: - dependencies: - picocolors: 1.0.0 - - natural-compare-lite@1.4.0: {} + punycode@2.1.1: {} - natural-compare@1.4.0: {} + pure-rand@5.0.3: {} - node-fetch@2.6.7: - dependencies: - whatwg-url: 5.0.0 + quansync@0.2.10: {} - normalize-path@3.0.0: {} + queue-microtask@1.2.3: {} - npm-run-path@4.0.1: + react-dom@19.1.0(react@19.1.0): dependencies: - path-key: 3.1.1 + react: 19.1.0 + scheduler: 0.26.0 - object-assign@4.1.1: {} + react-is@16.13.1: {} - once@1.4.0: + react-medium-image-zoom@5.4.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - wrappy: 1.0.2 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) - onetime@5.1.2: + react-remove-scroll-bar@2.3.8(@types/react@19.1.9)(react@19.1.0): dependencies: - mimic-fn: 2.1.0 + react: 19.1.0 + react-style-singleton: 2.2.3(@types/react@19.1.9)(react@19.1.0) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.9 - optionator@0.9.1: + react-remove-scroll@2.7.1(@types/react@19.1.9)(react@19.1.0): dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.3 + react: 19.1.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.9)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.9)(react@19.1.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.1.9)(react@19.1.0) + use-sidecar: 1.1.3(@types/react@19.1.9)(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.9 - ora@5.4.1: + react-style-singleton@2.2.3(@types/react@19.1.9)(react@19.1.0): dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.6.1 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - - os-tmpdir@1.0.2: {} - - outvariant@1.3.0: {} + get-nonce: 1.0.1 + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.9 - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 + react@19.1.0: {} - p-locate@5.0.0: + read-yaml-file@1.1.0: dependencies: - p-limit: 3.1.0 + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 - parent-module@1.0.1: + readdirp@3.6.0: dependencies: - callsites: 3.1.0 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} + picomatch: 2.3.1 - path-key@3.1.1: {} + readdirp@4.1.2: {} - path-parse@1.0.7: {} + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 - path-to-regexp@6.2.0: {} + recma-jsx@1.0.1(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 - path-type@4.0.0: {} + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.8 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 - pathval@1.1.1: {} + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 - picocolors@1.0.0: {} + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 - picomatch@2.3.1: {} + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 - pirates@4.0.5: {} + regex-utilities@2.3.0: {} - postcss-load-config@3.1.4(postcss@8.4.18): + regex@6.0.1: dependencies: - lilconfig: 2.0.6 - yaml: 1.10.2 - optionalDependencies: - postcss: 8.4.18 + regex-utilities: 2.3.0 - postcss@8.4.18: + regexp.prototype.flags@1.5.4: dependencies: - nanoid: 3.3.4 - picocolors: 1.0.0 - source-map-js: 1.0.2 - - prelude-ls@1.2.1: {} + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 - prettier-linter-helpers@1.0.0: + rehype-recma@1.0.0: dependencies: - fast-diff: 1.2.0 - - prettier@2.7.1: {} + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color - punycode@2.1.1: {} + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color - pure-rand@5.0.3: {} + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color - queue-microtask@1.2.3: {} + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color - readable-stream@3.6.0: + remark-rehype@11.1.2: dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 - readdirp@3.6.0: + remark-stringify@11.0.0: dependencies: - picomatch: 2.3.1 + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 - regexpp@3.2.0: {} + remark@15.0.1: + dependencies: + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color require-directory@2.1.1: {} @@ -2909,54 +9077,140 @@ snapshots: resolve-from@5.0.0: {} - resolve@1.22.1: + resolve@1.22.10: dependencies: - is-core-module: 2.11.0 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@3.1.0: + resolve@2.0.0-next.5: dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 - reusify@1.0.4: {} + rettime@0.7.0: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 + reusify@1.0.4: {} rollup-plugin-analyzer@4.0.0: {} - rollup@2.79.1: + rollup@4.46.2: + dependencies: + '@types/estree': 1.0.8 optionalDependencies: - fsevents: 2.3.2 - - run-async@2.4.1: {} + '@rollup/rollup-android-arm-eabi': 4.46.2 + '@rollup/rollup-android-arm64': 4.46.2 + '@rollup/rollup-darwin-arm64': 4.46.2 + '@rollup/rollup-darwin-x64': 4.46.2 + '@rollup/rollup-freebsd-arm64': 4.46.2 + '@rollup/rollup-freebsd-x64': 4.46.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 + '@rollup/rollup-linux-arm-musleabihf': 4.46.2 + '@rollup/rollup-linux-arm64-gnu': 4.46.2 + '@rollup/rollup-linux-arm64-musl': 4.46.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 + '@rollup/rollup-linux-ppc64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-musl': 4.46.2 + '@rollup/rollup-linux-s390x-gnu': 4.46.2 + '@rollup/rollup-linux-x64-gnu': 4.46.2 + '@rollup/rollup-linux-x64-musl': 4.46.2 + '@rollup/rollup-win32-arm64-msvc': 4.46.2 + '@rollup/rollup-win32-ia32-msvc': 4.46.2 + '@rollup/rollup-win32-x64-msvc': 4.46.2 + fsevents: 2.3.3 run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - rxjs@7.5.5: + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-push-apply@1.0.0: dependencies: - tslib: 2.3.1 + es-errors: 1.3.0 + isarray: 2.0.5 - safe-buffer@5.2.1: {} + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 safer-buffer@2.1.2: {} - semver@6.3.0: {} + scheduler@0.26.0: {} + + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 + + semver@6.3.1: {} semver@7.3.5: dependencies: lru-cache: 6.0.0 - semver@7.3.8: + semver@7.7.2: {} + + set-function-length@1.2.2: dependencies: - lru-cache: 6.0.0 + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 - set-cookie-parser@2.4.8: {} + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + sharp@0.34.3: + dependencies: + color: 4.2.3 + detect-libc: 2.0.4 + semver: 7.7.2 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.3 + '@img/sharp-darwin-x64': 0.34.3 + '@img/sharp-libvips-darwin-arm64': 1.2.0 + '@img/sharp-libvips-darwin-x64': 1.2.0 + '@img/sharp-libvips-linux-arm': 1.2.0 + '@img/sharp-libvips-linux-arm64': 1.2.0 + '@img/sharp-libvips-linux-ppc64': 1.2.0 + '@img/sharp-libvips-linux-s390x': 1.2.0 + '@img/sharp-libvips-linux-x64': 1.2.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + '@img/sharp-linux-arm': 0.34.3 + '@img/sharp-linux-arm64': 0.34.3 + '@img/sharp-linux-ppc64': 0.34.3 + '@img/sharp-linux-s390x': 0.34.3 + '@img/sharp-linux-x64': 0.34.3 + '@img/sharp-linuxmusl-arm64': 0.34.3 + '@img/sharp-linuxmusl-x64': 0.34.3 + '@img/sharp-wasm32': 0.34.3 + '@img/sharp-win32-arm64': 0.34.3 + '@img/sharp-win32-ia32': 0.34.3 + '@img/sharp-win32-x64': 0.34.3 + optional: true shebang-command@2.0.0: dependencies: @@ -2964,7 +9218,53 @@ snapshots: shebang-regex@3.0.0: {} - signal-exit@3.0.7: {} + shiki@3.13.0: + dependencies: + '@shikijs/core': 3.13.0 + '@shikijs/engine-javascript': 3.13.0 + '@shikijs/engine-oniguruma': 3.13.0 + '@shikijs/langs': 3.13.0 + '@shikijs/themes': 3.13.0 + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + siginfo@2.0.0: {} + + signal-exit@4.1.0: {} + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + optional: true size-limit@7.0.8: dependencies: @@ -2975,21 +9275,39 @@ snapshots: lilconfig: 2.0.6 mkdirp: 1.0.4 nanospinner: 1.0.0 - picocolors: 1.0.0 + picocolors: 1.1.1 slash@3.0.0: {} - source-map-js@1.0.2: {} + source-map-js@1.2.1: {} + + source-map@0.7.6: {} source-map@0.8.0-beta.0: dependencies: whatwg-url: 7.1.0 - statuses@2.0.1: {} + space-separated-tokens@2.0.2: {} + + spawndamnit@3.0.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + sprintf-js@1.0.3: {} + + stackback@0.0.2: {} - strict-event-emitter@0.2.0: + statuses@2.0.2: {} + + std-env@3.9.0: {} + + stop-iteration-iterator@1.1.0: dependencies: - events: 3.3.0 + es-errors: 1.3.0 + internal-slot: 1.1.0 + + strict-event-emitter@0.5.1: {} string-width@4.2.3: dependencies: @@ -2997,26 +9315,101 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string_decoder@1.3.0: + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.24.0 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + stringify-entities@4.0.4: dependencies: - safe-buffer: 5.2.1 + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - strip-final-newline@2.0.0: {} + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-bom@3.0.0: {} strip-json-comments@3.1.1: {} - strip-literal@0.4.2: + strip-literal@3.0.0: + dependencies: + js-tokens: 9.0.1 + + style-to-js@1.1.17: + dependencies: + style-to-object: 1.0.9 + + style-to-object@1.0.9: + dependencies: + inline-style-parser: 0.2.4 + + styled-jsx@5.1.6(react@19.1.0): dependencies: - acorn: 8.8.1 + client-only: 0.0.1 + react: 19.1.0 - sucrase@3.28.0: + sucrase@3.35.0: dependencies: + '@jridgewell/gen-mapping': 0.3.12 commander: 4.1.1 - glob: 7.1.6 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.5 @@ -3028,13 +9421,28 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - test-exclude@6.0.0: + tailwind-merge@3.3.1: {} + + tailwindcss@4.1.11: {} + + tapable@2.2.2: {} + + tar@7.4.3: dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.2 + mkdirp: 3.0.1 + yallist: 5.0.0 - text-table@0.2.0: {} + term-size@2.2.1: {} + + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 thenify-all@1.6.0: dependencies: @@ -3044,13 +9452,33 @@ snapshots: dependencies: any-promise: 1.3.0 - through@2.3.8: {} + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyexec@1.0.1: {} + + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinypool@1.1.1: {} - tinybench@2.3.1: {} + tinyrainbow@2.0.0: {} - tinypool@0.3.0: {} + tinyspy@4.0.3: {} - tinyspy@1.0.2: {} + tldts-core@7.0.17: {} + + tldts@7.0.17: + dependencies: + tldts-core: 7.0.17 tmp@0.0.33: dependencies: @@ -3060,6 +9488,10 @@ snapshots: dependencies: is-number: 7.0.0 + tough-cookie@6.0.0: + dependencies: + tldts: 7.0.17 + tr46@0.0.3: {} tr46@1.0.1: @@ -3068,100 +9500,304 @@ snapshots: tree-kill@1.2.2: {} + trim-lines@3.0.1: {} + + trough@2.2.0: {} + + ts-api-utils@2.1.0(typescript@5.9.2): + dependencies: + typescript: 5.9.2 + ts-interface-checker@0.1.13: {} - tslib@1.14.1: {} + ts-morph@27.0.2: + dependencies: + '@ts-morph/common': 0.28.1 + code-block-writer: 13.0.3 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 - tslib@2.3.1: {} + tslib@2.8.1: {} - tsup@6.3.0(@swc/core@1.10.4)(postcss@8.4.18)(typescript@4.6.2): + tsup@8.5.0(@swc/core@1.10.4(@swc/helpers@0.5.15))(jiti@2.5.1)(postcss@8.5.6)(typescript@5.9.2)(yaml@2.8.1): dependencies: - bundle-require: 3.1.0(esbuild@0.15.12) + bundle-require: 5.1.0(esbuild@0.25.8) cac: 6.7.14 - chokidar: 3.5.3 - debug: 4.3.4 - esbuild: 0.15.12 - execa: 5.1.1 - globby: 11.1.0 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.1 + esbuild: 0.25.8 + fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 - postcss-load-config: 3.1.4(postcss@8.4.18) + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@2.5.1)(postcss@8.5.6)(yaml@2.8.1) resolve-from: 5.0.0 - rollup: 2.79.1 + rollup: 4.46.2 source-map: 0.8.0-beta.0 - sucrase: 3.28.0 + sucrase: 3.35.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.10.4 - postcss: 8.4.18 - typescript: 4.6.2 + '@swc/core': 1.10.4(@swc/helpers@0.5.15) + postcss: 8.5.6 + typescript: 5.9.2 transitivePeerDependencies: + - jiti - supports-color - - ts-node + - tsx + - yaml - tsutils@3.21.0(typescript@4.6.2): - dependencies: - tslib: 1.14.1 - typescript: 4.6.2 + turbo-darwin-64@2.5.5: + optional: true + + turbo-darwin-arm64@2.5.5: + optional: true + + turbo-linux-64@2.5.5: + optional: true + + turbo-linux-arm64@2.5.5: + optional: true + + turbo-windows-64@2.5.5: + optional: true + + turbo-windows-arm64@2.5.5: + optional: true + + turbo@2.5.5: + optionalDependencies: + turbo-darwin-64: 2.5.5 + turbo-darwin-arm64: 2.5.5 + turbo-linux-64: 2.5.5 + turbo-linux-arm64: 2.5.5 + turbo-windows-64: 2.5.5 + turbo-windows-arm64: 2.5.5 type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} + type-fest@4.41.0: {} + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typescript-eslint@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.39.0(@typescript-eslint/parser@8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.39.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.39.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.32.0(jiti@2.5.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + typescript@5.9.2: {} + + ufo@1.6.1: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@7.10.0: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 - type-fest@0.20.2: {} + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 - type-fest@0.21.3: {} + universalify@0.1.2: {} - type-fest@1.4.0: {} + until-async@3.0.2: {} - typescript@4.6.2: {} + update-browserslist-db@1.1.3(browserslist@4.25.1): + dependencies: + browserslist: 4.25.1 + escalade: 3.2.0 + picocolors: 1.1.1 uri-js@4.4.1: dependencies: punycode: 2.1.1 + use-callback-ref@1.3.3(@types/react@19.1.9)(react@19.1.0): + dependencies: + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.9 + + use-sidecar@1.1.3(@types/react@19.1.9)(react@19.1.0): + dependencies: + detect-node-es: 1.1.0 + react: 19.1.0 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.9 + util-deprecate@1.0.2: {} - v8-to-istanbul@9.0.1: + vfile-message@4.0.3: dependencies: - '@jridgewell/trace-mapping': 0.3.17 - '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 - vite@3.2.2: + vfile@6.0.3: dependencies: - esbuild: 0.15.12 - postcss: 8.4.18 - resolve: 1.22.1 - rollup: 2.79.1 - optionalDependencies: - fsevents: 2.3.2 + '@types/unist': 3.0.3 + vfile-message: 4.0.3 - vitest@0.24.4: + vite-node@3.2.4(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.1): dependencies: - '@types/chai': 4.3.3 - '@types/chai-subset': 1.3.3 - '@types/node': 17.0.22 - chai: 4.3.6 - debug: 4.3.4 - local-pkg: 0.4.2 - strip-literal: 0.4.2 - tinybench: 2.3.1 - tinypool: 0.3.0 - tinyspy: 1.0.2 - vite: 3.2.2 + cac: 6.7.14 + debug: 4.4.1 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.0.6(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.1) transitivePeerDependencies: + - '@types/node' + - jiti - less + - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color - terser + - tsx + - yaml - wcwidth@1.0.1: + vite@7.0.6(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.1): dependencies: - defaults: 1.0.3 + esbuild: 0.25.11 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.46.2 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.2.0 + fsevents: 2.3.3 + jiti: 2.5.1 + lightningcss: 1.30.1 + yaml: 2.8.1 + + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(msw@2.11.5(@types/node@24.2.0)(typescript@5.9.2))(yaml@2.8.1): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(msw@2.11.5(@types/node@24.2.0)(typescript@5.9.2))(vite@7.0.6(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.1)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.2.1 + debug: 4.4.1 + expect-type: 1.2.2 + magic-string: 0.30.17 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 7.0.6(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 24.2.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml webidl-conversions@3.0.1: {} @@ -3178,11 +9814,63 @@ snapshots: tr46: 1.0.1 webidl-conversions: 4.0.2 + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@2.0.2: dependencies: isexe: 2.0.0 - word-wrap@1.2.3: {} + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + word-wrap@1.2.5: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 wrap-ansi@7.0.0: dependencies: @@ -3190,36 +9878,45 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrappy@1.0.2: {} + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 y18n@5.0.8: {} + yallist@3.1.1: {} + yallist@4.0.0: {} - yaml@1.10.2: {} + yallist@5.0.0: {} - yargs-parser@20.2.9: {} + yaml@2.8.1: + optional: true - yargs-parser@21.0.1: {} + yargs-parser@21.1.1: {} - yargs@16.2.0: + yargs@17.7.2: dependencies: - cliui: 7.0.4 - escalade: 3.1.1 + 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: 20.2.9 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} - yargs@17.4.0: + yoctocolors-cjs@2.1.3: {} + + zod-validation-error@3.5.3(zod@3.25.76): dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.0.1 + zod: 3.25.76 - yocto-queue@0.1.0: {} + zod@3.25.76: {} + + zod@4.1.12: {} + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..db4f8ad --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,17 @@ +packages: +- packages/* +- tooling/* +- apps/* + +catalog: + eslint: ^9.19.0 + prettier: ^3.4.2 + tailwindcss: ^4.1.11 + typescript: ^5.9.2 + +catalogs: + react19: + react: 19.1.0 + react-dom: 19.1.0 + '@types/react': ^19.1.2 + '@types/react-dom': ^19.1.2 diff --git a/scripts/postversion.mjs b/scripts/postversion.mjs deleted file mode 100644 index cce6d17..0000000 --- a/scripts/postversion.mjs +++ /dev/null @@ -1,25 +0,0 @@ -import { fileURLToPath } from 'url'; -import fs from 'fs'; -import path from 'path'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const packageJson = fs.readFileSync( - path.join(__dirname, '../package.json'), - 'utf8' -); -const version = JSON.parse(packageJson).version; - -const dist = path.join(__dirname, '../dist'); - -// replace {{VERSION_TO_REPLACE}} in dist/* with the current version -const files = fs.readdirSync(dist); -files.forEach((file) => { - const content = fs.readFileSync(path.join(dist, file), 'utf8'); - const newContent = content.replace('{{VERSION_TO_REPLACE}}', version); - fs.writeFileSync(path.join(dist, file), newContent); -}); - -// eslint-disable-next-line no-undef -console.log('✅ Version replaced in dist/*'); diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 409b7e0..0000000 --- a/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as quran } from './sdk'; -export * from './types'; diff --git a/src/sdk/index.ts b/src/sdk/index.ts deleted file mode 100644 index d420ee1..0000000 --- a/src/sdk/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -import v4 from './v4'; -import utils from './utils'; - -const quran = { - v4, - utils, -}; - -export default quran; diff --git a/src/sdk/utils.ts b/src/sdk/utils.ts deleted file mode 100644 index 0584018..0000000 --- a/src/sdk/utils.ts +++ /dev/null @@ -1,239 +0,0 @@ -import { - ChapterId, - HizbNumber, - JuzNumber, - PageNumber, - RubNumber, - VerseKey, -} from '../types'; - -// this maps chapterNumber to verseCount -export const versesMapping = { - '1': 7, - '2': 286, - '3': 200, - '4': 176, - '5': 120, - '6': 165, - '7': 206, - '8': 75, - '9': 129, - '10': 109, - '11': 123, - '12': 111, - '13': 43, - '14': 52, - '15': 99, - '16': 128, - '17': 111, - '18': 110, - '19': 98, - '20': 135, - '21': 112, - '22': 78, - '23': 118, - '24': 64, - '25': 77, - '26': 227, - '27': 93, - '28': 88, - '29': 69, - '30': 60, - '31': 34, - '32': 30, - '33': 73, - '34': 54, - '35': 45, - '36': 83, - '37': 182, - '38': 88, - '39': 75, - '40': 85, - '41': 54, - '42': 53, - '43': 89, - '44': 59, - '45': 37, - '46': 35, - '47': 38, - '48': 29, - '49': 18, - '50': 45, - '51': 60, - '52': 49, - '53': 62, - '54': 55, - '55': 78, - '56': 96, - '57': 29, - '58': 22, - '59': 24, - '60': 13, - '61': 14, - '62': 11, - '63': 11, - '64': 18, - '65': 12, - '66': 12, - '67': 30, - '68': 52, - '69': 52, - '70': 44, - '71': 28, - '72': 28, - '73': 20, - '74': 56, - '75': 40, - '76': 31, - '77': 50, - '78': 40, - '79': 46, - '80': 42, - '81': 29, - '82': 19, - '83': 36, - '84': 25, - '85': 22, - '86': 17, - '87': 19, - '88': 26, - '89': 30, - '90': 20, - '91': 15, - '92': 21, - '93': 11, - '94': 8, - '95': 8, - '96': 19, - '97': 5, - '98': 8, - '99': 8, - '100': 11, - '101': 11, - '102': 8, - '103': 3, - '104': 9, - '105': 5, - '106': 4, - '107': 7, - '108': 3, - '109': 6, - '110': 3, - '111': 5, - '112': 4, - '113': 5, - '114': 6, -}; - -/** - * Validates chapter id - * @param id chapter id - * @example - isValidChapterId('1') // true - isValidChapterId('114') // true - isValidChapterId('0') // false - isValidChapterId('-1') // false - isValidChapterId('200') // false - */ -const isValidChapterId = (id: string | number): id is ChapterId => { - const parsedId = typeof id === 'number' ? id : Number(id); - if (!parsedId || parsedId <= 0 || parsedId > 114) return false; - return true; -}; - -/** - * Validates juz number - * @param juz juz number - * @example - isValidJuz('1') // true - isValidJuz('30') // true - isValidJuz('0') // false - isValidJuz('-1') // false - isValidJuz('200') // false - */ -const isValidJuz = (juz: string | number): juz is JuzNumber => { - const parsedJuz = typeof juz === 'number' ? juz : Number(juz); - if (!parsedJuz || parsedJuz <= 0 || parsedJuz > 30) return false; - return true; -}; - -/** - * Validates rub number - * @param rub rub number - * @example - isValidRub('1') // true - isValidRub('240') // true - isValidRub('0') // false - isValidRub('-1') // false - isValidRub('300') // false - */ -const isValidRub = (rub: string | number): rub is RubNumber => { - const parsedRub = typeof rub === 'number' ? rub : Number(rub); - if (!parsedRub || parsedRub <= 0 || parsedRub > 240) return false; - return true; -}; - -/** - * Validates hizb number - * @param hizb hizb number - * @example - isValidHizb('1') // true - isValidHizb('60') // true - isValidHizb('0') // false - isValidHizb('-1') // false - isValidHizb('200') // false - */ -const isValidHizb = (hizb: string | number): hizb is HizbNumber => { - const parsedHizb = typeof hizb === 'number' ? hizb : Number(hizb); - if (!parsedHizb || parsedHizb <= 0 || parsedHizb > 60) return false; - return true; -}; - -/** - * Validates mushaf page number - * @param page mushaf page number - * @example - isValidQuranPage('1') // true - isValidQuranPage('604') // true - isValidQuranPage('0') // false - isValidQuranPage('-1') // false - isValidQuranPage('1000') // false - */ -const isValidQuranPage = (page: string | number): page is PageNumber => { - const parsedPage = typeof page === 'number' ? page : Number(page); - if (!parsedPage || parsedPage <= 0 || parsedPage > 604) return false; - return true; -}; - -/** - * Validates verse key - * @param key colon separated verse key (chapter:verse) - * @example - isValidVerseKey('1:1') // true - isValidVerseKey('30:1') // true - isValidVerseKey('0') // false - isValidVerseKey('1:-') // false - isValidVerseKey('1_1') // false - */ -const isValidVerseKey = (key: string): key is VerseKey => { - const [chapterId, verseId] = key.trim().split(':'); - if (!chapterId || !verseId || !isValidChapterId(chapterId)) return false; - - const parsedVerse = Number(verseId); - const verseCount = (versesMapping as Record)[chapterId]; - if (!parsedVerse || parsedVerse <= 0 || parsedVerse > verseCount) - return false; - - return true; -}; - -const utils = { - isValidChapterId, - isValidJuz, - isValidRub, - isValidHizb, - isValidQuranPage, - isValidVerseKey, -}; - -export default utils; diff --git a/src/sdk/v4/_fetcher.ts b/src/sdk/v4/_fetcher.ts deleted file mode 100644 index 0b643d4..0000000 --- a/src/sdk/v4/_fetcher.ts +++ /dev/null @@ -1,85 +0,0 @@ -import humps from 'humps'; -import { FetchFn } from '../../types'; -import { BaseApiOptions } from '../../types/BaseApiOptions'; -import { removeBeginningSlash } from '../../utils/misc'; - -export const API_BASE_URL = 'https://api.quran.com/api/v4/'; - -const { camelizeKeys, decamelize, decamelizeKeys } = humps; - -export const makeUrl = (url: string, params?: Record) => { - const baseUrl = `${API_BASE_URL}${removeBeginningSlash(url)}`; - if (!params) return baseUrl; - - const paramsWithDecamelizedKeys = decamelizeKeys(params) as Record< - string, - string - >; - const paramsString = new URLSearchParams( - Object.entries(paramsWithDecamelizedKeys).filter( - ([, value]) => value !== undefined - ) - ).toString(); - if (!paramsString) return baseUrl; - - return `${baseUrl}?${paramsString}`; -}; - -export const fetcher = async ( - url: string, - params: Record = {}, - fetchFn?: FetchFn -) => { - if (fetchFn) { - const json = await fetchFn(makeUrl(url, params)); - return camelizeKeys(json) as T; - } - - if (typeof globalThis.fetch !== 'function') { - throw new Error( - 'Looks like there is no global fetch function. Take a look at https://quranjs.com/techniques#custom-fetcher for more info.' - ); - } - - // if there is no fetchFn, we use the global fetch - const res = await globalThis.fetch(makeUrl(url, params)); - - if (!res.ok || res.status >= 400) { - throw new Error(`${res.status} ${res.statusText}`); - } - - const json = await res.json(); - - return camelizeKeys(json) as T; -}; - -type MergeApiOptionsObject = Pick & { - fields?: Record; -} & Record; - -export const mergeApiOptions = ( - options: MergeApiOptionsObject = {}, - defaultOptions: Record = {} -) => { - const clonedOptions = { ...options }; - - // we can set it to undefined because `makeUrl` will filter it out - if (clonedOptions.fetchFn) clonedOptions.fetchFn = undefined; - - const final: Record = { - ...defaultOptions, - ...clonedOptions, - }; - - if (final.fields) { - const fields: string[] = []; - Object.entries(final.fields).forEach(([key, value]) => { - if (value) fields.push(decamelize(key)); - }); - - // convert `fields` to a string sperated by commas - final.fields = fields.join(','); - } - - return final; -}; diff --git a/src/sdk/v4/audio.ts b/src/sdk/v4/audio.ts deleted file mode 100644 index 1cc6234..0000000 --- a/src/sdk/v4/audio.ts +++ /dev/null @@ -1,246 +0,0 @@ -import { - ChapterRecitation, - VerseRecitation, - ChapterId, - HizbNumber, - JuzNumber, - Language, - PageNumber, - Pagination, - RubNumber, - VerseKey, - VerseRecitationField, -} from '../../types'; -import Utils from '../utils'; -import { fetcher, mergeApiOptions } from './_fetcher'; -import { BaseApiOptions } from '../../types/BaseApiOptions'; - -type GetChapterRecitationOptions = Partial; - -const defaultChapterRecitationsOptions: GetChapterRecitationOptions = { - language: Language.ARABIC, -}; - -type GetVerseRecitationOptions = Partial< - BaseApiOptions & { - fields: Partial>; - } ->; - -const defaultVerseRecitationsOptions: GetVerseRecitationOptions = { - language: Language.ARABIC, -}; - -/** - * Get all chapter recitations for specific reciter - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-reciter-audio-files - * @param {string} reciterId - * @param {GetChapterRecitationOptions} options - * @example - * quran.v4.audio.findAllChapterRecitations('2') - */ -const findAllChapterRecitations = async ( - reciterId: string, - options?: GetChapterRecitationOptions -) => { - const params = mergeApiOptions(options, defaultChapterRecitationsOptions); - const { audioFiles } = await fetcher<{ audioFiles: ChapterRecitation[] }>( - `/chapter_recitations/${reciterId}`, - params, - options?.fetchFn - ); - return audioFiles; -}; - -/** - * Get chapter recitation for specific reciter and a specific chapter - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-reciter-audio-file - * @param {ChapterId} chapterId - * @param {string} reciterId - * @param {GetChapterRecitationOptions} options - * @example - * quran.v4.audio.findChapterRecitationById('1', '2') // first chapter recitation for reciter 2 - */ -const findChapterRecitationById = async ( - chapterId: ChapterId, - reciterId: string, - options?: GetChapterRecitationOptions -) => { - if (!Utils.isValidChapterId(chapterId)) throw new Error('Invalid chapter id'); - - const params = mergeApiOptions(options, defaultChapterRecitationsOptions); - const { audioFile } = await fetcher<{ audioFile: ChapterRecitation }>( - `/chapter_recitations/${reciterId}/${chapterId}`, - params, - options?.fetchFn - ); - - return audioFile; -}; - -/** - * Get all verse audio files for a specific reciter and a specific chapter - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-surah-recitation - * @param {ChapterId} chapterId - * @param {string} recitationId - * @param {GetVerseRecitationOptions} options - * @example - * quran.v4.audio.findVerseRecitationsByChapter('1', '2') - */ -const findVerseRecitationsByChapter = async ( - chapterId: ChapterId, - recitationId: string, - options?: GetVerseRecitationOptions -) => { - if (!Utils.isValidChapterId(chapterId)) throw new Error('Invalid chapter id'); - - const params = mergeApiOptions(options, defaultVerseRecitationsOptions); - const data = await fetcher<{ - audioFiles: VerseRecitation[]; - pagination: Pagination; - }>( - `/recitations/${recitationId}/by_chapter/${chapterId}`, - params, - options?.fetchFn - ); - - return data; -}; - -/** - * Get all verse audio files for a specific reciter and a specific juz - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-juz-recitaiton - * @param {JuzNumber} juz - * @param {string} recitationId - * @param {GetRecitationsOptions} options - * @example - * quran.v4.audio.findVerseRecitationsByJuz('1', '2') - */ -const findVerseRecitationsByJuz = async ( - juz: JuzNumber, - recitationId: string, - options?: GetVerseRecitationOptions -) => { - if (!Utils.isValidJuz(juz)) throw new Error('Invalid juz'); - - const params = mergeApiOptions(options, defaultVerseRecitationsOptions); - const data = await fetcher<{ - audioFiles: VerseRecitation[]; - pagination: Pagination; - }>(`/recitations/${recitationId}/by_juz/${juz}`, params, options?.fetchFn); - - return data; -}; - -/** - * Get all verse audio files for a specific reciter and a specific mushaf page - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-page-recitaiton - * @param {PageNumber} page - * @param {string} recitationId - * @param {GetVerseRecitationOptions} options - * @example - * quran.v4.audio.findVerseRecitationsByPage('1', '2') - */ -const findVerseRecitationsByPage = async ( - page: PageNumber, - recitationId: string, - options?: GetVerseRecitationOptions -) => { - if (!Utils.isValidQuranPage(page)) throw new Error('Invalid page'); - - const params = mergeApiOptions(options, defaultVerseRecitationsOptions); - const data = await fetcher<{ - audioFiles: VerseRecitation[]; - pagination: Pagination; - }>(`/recitations/${recitationId}/by_page/${page}`, params, options?.fetchFn); - - return data; -}; - -/** - * Get all verse audio files for a specific reciter and a specific rub - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-rub-el-hizb-recitaiton - * @param {RubNumber} rub - * @param {string} recitationId - * @param {GetVerseRecitationOptions} options - * @example - * quran.v4.audio.findVerseRecitationsByRub('1', '2') - */ -const findVerseRecitationsByRub = async ( - rub: RubNumber, - recitationId: string, - options?: GetVerseRecitationOptions -) => { - if (!Utils.isValidRub(rub)) throw new Error('Invalid rub'); - - const params = mergeApiOptions(options, defaultVerseRecitationsOptions); - const data = await fetcher<{ - audioFiles: VerseRecitation[]; - pagination: Pagination; - }>(`/recitations/${recitationId}/by_rub/${rub}`, params, options?.fetchFn); - - return data; -}; - -/** - * Get all verse audio files for a specific reciter and a specific hizb - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-hizb-recitaiton - * @param {HizbNumber} hizb - * @param {string} recitationId - * @param {GetVerseRecitationOptions} options - * @example - * quran.v4.audio.findVerseRecitationsByHizb('1', '2') - */ -const findVerseRecitationsByHizb = async ( - hizb: HizbNumber, - recitationId: string, - options?: GetVerseRecitationOptions -) => { - if (!Utils.isValidHizb(hizb)) throw new Error('Invalid hizb'); - - const params = mergeApiOptions(options, defaultVerseRecitationsOptions); - const data = await fetcher<{ - audioFiles: VerseRecitation[]; - pagination: Pagination; - }>(`/recitations/${recitationId}/by_hizb/${hizb}`, params, options?.fetchFn); - - return data; -}; - -/** - * Get all verse audio files for a specific reciter and a specific verse - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-ayah-recitaiton - * @param {VerseKey} key - * @param {string} recitationId - * @param {GetVerseRecitationOptions} options - * @example - * quran.v4.audio.findVerseRecitationsByKey('1:1', '2') - */ -const findVerseRecitationsByKey = async ( - key: VerseKey, - recitationId: string, - options?: GetVerseRecitationOptions -) => { - if (!Utils.isValidVerseKey(key)) throw new Error('Invalid verse key'); - - const params = mergeApiOptions(options, defaultVerseRecitationsOptions); - const data = await fetcher<{ - audioFiles: VerseRecitation[]; - pagination: Pagination; - }>(`/recitations/${recitationId}/by_ayah/${key}`, params, options?.fetchFn); - - return data; -}; - -const audio = { - findAllChapterRecitations, - findChapterRecitationById, - findVerseRecitationsByChapter, - findVerseRecitationsByJuz, - findVerseRecitationsByPage, - findVerseRecitationsByRub, - findVerseRecitationsByHizb, - findVerseRecitationsByKey, -}; - -export default audio; diff --git a/src/sdk/v4/chapters.ts b/src/sdk/v4/chapters.ts deleted file mode 100644 index 2ba3907..0000000 --- a/src/sdk/v4/chapters.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { Chapter, ChapterId, ChapterInfo, Language } from '../../types'; -import { fetcher, mergeApiOptions } from './_fetcher'; -import Utils from '../utils'; -import { BaseApiOptions } from '../../types/BaseApiOptions'; - -type GetChapterOptions = Partial; - -const defaultOptions: GetChapterOptions = { - language: Language.ARABIC, -}; - -/** - * Get all chapters. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-chapters - * @param {GetChapterOptions} options - * @example - * quran.v4.chapters.findAll() - */ -const findAll = async (options?: GetChapterOptions) => { - const params = mergeApiOptions(options, defaultOptions); - const { chapters } = await fetcher<{ chapters: Chapter[] }>( - '/chapters', - params, - options?.fetchFn - ); - - return chapters; -}; - -/** - * Get chapter by id. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/get-chapter - * @param {ChapterId} id chapter id, minimum 1, maximum 114 - * @param {GetChapterOptions} options - * @example - * quran.v4.chapters.findById('1') - * quran.v4.chapters.findById('114') - */ -const findById = async (id: ChapterId, options?: GetChapterOptions) => { - if (!Utils.isValidChapterId(id)) throw new Error('Invalid chapter id'); - - const params = mergeApiOptions(options, defaultOptions); - const { chapter } = await fetcher<{ chapter: Chapter }>( - `/chapters/${id}`, - params, - options?.fetchFn - ); - - return chapter; -}; - -/** - * Get chapter info by id. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/info - * @param {ChapterId} id chapter id, minimum 1, maximum 114 - * @param {GetChapterOptions} options - * @example - * quran.v4.chapters.findInfoById('1') - * quran.v4.chapters.findInfoById('114') - */ -const findInfoById = async (id: ChapterId, options?: GetChapterOptions) => { - if (!Utils.isValidChapterId(id)) throw new Error('Invalid chapter id'); - - const params = mergeApiOptions(options, defaultOptions); - const { chapterInfo } = await fetcher<{ chapterInfo: ChapterInfo }>( - `/chapters/${id}/info`, - params, - options?.fetchFn - ); - - return chapterInfo; -}; - -const chapters = { - findAll, - findById, - findInfoById, -}; - -export default chapters; diff --git a/src/sdk/v4/index.ts b/src/sdk/v4/index.ts deleted file mode 100644 index 492bc61..0000000 --- a/src/sdk/v4/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import chapters from './chapters'; -import verses from './verses'; -import juzs from './juzs'; -import audio from './audio'; -import resources from './resources'; -import search from './search'; - -const v4 = { - chapters, - verses, - juzs, - audio, - resources, - search, -}; - -export default v4; diff --git a/src/sdk/v4/juzs.ts b/src/sdk/v4/juzs.ts deleted file mode 100644 index fb41b38..0000000 --- a/src/sdk/v4/juzs.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Juz } from '../../types'; -import { BaseApiOptions } from '../../types/BaseApiOptions'; -import { fetcher } from './_fetcher'; - -/** - * Get All Juzs - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/juzs - * @example - * quran.v4.juzs.findAll() - */ -const findAll = async (options?: Omit) => { - const { juzs } = await fetcher<{ juzs: Juz[] }>( - '/juzs', - undefined, - options?.fetchFn - ); - return juzs; -}; - -const juzs = { findAll }; - -export default juzs; diff --git a/src/sdk/v4/resources.ts b/src/sdk/v4/resources.ts deleted file mode 100644 index 52c7db0..0000000 --- a/src/sdk/v4/resources.ts +++ /dev/null @@ -1,220 +0,0 @@ -import { - ChapterInfoResource, - ChapterReciterResource, - Language, - LanguageResource, - RecitationInfoResource, - RecitationResource, - RecitationStylesResource, - TafsirInfoResource, - TafsirResource, - TranslationInfoResource, - TranslationResource, - VerseMediaResource, -} from '../../types'; -import { BaseApiOptions } from '../../types/BaseApiOptions'; -import { fetcher, mergeApiOptions } from './_fetcher'; - -type GetResourceOptions = Partial; - -const defaultOptions: GetResourceOptions = { - language: Language.ARABIC, -}; - -/** - * Get all recitations. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/recitations - * @param {GetResourceOptions} options - * @example - * quran.v4.resources.findAllRecitations() - */ -const findAllRecitations = async (options?: GetResourceOptions) => { - const params = mergeApiOptions(options); - const { recitations } = await fetcher<{ - recitations: RecitationResource[]; - }>('/resources/recitations', params, options?.fetchFn); - - return recitations; -}; - -/** - * Get all recitation info. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/recitation-info - * @param {string} id recitation id - * @param {GetResourceOptions} options - * @example - * quran.v4.resources.findRecitationInfo('1') - */ -const findRecitationInfo = async (id: string, options?: GetResourceOptions) => { - const params = mergeApiOptions(options, defaultOptions); - const { info } = await fetcher<{ - info: RecitationInfoResource; - }>(`/resources/recitations/${id}/info`, params, options?.fetchFn); - - return info; -}; - -/** - * Get all translations. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/translations - * @param {GetResourceOptions} options - * @example - * quran.v4.resources.findAllTranslations() - */ -const findAllTranslations = async (options?: GetResourceOptions) => { - const params = mergeApiOptions(options, defaultOptions); - const { translations } = await fetcher<{ - translations: TranslationResource[]; - }>('/resources/translations', params, options?.fetchFn); - - return translations; -}; - -/** - * Get translation info. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/translation-info - * @param {string} id translation id - * @param {GetResourceOptions} options - * @example - * quran.v4.resources.findTranslationInfo('169') - */ -const findTranslationInfo = async ( - id: string, - options?: GetResourceOptions -) => { - const params = mergeApiOptions(options, defaultOptions); - const { info } = await fetcher<{ - info: TranslationInfoResource; - }>(`/resources/translations/${id}/info`, params, options?.fetchFn); - - return info; -}; - -/** - * Get all tafsirs. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/tafsirs - * @param {GetResourceOptions} options - * @example - * quran.v4.resources.findAllTafsirs() - */ -const findAllTafsirs = async (options?: GetResourceOptions) => { - const params = mergeApiOptions(options, defaultOptions); - const { tafsirs } = await fetcher<{ - tafsirs: TafsirResource[]; - }>('/resources/tafsirs', params, options?.fetchFn); - - return tafsirs; -}; - -/** - * Get tafsir info. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/tafsir-info - * @param {string} id tafsir id - * @param {GetResourceOptions} options - * @example - * quran.v4.resources.findTafsirInfo('1') - */ -const findTafsirInfo = async (id: string, options?: GetResourceOptions) => { - const params = mergeApiOptions(options, defaultOptions); - const { info } = await fetcher<{ - info: TafsirInfoResource; - }>(`/resources/tafsirs/${id}/info`, params, options?.fetchFn); - - return info; -}; - -/** - * Get all recitation styles. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/recitation-styles - * @example - * quran.v4.resources.findAllRecitationStyles() - */ -const findAllRecitationStyles = async ( - options?: Omit -) => { - const { recitationStyles } = await fetcher<{ - recitationStyles: RecitationStylesResource; - }>('/resources/recitation_styles', undefined, options?.fetchFn); - - return recitationStyles; -}; - -/** - * Get all languages. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/languages - * @param {GetResourceOptions} options - * @example - * quran.v4.resources.findAllLanguages() - */ -const findAllLanguages = async (options?: GetResourceOptions) => { - const params = mergeApiOptions(options, defaultOptions); - const { languages } = await fetcher<{ - languages: LanguageResource[]; - }>('/resources/languages', params, options?.fetchFn); - - return languages; -}; - -/** - * Get all chapter infos. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-info - * @param {GetResourceOptions} options - * @example - * quran.v4.resources.findAllChapterInfos() - */ -const findAllChapterInfos = async (options?: GetResourceOptions) => { - const params = mergeApiOptions(options, defaultOptions); - const { chapterInfos } = await fetcher<{ - chapterInfos: ChapterInfoResource[]; - }>('/resources/chapter_infos', params, options?.fetchFn); - - return chapterInfos; -}; - -/** - * Get verse media. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verse-media - * @param {GetResourceOptions} options - * @example - * quran.v4.resources.findVerseMedia() - */ -const findVerseMedia = async (options?: GetResourceOptions) => { - const params = mergeApiOptions(options, defaultOptions); - const { verseMedia } = await fetcher<{ - verseMedia: VerseMediaResource; - }>(`/resources/verse_media`, params, options?.fetchFn); - - return verseMedia; -}; - -/** - * Get all chapter reciters. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/chapter-reciters - * @param {GetResourceOptions} options - * @example - * quran.v4.resources.findAllChapterReciters() - */ -const findAllChapterReciters = async (options?: GetResourceOptions) => { - const params = mergeApiOptions(options, defaultOptions); - const { reciters } = await fetcher<{ - reciters: ChapterReciterResource[]; - }>(`/resources/chapter_reciters`, params, options?.fetchFn); - - return reciters; -}; - -const resources = { - findAllRecitations, - findAllTranslations, - findAllTafsirs, - findAllRecitationStyles, - findAllLanguages, - findVerseMedia, - findAllChapterReciters, - findAllChapterInfos, - findRecitationInfo, - findTranslationInfo, - findTafsirInfo, -}; - -export default resources; diff --git a/src/sdk/v4/search.ts b/src/sdk/v4/search.ts deleted file mode 100644 index c15ef18..0000000 --- a/src/sdk/v4/search.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Language, SearchResponse } from '../../types'; -import { BaseApiOptions } from '../../types/BaseApiOptions'; -import { fetcher, mergeApiOptions } from './_fetcher'; - -type SearchOptions = Partial< - BaseApiOptions & { - size: number; - page: number; - } ->; - -const defaultSearchOptions: SearchOptions = { - language: Language.ARABIC, - size: 30, -}; - -/** - * Search - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/search - * @param {string} q search query - * @param {SearchOptions} options - * @example - * quran.v4.search.search('نور') - * quran.v4.search.search('نور', { language: Language.ENGLISH }) - * quran.v4.search.search('نور', { language: Language.ENGLISH, size: 10 }) - * quran.v4.search.search('نور', { language: Language.ENGLISH, page: 2 }) - */ -const search = async (q: string, options?: SearchOptions) => { - const params = mergeApiOptions({ q, ...options }, defaultSearchOptions); - const { search } = await fetcher( - '/search', - params, - options?.fetchFn - ); - - return search; -}; - -const searchApi = { search }; - -export default searchApi; diff --git a/src/sdk/v4/verses.ts b/src/sdk/v4/verses.ts deleted file mode 100644 index 5afbfc8..0000000 --- a/src/sdk/v4/verses.ts +++ /dev/null @@ -1,238 +0,0 @@ -import { - ChapterId, - HizbNumber, - JuzNumber, - Language, - PageNumber, - RubNumber, - TranslationField, - Verse, - VerseField, - VerseKey, - WordField, -} from '../../types'; -import humps from 'humps'; -import Utils from '../utils'; -import { fetcher, mergeApiOptions } from './_fetcher'; -import { BaseApiOptions } from '../../types/BaseApiOptions'; - -const { decamelize } = humps; - -type GetVerseOptions = Partial< - BaseApiOptions & { - reciter: string | number; - words: boolean; - translations: string[] | number[]; - tafsirs: string[] | number[]; - wordFields: Partial>; - translationFields: Partial>; - fields: Partial>; - page: number; - perPage: number; - } ->; - -const defaultOptions: GetVerseOptions = { - language: Language.ARABIC, - perPage: 50, - words: false, -}; - -const mergeVerseOptions = (options: GetVerseOptions = {}) => { - const result = mergeApiOptions(options, defaultOptions); - - // @ts-expect-error - we accept an array of strings, however, the API expects a comma separated string - if (result.translations) result.translations = result.translations.join(','); - - // @ts-expect-error - we accept an array of strings, however, the API expects a comma separated string - if (result.tafsirs) result.tafsirs = result.tafsirs.join(','); - - if (result.wordFields) { - const wordFields: string[] = []; - Object.entries(result.wordFields).forEach(([key, value]) => { - if (value) wordFields.push(decamelize(key)); - }); - result.wordFields = wordFields.join(','); - } - - if (result.translationFields) { - const translationFields: string[] = []; - Object.entries(result.translationFields).forEach(([key, value]) => { - if (value) translationFields.push(decamelize(key)); - }); - result.translationFields = translationFields.join(','); - } - - // rename `reciter` to `audio` because the API expects `audio` - if (result.reciter) { - result.audio = result.reciter; - result.reciter = undefined; - } - - return result; -}; - -/** - * Get a specific ayah with key. Key is combination of surah number and ayah number. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-verse-key - * @param {VerseKey} key - surah number and ayah number separated by a colon. - * @param {GetVerseOptions} options - * @example - * quran.v4.verses.findByKey('1:1') - * quran.v4.verses.findByKey('101:5') - */ -const findByKey = async (key: VerseKey, options?: GetVerseOptions) => { - if (!Utils.isValidVerseKey(key)) throw new Error('Invalid verse key'); - const params = mergeVerseOptions(options); - const url = `/verses/by_key/${key}`; - const { verse } = await fetcher<{ verse: Verse }>( - url, - params, - options?.fetchFn - ); - - return verse; -}; - -/** - * Get all ayahs for a specific chapter (surah). - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-chapter-number - * @param {ChapterId} id - chapter id (surah number) - * @param {GetVerseOptions} options - * @example - * quran.v4.verses.findByChapter('1') - * quran.v4.verses.findByChapter('101') - */ -const findByChapter = async (id: ChapterId, options?: GetVerseOptions) => { - if (!Utils.isValidChapterId(id)) throw new Error('Invalid chapter id'); - const params = mergeVerseOptions(options); - const url = `/verses/by_chapter/${id}`; - const { verses } = await fetcher<{ verses: Verse[] }>( - url, - params, - options?.fetchFn - ); - - return verses; -}; - -/** - * Get all ayahs for a specific page in the Quran. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-page-number - * @param {PageNumber} page - Quran page number - * @param {GetVerseOptions} options - * @example - * quran.v4.verses.findByPage('1') - * quran.v4.verses.findByPage('101') - */ -const findByPage = async (page: PageNumber, options?: GetVerseOptions) => { - if (!Utils.isValidQuranPage(page)) throw new Error('Invalid page'); - - const params = mergeVerseOptions(options); - const url = `/verses/by_page/${page}`; - const { verses } = await fetcher<{ verses: Verse[] }>( - url, - params, - options?.fetchFn - ); - - return verses; -}; - -/** - * Get all ayahs for a Juz. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-juz-number - * @param {JuzNumber} juz - juz number - * @param {GetVerseOptions} options - * @example - * quran.v4.verses.findByJuz('1') - * quran.v4.verses.findByJuz('29') - */ -const findByJuz = async (juz: JuzNumber, options?: GetVerseOptions) => { - if (!Utils.isValidJuz(juz)) throw new Error('Invalid juz'); - - const params = mergeVerseOptions(options); - const url = `/verses/by_juz/${juz}`; - const { verses } = await fetcher<{ verses: Verse[] }>( - url, - params, - options?.fetchFn - ); - - return verses; -}; - -/** - * Get all ayahs for a Hizb. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-hizb-number - * @param {HizbNumber} hizb - hizb number - * @param {GetVerseOptions} options - * @example - * quran.v4.verses.findByHizb('1') - * quran.v4.verses.findByHizb('29') - */ -const findByHizb = async (hizb: HizbNumber, options?: GetVerseOptions) => { - if (!Utils.isValidHizb(hizb)) throw new Error('Invalid hizb'); - - const params = mergeVerseOptions(options); - const url = `/verses/by_hizb/${hizb}`; - const { verses } = await fetcher<{ verses: Verse[] }>( - url, - params, - options?.fetchFn - ); - - return verses; -}; - -/** - * Get all ayahs for a Rub. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/verses-by-rub-el-hizb-number - * @param {RubNumber} rub - rub number - * @param {GetVerseOptions} options - * @example - * quran.v4.verses.findByRub('1') - * quran.v4.verses.findByRub('29') - */ -const findByRub = async (rub: RubNumber, options?: GetVerseOptions) => { - if (!Utils.isValidRub(rub)) throw new Error('Invalid rub'); - - const params = mergeVerseOptions(options); - const { verses } = await fetcher<{ verses: Verse[] }>( - `/verses/by_rub/${rub}`, - params, - options?.fetchFn - ); - - return verses; -}; - -/** - * Get a random ayah. - * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/random-verse - * @param {GetVerseOptions} options - * @example - * quran.v4.verses.findRandom() - */ -const findRandom = async (options?: GetVerseOptions) => { - const params = mergeVerseOptions(options); - const { verse } = await fetcher<{ verse: Verse }>( - '/verses/random', - params, - options?.fetchFn - ); - - return verse; -}; - -const verses = { - findByKey, - findByChapter, - findByPage, - findByJuz, - findByHizb, - findByRub, - findRandom, -}; - -export default verses; diff --git a/src/types/BaseApiOptions.ts b/src/types/BaseApiOptions.ts deleted file mode 100644 index 0d7ff7a..0000000 --- a/src/types/BaseApiOptions.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { FetchFn, Language } from '.'; - -export interface BaseApiOptions { - language: Language; - fetchFn?: FetchFn; -} diff --git a/src/types/ChapterId.ts b/src/types/ChapterId.ts deleted file mode 100644 index 58aa526..0000000 --- a/src/types/ChapterId.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { NumberRange, NumberUnionToString } from './utils'; - -type _ChapterId = NumberRange<1, 115>; -export type ChapterId = _ChapterId | NumberUnionToString<_ChapterId>; diff --git a/src/types/FetchFn.ts b/src/types/FetchFn.ts deleted file mode 100644 index d1ab6c8..0000000 --- a/src/types/FetchFn.ts +++ /dev/null @@ -1 +0,0 @@ -export type FetchFn = (url: string) => Promise>; diff --git a/src/types/VerseKey.ts b/src/types/VerseKey.ts deleted file mode 100644 index 1ceec40..0000000 --- a/src/types/VerseKey.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { NumberRange } from './utils'; - -export type VerseKey = - | `1:${NumberRange<1, 8>}` - | `2:${NumberRange<1, 287>}` - | `3:${NumberRange<1, 201>}` - | `4:${NumberRange<1, 177>}` - | `5:${NumberRange<1, 121>}` - | `6:${NumberRange<1, 166>}` - | `7:${NumberRange<1, 207>}` - | `8:${NumberRange<1, 76>}` - | `9:${NumberRange<1, 130>}` - | `10:${NumberRange<1, 110>}` - | `11:${NumberRange<1, 124>}` - | `12:${NumberRange<1, 112>}` - | `13:${NumberRange<1, 44>}` - | `14:${NumberRange<1, 53>}` - | `15:${NumberRange<1, 100>}` - | `16:${NumberRange<1, 129>}` - | `17:${NumberRange<1, 112>}` - | `18:${NumberRange<1, 111>}` - | `19:${NumberRange<1, 99>}` - | `20:${NumberRange<1, 136>}` - | `21:${NumberRange<1, 113>}` - | `22:${NumberRange<1, 79>}` - | `23:${NumberRange<1, 119>}` - | `24:${NumberRange<1, 65>}` - | `25:${NumberRange<1, 78>}` - | `26:${NumberRange<1, 228>}` - | `27:${NumberRange<1, 94>}` - | `28:${NumberRange<1, 89>}` - | `29:${NumberRange<1, 70>}` - | `30:${NumberRange<1, 61>}` - | `31:${NumberRange<1, 35>}` - | `32:${NumberRange<1, 31>}` - | `33:${NumberRange<1, 74>}` - | `34:${NumberRange<1, 55>}` - | `35:${NumberRange<1, 46>}` - | `36:${NumberRange<1, 84>}` - | `37:${NumberRange<1, 183>}` - | `38:${NumberRange<1, 89>}` - | `39:${NumberRange<1, 76>}` - | `40:${NumberRange<1, 86>}` - | `41:${NumberRange<1, 55>}` - | `42:${NumberRange<1, 54>}` - | `43:${NumberRange<1, 90>}` - | `44:${NumberRange<1, 60>}` - | `45:${NumberRange<1, 38>}` - | `46:${NumberRange<1, 36>}` - | `47:${NumberRange<1, 39>}` - | `48:${NumberRange<1, 30>}` - | `49:${NumberRange<1, 19>}` - | `50:${NumberRange<1, 46>}` - | `51:${NumberRange<1, 61>}` - | `52:${NumberRange<1, 50>}` - | `53:${NumberRange<1, 63>}` - | `54:${NumberRange<1, 56>}` - | `55:${NumberRange<1, 79>}` - | `56:${NumberRange<1, 97>}` - | `57:${NumberRange<1, 30>}` - | `58:${NumberRange<1, 23>}` - | `59:${NumberRange<1, 25>}` - | `60:${NumberRange<1, 14>}` - | `61:${NumberRange<1, 15>}` - | `62:${NumberRange<1, 12>}` - | `63:${NumberRange<1, 12>}` - | `64:${NumberRange<1, 19>}` - | `65:${NumberRange<1, 13>}` - | `66:${NumberRange<1, 13>}` - | `67:${NumberRange<1, 31>}` - | `68:${NumberRange<1, 53>}` - | `69:${NumberRange<1, 53>}` - | `70:${NumberRange<1, 45>}` - | `71:${NumberRange<1, 29>}` - | `72:${NumberRange<1, 29>}` - | `73:${NumberRange<1, 21>}` - | `74:${NumberRange<1, 57>}` - | `75:${NumberRange<1, 41>}` - | `76:${NumberRange<1, 32>}` - | `77:${NumberRange<1, 51>}` - | `78:${NumberRange<1, 41>}` - | `79:${NumberRange<1, 47>}` - | `80:${NumberRange<1, 43>}` - | `81:${NumberRange<1, 30>}` - | `82:${NumberRange<1, 20>}` - | `83:${NumberRange<1, 37>}` - | `84:${NumberRange<1, 26>}` - | `85:${NumberRange<1, 23>}` - | `86:${NumberRange<1, 18>}` - | `87:${NumberRange<1, 20>}` - | `88:${NumberRange<1, 27>}` - | `89:${NumberRange<1, 31>}` - | `90:${NumberRange<1, 21>}` - | `91:${NumberRange<1, 16>}` - | `92:${NumberRange<1, 22>}` - | `93:${NumberRange<1, 12>}` - | `94:${NumberRange<1, 9>}` - | `95:${NumberRange<1, 9>}` - | `96:${NumberRange<1, 20>}` - | `97:${NumberRange<1, 6>}` - | `98:${NumberRange<1, 9>}` - | `99:${NumberRange<1, 9>}` - | `100:${NumberRange<1, 12>}` - | `101:${NumberRange<1, 12>}` - | `102:${NumberRange<1, 9>}` - | `103:${NumberRange<1, 4>}` - | `104:${NumberRange<1, 10>}` - | `105:${NumberRange<1, 6>}` - | `106:${NumberRange<1, 5>}` - | `107:${NumberRange<1, 8>}` - | `108:${NumberRange<1, 4>}` - | `109:${NumberRange<1, 7>}` - | `110:${NumberRange<1, 4>}` - | `111:${NumberRange<1, 6>}` - | `112:${NumberRange<1, 5>}` - | `113:${NumberRange<1, 6>}` - | `114:${NumberRange<1, 7>}`; diff --git a/src/types/index.ts b/src/types/index.ts deleted file mode 100644 index c8ad982..0000000 --- a/src/types/index.ts +++ /dev/null @@ -1,137 +0,0 @@ -export enum Language { - ARABIC = 'ar', - ENGLISH = 'en', - URDU = 'ur', - BENGALI = 'bn', - TURKISH = 'tr', - SPANISH = 'es', - GERMAN = 'de', - BOSNIAN = 'bs', - RUSSIAN = 'ru', - ALBANIAN_AL = 'al', - FRENCH = 'fr', - DUTCH = 'nl', - TAMIL = 'ta', - TAJIK = 'tg', - INDONESIAN = 'id', - UZBEK = 'uz', - VIETNAMESE = 'vi', - CHINESE = 'zh', - ITALIAN = 'it', - JAPANESE = 'ja', - MALAYALAM = 'ml', - AMHARIC = 'am', - KAZAKH = 'kk', - PORTUGUESE = 'pt', - TAGALOG = 'tl', - THAI = 'th', - KOREAN = 'ko', - HINDI = 'hi', - KURDISH = 'ku', - HAUSA = 'ha', - AZERI = 'az', - SWAHILI = 'sw', - PERSIAN = 'fa', - SERBIAN = 'sr', - MARANAO = 'mrn', - AMAZIGH = 'zgh', - ASSAMESE = 'as', - BULGARIAN = 'bg', - CHECHEN = 'ce', - CZECH = 'cs', - - DIVEHI = 'dv', - DHIVEHI = 'dv', - MALDIVIAN = 'dv', - - FINNISH = 'fi', - GUJAARATI = 'gu', - HEBREW = 'he', - GEORGIAN = 'ka', - CENTRAL_KHMER = 'km', - GANDA = 'lg', - MARATHI = 'mr', - YORUBA = 'yo', - MALAY = 'ms', - NEPALI = 'ne', - SWEDISH = 'sv', - TELUGU = 'te', - TATAR = 'tt', - - UIGHUR = 'ug', - UYGHUR = 'ug', - - UKRAINIAN = 'uk', - NORWEGIAN = 'no', - OROMO = 'om', - POLISH = 'pl', - PASHTO = 'ps', - ROMANIAN = 'ro', - SINDHI = 'sd', - NORTHERN_SAMI = 'se', - - SINHALA = 'si', - SINHALESE = 'si', - - SOMALI = 'so', - ALBANIAN_SQ = 'sq', -} - -export enum QuranFont { - MadaniV1 = 'code_v1', - MadaniV2 = 'code_v2', - Uthmani = 'text_uthmani', -} - -export type VerseField = - | 'chapterId' - | 'textUthmani' - | 'textUthmaniSimple' - | 'textImlaei' - | 'textImlaeiSimple' - | 'textIndopak' - | 'textIndopakNastaleeq' - | 'textUthmaniTajweed' - | 'imageUrl' - | 'imageWidth' - | 'codeV1' - | 'codeV2' - | 'v1Page' - | 'v2Page'; - -export type WordField = - | 'v1Page' - | 'v2Page' - | 'textUthmani' - | 'textImlaei' - | 'textIndopak' - | 'verseKey' - | 'location' - | 'codeV1' - | 'codeV2'; - -export type TranslationField = - | 'resourceName' - | 'verseId' - | 'languageId' - | 'languageName' - | 'verseKey' - | 'chapterId' - | 'verseNumber' - | 'juzNumber' - | 'hizbNumber' - | 'rubNumber' - | 'pageNumber'; - -export type VerseRecitationField = 'id' | 'chapterId' | 'segments' | 'format'; - -export * from './VerseKey'; -export * from './ChapterId'; -export * from './HizbNumber'; -export * from './JuzNumber'; -export * from './PageNumber'; -export * from './RubNumber'; - -export * from './api'; - -export * from './FetchFn'; diff --git a/src/types/utils.ts b/src/types/utils.ts deleted file mode 100644 index 1cf0528..0000000 --- a/src/types/utils.ts +++ /dev/null @@ -1,24 +0,0 @@ -type _NumbersFrom0ToN = Nr extends Nr - ? number extends Nr - ? number - : Nr extends 0 - ? never - : _NumbersFrom0ToNRec - : never; - -type _NumbersFrom0ToNRec< - Nr extends number, - Counter extends any[], - Accumulator extends number -> = Counter['length'] extends Nr - ? Accumulator - : _NumbersFrom0ToNRec; - -export type NumberRange = Exclude< - _NumbersFrom0ToN, - _NumbersFrom0ToN ->; - -export type NumberUnionToString = TType extends number - ? `${TType}` - : TType; diff --git a/src/utils/misc.ts b/src/utils/misc.ts deleted file mode 100644 index f68039d..0000000 --- a/src/utils/misc.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const removeBeginningSlash = (url: string) => { - return url.startsWith('/') ? url.slice(1) : url; -}; diff --git a/test/audio.test.ts b/test/audio.test.ts deleted file mode 100644 index d2d7c26..0000000 --- a/test/audio.test.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { createApiTest } from './utils'; - -const recitation = '2'; // abdulbaset abdulsamad - -createApiTest('audio', { - findAllChapterRecitations: {}, - findChapterRecitationById: { - params: ['1', recitation], // chapterId, reciterId - rejectParams: ['0' as any, '0'], - }, - findVerseRecitationsByChapter: { - params: ['1', recitation], - rejectParams: ['0' as any, '0'], - }, - findVerseRecitationsByHizb: { - params: ['1', recitation], - rejectParams: ['0' as any, '0'], - }, - findVerseRecitationsByJuz: { - params: ['1', recitation], - rejectParams: ['0' as any, '0'], - }, - findVerseRecitationsByKey: { - params: ['1:1', recitation], - rejectParams: ['0' as any, '0'], - }, - findVerseRecitationsByPage: { - params: ['1', recitation], - rejectParams: ['0' as any, '0'], - }, - findVerseRecitationsByRub: { - params: ['1', recitation], - rejectParams: ['0' as any, '0'], - }, -}); diff --git a/test/chapters.test.ts b/test/chapters.test.ts deleted file mode 100644 index d8f8cf3..0000000 --- a/test/chapters.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { createApiTest } from './utils'; - -createApiTest('chapters', { - findAll: {}, - findById: { - params: ['1'], - rejectParams: ['0' as any], - }, - findInfoById: { - params: ['1'], - rejectParams: ['0' as any], - }, -}); diff --git a/test/fetchFn.test.ts b/test/fetchFn.test.ts deleted file mode 100644 index b57ba1b..0000000 --- a/test/fetchFn.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import fetch from 'cross-fetch'; -import { quran } from '../src'; - -describe('Custom fetcher', () => { - it('should fail with no fetch', () => { - // @ts-expect-error - we are testing this - globalThis.fetch = undefined; - - expect(() => quran.v4.chapters.findAll()).rejects.toThrowError( - /global fetch/ - ); - }); - - it('should not fail if you pass a fetchFn', () => { - // @ts-expect-error - we are testing this - globalThis.fetch = undefined; - - expect( - quran.v4.chapters.findById('1', { - fetchFn: (url) => { - return fetch(url).then((res) => res.json()); - }, - }) - ).resolves.not.toThrow(); - }); -}); diff --git a/test/juzs.test.ts b/test/juzs.test.ts deleted file mode 100644 index 094f3d4..0000000 --- a/test/juzs.test.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createApiTest } from './utils'; - -createApiTest('juzs', { - findAll: {}, -}); diff --git a/test/resources.test.ts b/test/resources.test.ts deleted file mode 100644 index 1d4a99b..0000000 --- a/test/resources.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { createApiTest } from './utils'; - -createApiTest('resources', { - findAllChapterInfos: {}, - findAllChapterReciters: {}, - findAllLanguages: {}, - findAllRecitationStyles: { - // we did that because method name contains `All`, but the response isn't an array - expect: { - array: false, - }, - }, - findAllRecitations: {}, - findAllTafsirs: {}, - findAllTranslations: {}, - findVerseMedia: {}, - findRecitationInfo: { - params: ['1'], - }, - findTranslationInfo: { - params: ['1'], - }, - findTafsirInfo: { - params: ['169'], - }, -}); diff --git a/test/tsconfig.json b/test/tsconfig.json deleted file mode 100644 index b2e01ee..0000000 --- a/test/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../tsconfig.json", - "include": ["./**/*"], - "compilerOptions": { - "rootDir": "../" - } -} diff --git a/test/utils.ts b/test/utils.ts deleted file mode 100644 index 6f093af..0000000 --- a/test/utils.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { describe, it, expect } from 'vitest'; -import { quran } from '../src/index'; - -type Fn = (...args: any[]) => any; -type ApiName = keyof typeof quran['v4']; -type ArgumentTypes = F extends (...args: infer A) => any - ? A - : never; - -type ApiFunctionParams< - T extends ApiName, - Func extends keyof typeof quran['v4'][T] -> = ArgumentTypes< - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - typeof quran['v4'][T][Func] ->; - -// type ApiFunctionReturn< -// T extends ApiName, -// Func extends keyof typeof quran['v4'][T] -// > = ReturnType< -// // @ts-ignore -// typeof quran['v4'][T][Func] -// >; - -type Params = { - [FunctionName in keyof typeof quran['v4'][T]]: - | ApiFunctionParams - | { - expect?: { array?: boolean }; - params?: ApiFunctionParams | boolean; - rejectParams?: ApiFunctionParams; - cases?: - | ApiFunctionParams[] - | Record>; - customCases?: (method: typeof quran['v4'][T][FunctionName]) => void; - }; -}; - -const isObject = (obj: any) => - obj && typeof obj === 'object' && !Array.isArray(obj); - -export const createApiTest = ( - key: T, - params: Params = {} as any -) => { - const title = key[0].toUpperCase() + key.slice(1); - const api = quran.v4[key]; - - return describe(`${title} API`, () => { - Object.keys(api).forEach((functionKey) => { - const method = (api as any)[functionKey as ApiName] as Fn; - const options = (params as any)[functionKey] || {}; - - let args: any[] | undefined = []; - if (Array.isArray(options)) args = options; - else if (Array.isArray(options.params)) args = options.params; - else if (options.params === false) args = undefined; - - const rejectArgs = options.rejectParams || []; - const cases = options.cases || []; - const expectOptions = options.expect || {}; - const customCases = options.customCases || null; - - const expectArray = - (functionKey.includes('All') && expectOptions.array !== false) || - expectOptions.array === true; - - describe(`${functionKey}()`, () => { - if (args !== undefined) { - it(`should return response`, async () => { - const response = await method(...(args as any[])); - if (expectArray) expect(response).toBeInstanceOf(Array); - expect(response).toBeDefined(); - }); - } - - if (rejectArgs.length) { - it(`should throw with invalid params`, async () => { - await expect(method(...rejectArgs)).rejects.toThrowError(); - }); - } - - if (cases) { - if (Array.isArray(cases) && cases.length) - cases.forEach((caseArgs, idx) => { - it(`case ${idx}`, async () => { - const response = await method(...caseArgs); - if (expectArray) expect(response).toBeInstanceOf(Array); - expect(response).toBeDefined(); - }); - }); - - if (isObject(cases)) { - Object.keys(cases).forEach((caseKey) => { - it(caseKey, async () => { - const response = await method(...cases[caseKey]); - if (expectArray) expect(response).toBeInstanceOf(Array); - expect(response).toBeDefined(); - }); - }); - } - } - - if (customCases) { - describe('Custom Cases', () => { - customCases(method); - }); - } - }); - }); - }); -}; diff --git a/test/verses.test.ts b/test/verses.test.ts deleted file mode 100644 index 0390bbe..0000000 --- a/test/verses.test.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { expect, it, vi } from 'vitest'; -import { createApiTest } from './utils'; -import * as internalFetcher from '../src/sdk/v4/_fetcher'; - -createApiTest('verses', { - findByChapter: { - expect: { - array: true, - }, - params: ['1'], - rejectParams: ['0' as any], - customCases: (method) => { - it('should return indopak_nastaleeq text', async () => { - const fetcherSpy = vi.spyOn(internalFetcher, 'fetcher'); - - const response = await method(1, { - fields: { textIndopakNastaleeq: true }, - }); - - const expectedIndopakNastaleeqText = - 'بِسْمِ اللّٰهِ الرَّحْمٰنِ الرَّحِیْمِ ۟'; - - expect(fetcherSpy).toHaveBeenCalledWith( - '/verses/by_chapter/1', - { - language: 'ar', - perPage: 50, - words: false, - fields: 'text_indopak_nastaleeq', - }, - undefined - ); - expect(response[0].textIndopakNastaleeq).toBe( - expectedIndopakNastaleeqText - ); - }); - }, - }, - findByJuz: { - expect: { - array: true, - }, - params: ['1'], - rejectParams: ['0' as any], - }, - findByKey: { - params: ['1:1'], - rejectParams: ['0:0' as any], - }, - findByPage: { - expect: { - array: true, - }, - params: ['1'], - rejectParams: ['0' as any], - }, - findRandom: {}, - findByHizb: { - expect: { - array: true, - }, - params: ['1'], - rejectParams: ['0' as any], - }, - findByRub: { - params: ['1'], - rejectParams: ['0' as any], - }, -}); diff --git a/tooling/eslint/base.js b/tooling/eslint/base.js new file mode 100644 index 0000000..bff287f --- /dev/null +++ b/tooling/eslint/base.js @@ -0,0 +1,85 @@ +/// + +import * as path from "node:path"; +import { includeIgnoreFile } from "@eslint/compat"; +import eslint from "@eslint/js"; +import importPlugin from "eslint-plugin-import"; +import turboPlugin from "eslint-plugin-turbo"; +import tseslint from "typescript-eslint"; + +/** + * All packages that leverage t3-env should use this rule + */ +export const restrictEnvAccess = tseslint.config( + { ignores: ["**/env.ts"] }, + { + files: ["**/*.js", "**/*.ts", "**/*.tsx"], + rules: { + "no-restricted-properties": [ + "error", + { + object: "process", + property: "env", + message: + "Use `import { env } from '@/env'` instead to ensure validated types.", + }, + ], + "no-restricted-imports": [ + "error", + { + name: "process", + importNames: ["env"], + message: + "Use `import { env } from '@/env'` instead to ensure validated types.", + }, + ], + }, + }, +); + +export default tseslint.config( + // Ignore files not tracked by VCS and any config files + includeIgnoreFile(path.join(import.meta.dirname, "../../.gitignore")), + { ignores: ["**/*.config.*"] }, + { + files: ["**/*.js", "**/*.ts", "**/*.tsx"], + plugins: { + import: importPlugin, + turbo: turboPlugin, + }, + extends: [ + eslint.configs.recommended, + ...tseslint.configs.recommended, + ...tseslint.configs.recommendedTypeChecked, + ], + rules: { + ...turboPlugin.configs.recommended.rules, + "@typescript-eslint/no-unused-vars": [ + "error", + { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }, + ], + "@typescript-eslint/consistent-type-imports": [ + "warn", + { prefer: "type-imports", fixStyle: "separate-type-imports" }, + ], + "@typescript-eslint/no-misused-promises": [ + 2, + { checksVoidReturn: { attributes: false } }, + ], + "@typescript-eslint/no-unnecessary-condition": [ + "error", + { + allowConstantLoopConditions: true, + }, + ], + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/restrict-template-expressions": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "import/consistent-type-specifier-style": ["error", "prefer-top-level"], + }, + }, + { + linterOptions: { reportUnusedDisableDirectives: true }, + languageOptions: { parserOptions: { projectService: true } }, + }, +); diff --git a/tooling/eslint/nextjs.js b/tooling/eslint/nextjs.js new file mode 100644 index 0000000..8e60206 --- /dev/null +++ b/tooling/eslint/nextjs.js @@ -0,0 +1,18 @@ +// @ts-nocheck +import nextPlugin from "@next/eslint-plugin-next"; + +/** @type {Awaited} */ +export default [ + { + files: ["**/*.ts", "**/*.tsx"], + plugins: { + "@next/next": nextPlugin, + }, + rules: { + ...nextPlugin.configs.recommended.rules, + ...nextPlugin.configs["core-web-vitals"].rules, + // TypeError: context.getAncestors is not a function + "@next/next/no-duplicate-head": "off", + }, + }, +]; diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json new file mode 100644 index 0000000..45e0e80 --- /dev/null +++ b/tooling/eslint/package.json @@ -0,0 +1,35 @@ +{ + "name": "@quranjs/eslint-config", + "private": true, + "version": "0.3.0", + "type": "module", + "exports": { + "./base": "./base.js", + "./nextjs": "./nextjs.js", + "./react": "./react.js" + }, + "scripts": { + "clean": "git clean -xdf .cache .turbo node_modules", + "format": "prettier --check . --ignore-path ../../.gitignore", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@eslint/compat": "^1.2.5", + "@next/eslint-plugin-next": "^15.2.1", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react-compiler": "beta", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-turbo": "^2.3.4", + "typescript-eslint": "^8.21.0" + }, + "devDependencies": { + "@quranjs/prettier-config": "workspace:*", + "@quranjs/tsconfig": "workspace:*", + "eslint": "catalog:", + "prettier": "catalog:", + "typescript": "catalog:" + }, + "prettier": "@quranjs/prettier-config" +} diff --git a/tooling/eslint/react.js b/tooling/eslint/react.js new file mode 100644 index 0000000..e010450 --- /dev/null +++ b/tooling/eslint/react.js @@ -0,0 +1,25 @@ +import reactPlugin from "eslint-plugin-react"; +import compilerPlugin from "eslint-plugin-react-compiler"; +import hooksPlugin from "eslint-plugin-react-hooks"; + +/** @type {Awaited} */ +export default [ + { + files: ["**/*.ts", "**/*.tsx"], + plugins: { + react: reactPlugin, + "react-compiler": compilerPlugin, + "react-hooks": hooksPlugin, + }, + rules: { + ...reactPlugin.configs["jsx-runtime"].rules, + ...hooksPlugin.configs.recommended.rules, + "react-compiler/react-compiler": "error", + }, + languageOptions: { + globals: { + React: "writable", + }, + }, + }, +]; diff --git a/tooling/eslint/tsconfig.json b/tooling/eslint/tsconfig.json new file mode 100644 index 0000000..39938f2 --- /dev/null +++ b/tooling/eslint/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@quranjs/tsconfig/base.json", + "include": ["."], + "exclude": ["node_modules"] +} diff --git a/tooling/eslint/types.d.ts b/tooling/eslint/types.d.ts new file mode 100644 index 0000000..a138aac --- /dev/null +++ b/tooling/eslint/types.d.ts @@ -0,0 +1 @@ +declare module "eslint-plugin-import"; diff --git a/tooling/prettier/index.js b/tooling/prettier/index.js new file mode 100644 index 0000000..95d1d6c --- /dev/null +++ b/tooling/prettier/index.js @@ -0,0 +1,49 @@ +import { fileURLToPath } from "node:url"; + +/** @typedef {import("prettier").Config} PrettierConfig */ +/** @typedef {import("prettier-plugin-tailwindcss").PluginOptions} TailwindConfig */ +/** @typedef {import("@ianvs/prettier-plugin-sort-imports").PluginConfig} SortImportsConfig */ + +/** @type { PrettierConfig | SortImportsConfig | TailwindConfig } */ +const config = { + plugins: [ + "@ianvs/prettier-plugin-sort-imports", + "prettier-plugin-tailwindcss", + ], + tailwindConfig: fileURLToPath( + new URL("../../tooling/tailwind/web.ts", import.meta.url), + ), + tailwindFunctions: ["cn", "cva"], + importOrder: [ + "", + "^(react/(.*)$)|^(react$)", + "^(next/(.*)$)|^(next$)", + "", + "", + "^@quranjs", + "^@quranjs/(.*)$", + "", + "^[.|..|~]", + "^~/", + "^[../]", + "^[./]", + ], + importOrderParserPlugins: ["typescript", "jsx", "decorators-legacy"], + importOrderTypeScriptVersion: "4.4.0", + overrides: [ + { + files: "*.json.hbs", + options: { + parser: "json", + }, + }, + { + files: "*.js.hbs", + options: { + parser: "babel", + }, + }, + ], +}; + +export default config; diff --git a/tooling/prettier/package.json b/tooling/prettier/package.json new file mode 100644 index 0000000..19db859 --- /dev/null +++ b/tooling/prettier/package.json @@ -0,0 +1,25 @@ +{ + "name": "@quranjs/prettier-config", + "private": true, + "version": "0.1.0", + "type": "module", + "exports": { + ".": "./index.js" + }, + "scripts": { + "clean": "git clean -xdf .cache .turbo node_modules", + "format": "prettier --check . --ignore-path ../../.gitignore", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@ianvs/prettier-plugin-sort-imports": "^4.4.1", + "prettier": "catalog:", + "prettier-plugin-tailwindcss": "^0.6.11" + }, + "devDependencies": { + "@quranjs/tsconfig": "workspace:*", + "@types/node": "^24.2.0", + "typescript": "catalog:" + }, + "prettier": "@quranjs/prettier-config" +} diff --git a/tooling/prettier/tsconfig.json b/tooling/prettier/tsconfig.json new file mode 100644 index 0000000..d96e3e1 --- /dev/null +++ b/tooling/prettier/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "@quranjs/tsconfig/base.json", + "include": ["."], + "exclude": ["node_modules"] +} \ No newline at end of file diff --git a/tooling/typescript/base.json b/tooling/typescript/base.json new file mode 100644 index 0000000..0b38e0d --- /dev/null +++ b/tooling/typescript/base.json @@ -0,0 +1,34 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + /** Base Options */ + "esModuleInterop": true, + "skipLibCheck": true, + "target": "ES2022", + "lib": [ + "ES2022" + ], + "allowJs": true, + "resolveJsonModule": true, + "moduleDetection": "force", + "isolatedModules": true, + /** Keep TSC performant in monorepos */ + "incremental": true, + "disableSourceOfProjectReferenceRedirect": true, + "tsBuildInfoFile": "${configDir}/.cache/tsbuildinfo.json", + /** Strictness */ + "strict": true, + "noUncheckedIndexedAccess": true, + "checkJs": true, + /** Transpile using Bundler (not tsc) */ + "module": "Preserve", + "moduleResolution": "Bundler", + "noEmit": true + }, + "exclude": [ + "node_modules", + "build", + "dist", + ".next" + ] +} \ No newline at end of file diff --git a/tooling/typescript/internal-package.json b/tooling/typescript/internal-package.json new file mode 100644 index 0000000..8e05da2 --- /dev/null +++ b/tooling/typescript/internal-package.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "noEmit": false, + "outDir": "${configDir}/dist" + } +} \ No newline at end of file diff --git a/tooling/typescript/package.json b/tooling/typescript/package.json new file mode 100644 index 0000000..571a908 --- /dev/null +++ b/tooling/typescript/package.json @@ -0,0 +1,8 @@ +{ + "name": "@quranjs/tsconfig", + "private": true, + "version": "0.1.0", + "files": [ + "*.json" + ] +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 51dd033..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - // see https://www.typescriptlang.org/tsconfig to better understand tsconfigs - "include": ["src", "types"], - "compilerOptions": { - "module": "esnext", - "lib": ["dom", "esnext"], - "importHelpers": true, - "declaration": true, - "sourceMap": true, - "rootDir": "./src", - "strict": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "moduleResolution": "node", - "jsx": "react", - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true - } -} diff --git a/tsup.config.ts b/tsup.config.ts deleted file mode 100644 index 3c49e21..0000000 --- a/tsup.config.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { defineConfig, Format, type Options } from 'tsup'; -import { createUmdWrapper } from './umd-wrapper-plugin.mjs'; -import { dependencies } from './package.json'; - -const externalDependencies = Object.keys(dependencies); - -const clientName = 'quranjsApi'; -const clientVersion = `{{VERSION_TO_REPLACE}}`; - -const baseConfig: Options = { - entry: ['src/index.ts'], - outDir: 'dist', - outExtension({ format, options }) { - const ext = format === 'esm' ? 'mjs' : 'js'; - const finalFormat = format === 'cjs' || format === 'esm' ? '' : format; - - const outputExtension = options.minify - ? `${finalFormat}.min.${ext}` - : `${finalFormat}.${ext}`; - - return { - js: outputExtension.startsWith('.') - ? outputExtension - : `.${outputExtension}`, - }; - }, - treeshake: true, - splitting: false, - sourcemap: true, - clean: true, - dts: true, -}; - -const umdConfig: Options = { - ...baseConfig, - platform: 'browser', - target: ['chrome90', 'edge90', 'firefox90', 'opera98', 'safari15'], - format: ['umd' as Format], - noExternal: externalDependencies, - banner: { js: `/* @QuranJS/API version ${clientVersion} */\n` }, - define: { - __VERSION__: `'${clientVersion}'`, - }, - name: '@quranjs/api', - globalName: clientName, - bundle: true, - esbuildPlugins: [], -}; - -// export default defineConfig((options) => [ -// { -// entry: ['src/index.ts'], -// format: ['esm', 'cjs'], -// splitting: false, -// sourcemap: true, -// clean: true, -// dts: true, -// treeshake: true, -// minify: !options.watch, -// }, -// { -// // Configuration for CDNs -// entry: ['src/index.ts'], -// format: 'iife', // For CDNs (IIFE format for browsers) -// globalName: 'quran', // Global variable for browser use -// outDir: 'dist/umd', -// splitting: false, -// sourcemap: false, -// clean: true, -// dts: true, -// treeshake: true, -// minify: !options.watch, -// }, -// ]); - -export default defineConfig((options) => [ - { - ...baseConfig, - format: ['cjs', 'esm'], - minify: !options.watch, - }, - { - ...umdConfig, - minify: false, - plugins: [createUmdWrapper({ libraryName: clientName, external: [] })], - }, - { - ...umdConfig, - minify: true, - plugins: [createUmdWrapper({ libraryName: clientName, external: [] })], - }, - // { - // ...umdConfig, - // minify: false, - // target: 'es5', - // outputExtension: { - // js: `browser.js`, - // }, - // esbuildPlugins: [ - // umdWrapper({ libraryName: clientName, external: 'inherit' }), - // ], - // }, -]); diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..82ba7ed --- /dev/null +++ b/turbo.json @@ -0,0 +1,71 @@ +{ + "$schema": "https://turborepo.org/schema.json", + "ui": "tui", + "tasks": { + "topo": { + "dependsOn": [ + "^topo" + ] + }, + "build": { + "dependsOn": [ + "^build" + ], + "outputs": [ + ".cache/tsbuildinfo.json", + "dist/**" + ] + }, + "dev": { + "dependsOn": [ + "^dev" + ], + "cache": false, + "persistent": false + }, + "format": { + "outputs": [ + ".cache/.prettiercache" + ], + "outputLogs": "new-only" + }, + "lint": { + "dependsOn": [ + "^topo", + "^build" + ], + "outputs": [ + ".cache/.eslintcache" + ] + }, + "test": { + "dependsOn": [ + "^topo" + ] + }, + "typecheck": { + "dependsOn": [ + "^topo", + "^build" + ], + "outputs": [ + ".cache/tsbuildinfo.json" + ] + }, + "clean": { + "cache": false + }, + "//#clean": { + "cache": false + } + }, + "globalEnv": [], + "globalPassThroughEnv": [ + "NODE_ENV", + "CI", + "VERCEL", + "VERCEL_ENV", + "VERCEL_URL", + "npm_lifecycle_event" + ] +} \ No newline at end of file diff --git a/umd-wrapper-plugin.mjs b/umd-wrapper-plugin.mjs deleted file mode 100644 index b011e81..0000000 --- a/umd-wrapper-plugin.mjs +++ /dev/null @@ -1,180 +0,0 @@ -/* eslint-disable no-undef */ -import path from 'path'; -import fs from 'fs'; - -/* - Plugin is based on the `esbuild-plugin-umd-wrapper`, found at: - https://github.com/inqnuam/esbuild-plugin-umd-wrapper -*/ - -// eslint-disable-next-line no-unused-vars -const createWrapperWithLib = ({ - depsKeys, - depsValKey, - amdLoader, - lib, - defineDeps, - globalDeps, - requireDeps, -}) => { - return `(function (g, f) { - if ("object" == typeof exports && "object" == typeof module) { - module.exports = f(${requireDeps}); - } else if ("function" == typeof ${amdLoader} && ${amdLoader}.amd) { - ${amdLoader}("${lib}", ${defineDeps}, f); - } else if ("object" == typeof exports) { - exports["${lib}"] = f(${requireDeps}); - } else { - g["${lib}"] = {}; - Object.assign(g["${lib}"], f(${globalDeps})); - } - }(this, (${depsKeys}) => { - var exports = {}; - var module = { exports };\n\n`; -}; - -export const alphabet = [ - '__da', - '__db', - '__dc', - '__dd', - '__de', - '__df', - '__dg', - '__dh', - '__di', - '__dj', - '__dk', - '__dl', - '__dm', - '__dn', - '__do', - '__dp', - '__dq', - '__dr', - '__ds', - '__dt', - '__du', - '__dv', - '__dw', - '__dx', - '__dy', - '__dz', -]; - -function getUmdBanner(opts) { - const external = opts.external ?? []; - const defineDeps = external?.length ? `['${external.join("', '")}']` : '[]'; - const globalDeps = external?.map((x) => `g["${x}"]`).join(', ') ?? ''; - const requireDeps = external?.map((x) => `require('${x}')`).join(', ') ?? ''; - let deps = []; - if (external) { - deps = external.map((x, i) => { - return { - key: alphabet[i], - val: x, - }; - }); - } - const depsKeys = deps.map((x) => x.key).join(', '); - const depsValKey = deps.map((x) => `"${x.val}": ${x.key}`).join(', '); - const options = { - depsKeys, - depsValKey, - amdLoader: 'define', - defineDeps, - globalDeps, - requireDeps, - lib: opts.libraryName, - }; - const result = createWrapperWithLib(options); - return result; -} - -export const umdFooter = `if (typeof module.exports == "object" && typeof exports == "object") { - var __cp = (to, from, except, desc) => { - if ((from && typeof from === "object") || typeof from === "function") { - for (let key of Object.getOwnPropertyNames(from)) { - if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except) - Object.defineProperty(to, key, { - get: () => from[key], - enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable, - }); - } - } - return to; - }; - module.exports = __cp(module.exports, exports); - } - return module.exports; - }))\n\n\n`; - -export const umdWrapperSetup = (build) => { - const { initialOptions } = build; - const external = initialOptions.external; - const content = getUmdBanner(external); - if (initialOptions.footer) { - if (initialOptions.footer.js) { - initialOptions.footer.js += umdFooter; - } else { - initialOptions.footer.js = umdFooter; - } - } else { - initialOptions.footer = { - js: umdFooter, - }; - } - - if (initialOptions.banner) { - if (initialOptions.banner.js) { - initialOptions.banner.js += content; - } else { - initialOptions.banner.js = content; - } - } else { - initialOptions.banner = { - js: content, - }; - } -}; - -export const createUmdWrapper = (opts) => { - let pluginExternalDependencies = []; - - return { - name: 'add-umd-wrapper', - esbuildOptions(options) { - options.format = 'cjs'; - pluginExternalDependencies = []; - return options; - }, - buildEnd(result) { - try { - result.writtenFiles.forEach((file) => { - const filePath = path.join(process.cwd(), file.name); - if (file.name.endsWith('.js')) { - const fileName = path.basename(file.name); - const umdBanner = getUmdBanner({ - ...opts, - external: pluginExternalDependencies, - }); - - const content = fs.readFileSync(filePath, 'utf-8'); - const patchedFileContents = content.replace( - `//# sourceMappingURL=${fileName}.map`, - '' - ); - const scriptContent = `\n\n\n${patchedFileContents}\n\n\n`; - const wrappedContent = `${umdBanner}${scriptContent}${umdFooter}\n\n//# sourceMappingURL=${fileName}.map\n`; - const newContent = `/* umd */\n${wrappedContent}`; - - fs.writeFileSync(filePath, newContent, 'utf8'); - } - }); - } catch (err) { - // eslint-disable-next-line no-console - console.error(err); - } - }, - }; -}; diff --git a/vitest.config.ts b/vitest.config.ts deleted file mode 100644 index ef3a9b0..0000000 --- a/vitest.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - test: { - environment: 'node', - include: ['./test/**/*.test.{js,ts,jsx,tsx}'], - setupFiles: ['./test/setup.ts'], - }, -});