├── .changeset ├── README.md └── config.json ├── .github ├── dependabot.yml ├── pull_request_template.md └── workflows │ ├── pre-checks.yml │ ├── publish-on-main.yml │ └── pull-request.yml ├── .gitignore ├── .npmignore ├── .npmrc ├── .vscode ├── extensions.json └── settings.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── biome.json ├── package.json ├── pnpm-lock.yaml ├── scripts ├── generateFixtures.ts ├── processHtml.ts └── processMarkdown.ts ├── src ├── elements │ ├── index.ts │ ├── script.ts │ └── styles.ts ├── handlers │ ├── delimiters.ts │ └── stylesAndScript.ts ├── index.ts └── options.ts ├── test ├── fixtures │ ├── multiple-html │ │ ├── input.html │ │ └── output.html │ ├── multiple-md │ │ ├── input.md │ │ └── output.html │ ├── single-html │ │ ├── input.html │ │ └── output.html │ └── single-md │ │ ├── input.md │ │ └── output.html └── index.test.ts ├── tsconfig.json └── vitest.config.ts /.changeset/README.md: -------------------------------------------------------------------------------- 1 | # Changesets 2 | 3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works 4 | with multi-package repos, or single-package repos to help you version and publish your code. You can 5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets) 6 | 7 | We have a quick list of common questions to get you started engaging with this project in 8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) 9 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@3.0.3/schema.json", 3 | "changelog": [ 4 | "@changesets/changelog-github", 5 | { "repo": "ITZSHOAIB/rehype-code-group" } 6 | ], 7 | "commit": false, 8 | "fixed": [], 9 | "linked": [], 10 | "access": "public", 11 | "baseBranch": "main", 12 | "updateInternalDependencies": "patch", 13 | "ignore": [] 14 | } 15 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | - package-ecosystem: "npm" 8 | directory: "/" 9 | schedule: 10 | interval: "weekly" 11 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Description 4 | 5 | 6 | ## Related Issues 7 | 8 | 9 | - Issue: 10 | 11 | ## Type of changes 12 | 13 | 14 | - [ ] Bug fix (non-breaking change which fixes an issue) 15 | - [ ] New feature (non-breaking change which adds functionality) 16 | - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) 17 | - [ ] This change requires a documentation update 18 | 19 | ## Checklist: 20 | 21 | 22 | 23 | - [ ] I have checked that there isn't already a PR that solves the problem the same way. 24 | - [ ] My code follows the code style of this project. 25 | - [ ] My change requires a change to the documentation. 26 | - [ ] I have updated the documentation accordingly. 27 | - [ ] I have read the [**CONTRIBUTING**](https://github.com/ITZSHOAIB/hashtegrity/blob/master/.github/CONTRIBUTING.md) document. 28 | - [ ] I have included a **changeset** according to the type of my changes 29 | - [ ] I have added tests to cover my changes. 30 | - [ ] All new and existing tests passed. 31 | 32 | 33 | ## Additional Context or Notes 34 | 35 | 36 | - **Is there anything specific the reviewer should focus on?** 37 | -------------------------------------------------------------------------------- /.github/workflows/pre-checks.yml: -------------------------------------------------------------------------------- 1 | name: Checks 2 | on: 3 | workflow_call: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | lint: 8 | name: Lint 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout 12 | uses: actions/checkout@v4 13 | 14 | - name: Setup pnpm 15 | uses: pnpm/action-setup@v4 16 | 17 | - name: Setup Node.js 18 | uses: actions/setup-node@v4 19 | with: 20 | node-version: 22 21 | cache: "pnpm" 22 | 23 | - name: Install dependencies 24 | run: pnpm install --frozen-lockfile 25 | 26 | - name: Lint 27 | run: pnpm lint 28 | 29 | - name: Auto Commit 30 | if: github.ref != 'refs/heads/main' 31 | uses: stefanzweifel/git-auto-commit-action@v5 32 | env: 33 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 34 | with: 35 | commit_message: 'chore: format' 36 | commit_user_name: 'github-actions[bot]' 37 | commit_user_email: 'github-actions[bot]@users.noreply.github.com' 38 | 39 | build: 40 | name: Build 41 | runs-on: ubuntu-latest 42 | steps: 43 | - name: Checkout 44 | uses: actions/checkout@v4 45 | 46 | - name: Setup pnpm 47 | uses: pnpm/action-setup@v4 48 | 49 | - name: Setup Node.js 50 | uses: actions/setup-node@v4 51 | with: 52 | node-version: 22 53 | cache: "pnpm" 54 | 55 | - name: Install dependencies 56 | run: pnpm install --frozen-lockfile 57 | 58 | - name: Build 59 | run: pnpm build 60 | 61 | - name: Typecheck 62 | run: pnpm typecheck 63 | 64 | test: 65 | name: Test 66 | runs-on: ubuntu-latest 67 | steps: 68 | - name: Checkout 69 | uses: actions/checkout@v4 70 | 71 | - name: Setup pnpm 72 | uses: pnpm/action-setup@v4 73 | 74 | - name: Setup Node.js 75 | uses: actions/setup-node@v4 76 | with: 77 | node-version: 22 78 | cache: "pnpm" 79 | 80 | - name: Install dependencies 81 | run: pnpm install --frozen-lockfile 82 | 83 | - name: Test 84 | run: pnpm test -------------------------------------------------------------------------------- /.github/workflows/publish-on-main.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | on: 3 | push: 4 | branches: 5 | - "main" 6 | 7 | concurrency: 8 | group: ${{ github.workflow }}-${{ github.ref }} 9 | cancel-in-progress: true 10 | 11 | jobs: 12 | checks: 13 | name: Checks 14 | uses: ./.github/workflows/pre-checks.yml 15 | secrets: inherit 16 | 17 | publish: 18 | name: Publish 19 | needs: checks 20 | runs-on: ubuntu-latest 21 | steps: 22 | - name: Checkout 23 | uses: actions/checkout@v4 24 | with: 25 | fetch-depth: 0 26 | 27 | - name: Setup pnpm 28 | uses: pnpm/action-setup@v4 29 | 30 | - name: Setup Node.js 31 | uses: actions/setup-node@v4 32 | with: 33 | node-version: 22 34 | cache: "pnpm" 35 | 36 | - name: Install dependencies 37 | run: pnpm install --frozen-lockfile 38 | 39 | - name: Create Release Pull Request or Publish 40 | id: changesets 41 | uses: changesets/action@v1 42 | with: 43 | publish: pnpm changeset:publish 44 | env: 45 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 46 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 47 | -------------------------------------------------------------------------------- /.github/workflows/pull-request.yml: -------------------------------------------------------------------------------- 1 | name: Pull Request 2 | on: 3 | pull_request: 4 | types: [opened, synchronize, reopened, ready_for_review] 5 | 6 | concurrency: 7 | group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} 8 | cancel-in-progress: true 9 | 10 | jobs: 11 | checks: 12 | name: Checks 13 | uses: ./.github/workflows/pre-checks.yml 14 | secrets: inherit 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | coverage -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | tsconfig.json -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers=false -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["orta.vscode-twoslash-queries", "biomejs.biome"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "biomejs.biome", 3 | "editor.formatOnSave": true, 4 | "typescript.tsdk": "node_modules/typescript/lib", 5 | "typescript.enablePromptUseWorkspaceTsdk": true, 6 | "[typescript]": { 7 | "editor.defaultFormatter": "biomejs.biome" 8 | }, 9 | "[javascript]": { 10 | "editor.defaultFormatter": "biomejs.biome" 11 | }, 12 | "[json]": { 13 | "editor.defaultFormatter": "biomejs.biome" 14 | }, 15 | "[html]": { 16 | "editor.defaultFormatter": "esbenp.prettier-vscode" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # rehype-code-group 2 | 3 | ## 0.2.4 4 | 5 | ### Patch Changes 6 | 7 | - [#44](https://github.com/ITZSHOAIB/rehype-code-group/pull/44) [`73dbf05`](https://github.com/ITZSHOAIB/rehype-code-group/commit/73dbf059171d058dec38399cd7fab0f553228238) Thanks [@dependabot](https://github.com/apps/dependabot)! - chore(deps-dev): bump typescript from 5.7.3 to 5.8.2 8 | 9 | ## 0.2.3 10 | 11 | ### Patch Changes 12 | 13 | - [`afd29c9`](https://github.com/ITZSHOAIB/rehype-code-group/commit/afd29c9a5eb3a306ab6aaed79a1e01ccb9ca5889) Thanks [@ITZSHOAIB](https://github.com/ITZSHOAIB)! - a minor bump 14 | 15 | ## 0.2.2 16 | 17 | ### Patch Changes 18 | 19 | - [#18](https://github.com/ITZSHOAIB/rehype-code-group/pull/18) [`3f77fe9`](https://github.com/ITZSHOAIB/rehype-code-group/commit/3f77fe9404f0a2a522bca0e4ad682e65f2190da7) Thanks [@Indronil22](https://github.com/Indronil22)! - Fix: code blocks overflowing issue 20 | 21 | ## 0.2.1 22 | 23 | ### Patch Changes 24 | 25 | - [#13](https://github.com/ITZSHOAIB/rehype-code-group/pull/13) [`f88b774`](https://github.com/ITZSHOAIB/rehype-code-group/commit/f88b774afa66233c580043a0079db0852b676d69) Thanks [@ITZSHOAIB](https://github.com/ITZSHOAIB)! - feat: enhanced classnames 26 | 27 | ## 0.2.0 28 | 29 | ### Minor Changes 30 | 31 | - [#10](https://github.com/ITZSHOAIB/rehype-code-group/pull/10) [`cf0c4e2`](https://github.com/ITZSHOAIB/rehype-code-group/commit/cf0c4e2f8d2637992ae91b2447dec44ae3cd535f) Thanks [@ITZSHOAIB](https://github.com/ITZSHOAIB)! - chore: build process revamped for unminifed dist 32 | 33 | ## 0.1.3 34 | 35 | ### Patch Changes 36 | 37 | - [`2df1e4a`](https://github.com/ITZSHOAIB/rehype-code-group/commit/2df1e4a34693590c9402566ca2d358ee982db69b) Thanks [@ITZSHOAIB](https://github.com/ITZSHOAIB)! - feat: enhanced accessibility for tabs 38 | 39 | ## 0.1.2 40 | 41 | ### Patch Changes 42 | 43 | - [`d743267`](https://github.com/ITZSHOAIB/rehype-code-group/commit/d743267ecfd69e370e1c2575fb800863a095c3af) Thanks [@ITZSHOAIB](https://github.com/ITZSHOAIB)! - feat: improved accesibility of code group tabs 44 | 45 | ## 0.1.1 46 | 47 | ### Patch Changes 48 | 49 | - [#5](https://github.com/ITZSHOAIB/rehype-code-group/pull/5) [`b917385`](https://github.com/ITZSHOAIB/rehype-code-group/commit/b9173857ce89d1739b9b64b5ce085475ca6caf41) Thanks [@ITZSHOAIB](https://github.com/ITZSHOAIB)! - refactor: improved performance with better IDE comments 50 | 51 | ## 0.1.0 52 | 53 | ### Minor Changes 54 | 55 | - [#3](https://github.com/ITZSHOAIB/rehype-code-group/pull/3) [`f7d4784`](https://github.com/ITZSHOAIB/rehype-code-group/commit/f7d4784bb70028cb123d0591f428b9d77d91e8d9) Thanks [@ITZSHOAIB](https://github.com/ITZSHOAIB)! - feat: configuration options added for customization 56 | 57 | ## 0.0.1 58 | 59 | ### Patch Changes 60 | 61 | - [#1](https://github.com/ITZSHOAIB/rehype-code-group/pull/1) [`6d0424d`](https://github.com/ITZSHOAIB/rehype-code-group/commit/6d0424d116f6b71e86765a1d12923f189f656492) Thanks [@ITZSHOAIB](https://github.com/ITZSHOAIB)! - The initial release of the package 62 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Sohab Sk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Copy of Untitled Design (1)](https://github.com/user-attachments/assets/fa55322a-d00b-45df-9537-63f43cb781c7) 2 | 3 | # Rehype Code Group Plugin 🤖 4 | 5 | ![NPM Version](https://img.shields.io/npm/v/rehype-code-group) 6 | ![NPM Downloads](https://img.shields.io/npm/dm/rehype-code-group) 7 | ![npm bundle size](https://img.shields.io/bundlephobia/minzip/rehype-code-group) 8 | ![NPM License](https://img.shields.io/npm/l/rehype-code-group) 9 | 10 | 11 | A [Rehype](https://github.com/rehypejs/rehype) plugin for grouping code blocks with tabs, allowing you to switch between different code snippets easily. Perfect for **documentation** and **tutorials** where you want to show the same code in different languages or configurations. 12 | 13 | **Inspired by [Vitepress Code Groups](https://vitepress.dev/guide/markdown#code-groups)** 14 | 15 | > [!TIP] 16 | > **This plugin is versatile and can be used to create tabs for any type of content, not just code blocks. You can easily organize and display different types of content within tabs.** 17 | 18 | ## Features ✨ 19 | 20 | - **Group Code Blocks with Tabs**: Easily group code blocks with tabs, allowing users to switch between different code snippets. 21 | - **Automatic Styles and Scripts**: Automatically adds the necessary styles and scripts to the document. 22 | - **Accessibility**: Enhanced accessibility features for better user experience. 23 | - **Versatile Content Grouping**: Create tabs for any type of content, not just code blocks. Organize and display different types of content within tabs. 24 | - **Customizable Class Names**: Customize the class names used by the plugin to match your project's styles. 25 | 26 | ## Installation 📦 27 | 28 | > [!NOTE] 29 | > This package is [ESM](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) only. 30 | 31 | Install the plugin using any package manager: 32 | 33 | ```bash 34 | npm install rehype-code-group 35 | # or 36 | pnpm add rehype-code-group 37 | # or 38 | yarn add rehype-code-group 39 | ``` 40 | 41 | In Deno with [esm.sh](https://esm.sh/): 42 | 43 | ```js 44 | import rehypeCodeGroup from 'https://esm.sh/rehype-code-group' 45 | ``` 46 | 47 | In browsers with [esm.sh](https://esm.sh/): 48 | 49 | ```html 50 | 53 | ``` 54 | 55 | ## Usage 🚀 56 | 57 | ### Markdown Syntax 58 | 59 | To incorporate code group tabs in your markdown file, use the following syntax: 60 | 61 | ~~~raw 62 | ::: code-group labels=[npm, pnpm, yarn] 63 | 64 | ```bash 65 | npm install rehype-code-group 66 | ``` 67 | 68 | ```bash 69 | pnpm add rehype-code-group 70 | ``` 71 | 72 | ```bash 73 | yarn add rehype-code-group 74 | ``` 75 | 76 | ::: 77 | ~~~ 78 | 79 | The code group will be rendered like this (The below UI used [Expressive Code](https://expressive-code.com/) as a syntax highlighter): 80 | 81 | ![Screenshot 2024-11-13 021749](https://github.com/user-attachments/assets/0bcae4e7-569a-4189-b890-9f543a67feb6) 82 | 83 | Check this functionalty live: [https://4techloverz.com/wordpress-astro-migration-easy-guide/#initialize-astro-project](https://4techloverz.com/wordpress-astro-migration-easy-guide/#initialize-astro-project) 84 | 85 | ### With Rehype 86 | 87 | Here's an example of how to use the plugin with Rehype: 88 | 89 | ```typescript 90 | import { rehype } from "rehype"; 91 | import remarkParse from "remark-parse"; 92 | import remarkRehype from "remark-rehype"; 93 | import rehypeMinifyWhitespace from "rehype-minify-whitespace"; 94 | import rehypeStringify from "rehype-stringify"; 95 | import rehypeCodeGroup from "rehype-code-group"; 96 | 97 | const options = {}; 98 | 99 | const file = await rehype() 100 | .use(remarkParse) 101 | .use(remarkRehype) 102 | .use(rehypeCodeGroup, options) 103 | .use(rehypeMinifyWhitespace) 104 | .use(rehypeStringify) 105 | .process(input); 106 | 107 | console.log(String(file)) 108 | ``` 109 | 110 | ### With Astro 111 | 112 | You can also use this plugin with Astro (`astro.config.ts`): 113 | 114 | ```typescript 115 | import { defineConfig } from 'astro/config'; 116 | import rehypeCodeGroup from 'rehype-code-group'; 117 | 118 | // https://docs.astro.build/en/reference/configuration-reference/ 119 | export default defineConfig({ 120 | // ... 121 | markdown: { 122 | // ... 123 | rehypePlugins: [ 124 | // ... 125 | rehypeCodeGroup, 126 | ], 127 | }, 128 | // ... 129 | }) 130 | ``` 131 | 132 | ## Customization 🎨 133 | 134 | You can customize the class names used by the plugin to match your project's styles. The available options are: 135 | 136 | - customClassNames: An object to override the default class names. 137 | 138 | ### Example 139 | 140 | ```typescript 141 | .use(rehypeCodeGroup, { 142 | customClassNames: { 143 | codeGroupClass: "my-code-group", 144 | tabContainerClass: "my-tab-container", 145 | tabClass: "my-tab", 146 | activeTabClass: "my-active-tab", 147 | blockContainerClass: "my-block-container", 148 | activeBlockClass: "my-active-block", 149 | }, 150 | }) 151 | ``` 152 | 153 | ### Output Example 📄 154 | 155 | Given the following input Markdown: [input.md](/test/fixtures/single-md/input.md) 156 | 157 | The plugin will produce the following output: [output.html](/test/fixtures/single-md/output.html) 158 | 159 | ## Contributing 🤝 160 | Contributions are welcome! Please read the contributing guidelines first. 161 | 162 | ## License 📄 163 | This project is licensed under the MIT License - see the [LICENSE](https://github.com/ITZSHOAIB/rehype-code-group?tab=MIT-1-ov-file) file for details. 164 | 165 | --- 166 | 167 | Happy coding! 🎉 168 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.9.1/schema.json", 3 | "vcs": { 4 | "enabled": false, 5 | "clientKind": "git", 6 | "useIgnoreFile": false 7 | }, 8 | "files": { 9 | "ignoreUnknown": false, 10 | "ignore": ["dist", "node_modules", "tsconfig.json", "coverage"] 11 | }, 12 | "formatter": { 13 | "enabled": true, 14 | "indentStyle": "space", 15 | "indentWidth": 2 16 | }, 17 | "organizeImports": { 18 | "enabled": true 19 | }, 20 | "linter": { 21 | "enabled": true, 22 | "rules": { 23 | "recommended": true 24 | } 25 | }, 26 | "javascript": { 27 | "formatter": { 28 | "quoteStyle": "double" 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rehype-code-group", 3 | "version": "0.2.4", 4 | "description": "A Rehype plugin for grouping code blocks with tabs, perfect for documentation and tutorials. Works with all Code Syntax Highlighters.", 5 | "main": "dist/index.js", 6 | "module": "dist/index.js", 7 | "exports": { 8 | ".": { 9 | "import": "./dist/index.js", 10 | "types": "./dist/index.d.ts" 11 | } 12 | }, 13 | "types": "dist/index.d.ts", 14 | "type": "module", 15 | "files": ["dist"], 16 | "scripts": { 17 | "run:example": "pnpm build && node example/index.js", 18 | "build": "pnpm clean && tsc", 19 | "clean": "rimraf dist", 20 | "format": "biome format --write", 21 | "lint": "biome check --fix", 22 | "lint:staged": "lint-staged", 23 | "changeset": "changeset", 24 | "changeset:version": "changeset version", 25 | "changeset:publish": "pnpm build && changeset publish", 26 | "prepare": "npx simple-git-hooks", 27 | "typecheck": "tsc --noEmit", 28 | "test": "vitest", 29 | "test:watch": "vitest --watch", 30 | "test:coverage": "vitest run --coverage", 31 | "generate:fixtures": "npx tsx scripts/generateFixtures.ts" 32 | }, 33 | "dependencies": { 34 | "hast-util-to-string": "~3.0.1", 35 | "rehype": "~13.0.2", 36 | "unified": "~11.0.5", 37 | "unist-util-visit": "~5.0.0" 38 | }, 39 | "devDependencies": { 40 | "@biomejs/biome": "1.9.4", 41 | "@changesets/changelog-github": "^0.5.0", 42 | "@changesets/cli": "^2.27.9", 43 | "@types/hast": "^3.0.4", 44 | "@types/node": "^22.9.0", 45 | "@vitest/coverage-v8": "2.1.5", 46 | "lint-staged": "^15.2.10", 47 | "rehype-minify-whitespace": "^6.0.2", 48 | "rehype-parse": "^9.0.1", 49 | "rehype-stringify": "^10.0.1", 50 | "remark-parse": "^11.0.0", 51 | "remark-rehype": "^11.1.1", 52 | "rimraf": "^6.0.1", 53 | "simple-git-hooks": "^2.11.1", 54 | "ts-node": "^10.9.2", 55 | "tslib": "^2.8.1", 56 | "typescript": "^5.6.3", 57 | "vitest": "^2.1.5" 58 | }, 59 | "peerDependencies": { 60 | "typescript": ">=5.0.4" 61 | }, 62 | "peerDependenciesMeta": { 63 | "typescript": { 64 | "optional": true 65 | } 66 | }, 67 | "keywords": [ 68 | "rehype", 69 | "rehype-plugin", 70 | "rehype-code-group", 71 | "rehype-code-tabs", 72 | "rehype-code-grouping", 73 | "rehype-code-group-tabs", 74 | "rehype-code-grouping-tabs", 75 | "rehype-tabs", 76 | "rehype-tab", 77 | "rehype-code-block", 78 | "rehype-code-group-block", 79 | "rehype-code-grouping-block", 80 | "rehype-code-grouping-tabs-block", 81 | "rehype-tabs-block", 82 | "rehype-tab-block", 83 | "rehype-code-grouping-tab-block" 84 | ], 85 | "author": "Sohab Sk", 86 | "license": "MIT", 87 | "repository": { 88 | "url": "https://github.com/ITZSHOAIB/rehype-code-group" 89 | }, 90 | "publishConfig": { 91 | "access": "public" 92 | }, 93 | "lint-staged": { 94 | "*": ["pnpm lint", "git add"] 95 | }, 96 | "simple-git-hooks": { 97 | "pre-commit": "pnpm typecheck && pnpm test:coverage && pnpm lint:staged" 98 | }, 99 | "packageManager": "pnpm@9.12.0", 100 | "engines": { 101 | "node": ">=20.0.0" 102 | }, 103 | "sideEffects": false 104 | } 105 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: false 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | hast-util-to-string: 12 | specifier: ~3.0.1 13 | version: 3.0.1 14 | rehype: 15 | specifier: ~13.0.2 16 | version: 13.0.2 17 | unified: 18 | specifier: ~11.0.5 19 | version: 11.0.5 20 | unist-util-visit: 21 | specifier: ~5.0.0 22 | version: 5.0.0 23 | devDependencies: 24 | '@biomejs/biome': 25 | specifier: 1.9.4 26 | version: 1.9.4 27 | '@changesets/changelog-github': 28 | specifier: ^0.5.0 29 | version: 0.5.1 30 | '@changesets/cli': 31 | specifier: ^2.27.9 32 | version: 2.28.1 33 | '@types/hast': 34 | specifier: ^3.0.4 35 | version: 3.0.4 36 | '@types/node': 37 | specifier: ^22.9.0 38 | version: 22.13.13 39 | '@vitest/coverage-v8': 40 | specifier: 2.1.5 41 | version: 2.1.5(vitest@2.1.5(@types/node@22.13.13)) 42 | lint-staged: 43 | specifier: ^15.2.10 44 | version: 15.5.0 45 | rehype-minify-whitespace: 46 | specifier: ^6.0.2 47 | version: 6.0.2 48 | rehype-parse: 49 | specifier: ^9.0.1 50 | version: 9.0.1 51 | rehype-stringify: 52 | specifier: ^10.0.1 53 | version: 10.0.1 54 | remark-parse: 55 | specifier: ^11.0.0 56 | version: 11.0.0 57 | remark-rehype: 58 | specifier: ^11.1.1 59 | version: 11.1.1 60 | rimraf: 61 | specifier: ^6.0.1 62 | version: 6.0.1 63 | simple-git-hooks: 64 | specifier: ^2.11.1 65 | version: 2.12.1 66 | ts-node: 67 | specifier: ^10.9.2 68 | version: 10.9.2(@types/node@22.13.13)(typescript@5.8.2) 69 | tslib: 70 | specifier: ^2.8.1 71 | version: 2.8.1 72 | typescript: 73 | specifier: ^5.6.3 74 | version: 5.8.2 75 | vitest: 76 | specifier: ^2.1.5 77 | version: 2.1.5(@types/node@22.13.13) 78 | 79 | packages: 80 | 81 | '@ampproject/remapping@2.3.0': 82 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 83 | engines: {node: '>=6.0.0'} 84 | 85 | '@babel/helper-string-parser@7.25.9': 86 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 87 | engines: {node: '>=6.9.0'} 88 | 89 | '@babel/helper-validator-identifier@7.25.9': 90 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 91 | engines: {node: '>=6.9.0'} 92 | 93 | '@babel/parser@7.26.2': 94 | resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} 95 | engines: {node: '>=6.0.0'} 96 | hasBin: true 97 | 98 | '@babel/runtime@7.26.9': 99 | resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} 100 | engines: {node: '>=6.9.0'} 101 | 102 | '@babel/types@7.26.0': 103 | resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} 104 | engines: {node: '>=6.9.0'} 105 | 106 | '@bcoe/v8-coverage@0.2.3': 107 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 108 | 109 | '@biomejs/biome@1.9.4': 110 | resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} 111 | engines: {node: '>=14.21.3'} 112 | hasBin: true 113 | 114 | '@biomejs/cli-darwin-arm64@1.9.4': 115 | resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} 116 | engines: {node: '>=14.21.3'} 117 | cpu: [arm64] 118 | os: [darwin] 119 | 120 | '@biomejs/cli-darwin-x64@1.9.4': 121 | resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} 122 | engines: {node: '>=14.21.3'} 123 | cpu: [x64] 124 | os: [darwin] 125 | 126 | '@biomejs/cli-linux-arm64-musl@1.9.4': 127 | resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} 128 | engines: {node: '>=14.21.3'} 129 | cpu: [arm64] 130 | os: [linux] 131 | 132 | '@biomejs/cli-linux-arm64@1.9.4': 133 | resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} 134 | engines: {node: '>=14.21.3'} 135 | cpu: [arm64] 136 | os: [linux] 137 | 138 | '@biomejs/cli-linux-x64-musl@1.9.4': 139 | resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} 140 | engines: {node: '>=14.21.3'} 141 | cpu: [x64] 142 | os: [linux] 143 | 144 | '@biomejs/cli-linux-x64@1.9.4': 145 | resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} 146 | engines: {node: '>=14.21.3'} 147 | cpu: [x64] 148 | os: [linux] 149 | 150 | '@biomejs/cli-win32-arm64@1.9.4': 151 | resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} 152 | engines: {node: '>=14.21.3'} 153 | cpu: [arm64] 154 | os: [win32] 155 | 156 | '@biomejs/cli-win32-x64@1.9.4': 157 | resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} 158 | engines: {node: '>=14.21.3'} 159 | cpu: [x64] 160 | os: [win32] 161 | 162 | '@changesets/apply-release-plan@7.0.10': 163 | resolution: {integrity: sha512-wNyeIJ3yDsVspYvHnEz1xQDq18D9ifed3lI+wxRQRK4pArUcuHgCTrHv0QRnnwjhVCQACxZ+CBih3wgOct6UXw==} 164 | 165 | '@changesets/assemble-release-plan@6.0.6': 166 | resolution: {integrity: sha512-Frkj8hWJ1FRZiY3kzVCKzS0N5mMwWKwmv9vpam7vt8rZjLL1JMthdh6pSDVSPumHPshTTkKZ0VtNbE0cJHZZUg==} 167 | 168 | '@changesets/changelog-git@0.2.1': 169 | resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} 170 | 171 | '@changesets/changelog-github@0.5.1': 172 | resolution: {integrity: sha512-BVuHtF+hrhUScSoHnJwTELB4/INQxVFc+P/Qdt20BLiBFIHFJDDUaGsZw+8fQeJTRP5hJZrzpt3oZWh0G19rAQ==} 173 | 174 | '@changesets/cli@2.28.1': 175 | resolution: {integrity: sha512-PiIyGRmSc6JddQJe/W1hRPjiN4VrMvb2VfQ6Uydy2punBioQrsxppyG5WafinKcW1mT0jOe/wU4k9Zy5ff21AA==} 176 | hasBin: true 177 | 178 | '@changesets/config@3.1.1': 179 | resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==} 180 | 181 | '@changesets/errors@0.2.0': 182 | resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} 183 | 184 | '@changesets/get-dependents-graph@2.1.3': 185 | resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} 186 | 187 | '@changesets/get-github-info@0.6.0': 188 | resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} 189 | 190 | '@changesets/get-release-plan@4.0.8': 191 | resolution: {integrity: sha512-MM4mq2+DQU1ZT7nqxnpveDMTkMBLnwNX44cX7NSxlXmr7f8hO6/S2MXNiXG54uf/0nYnefv0cfy4Czf/ZL/EKQ==} 192 | 193 | '@changesets/get-version-range-type@0.4.0': 194 | resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} 195 | 196 | '@changesets/git@3.0.2': 197 | resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==} 198 | 199 | '@changesets/logger@0.1.1': 200 | resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} 201 | 202 | '@changesets/parse@0.4.1': 203 | resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} 204 | 205 | '@changesets/pre@2.0.2': 206 | resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} 207 | 208 | '@changesets/read@0.6.3': 209 | resolution: {integrity: sha512-9H4p/OuJ3jXEUTjaVGdQEhBdqoT2cO5Ts95JTFsQyawmKzpL8FnIeJSyhTDPW1MBRDnwZlHFEM9SpPwJDY5wIg==} 210 | 211 | '@changesets/should-skip-package@0.1.2': 212 | resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} 213 | 214 | '@changesets/types@4.1.0': 215 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} 216 | 217 | '@changesets/types@6.1.0': 218 | resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} 219 | 220 | '@changesets/write@0.4.0': 221 | resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} 222 | 223 | '@cspotcode/source-map-support@0.8.1': 224 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 225 | engines: {node: '>=12'} 226 | 227 | '@esbuild/aix-ppc64@0.21.5': 228 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 229 | engines: {node: '>=12'} 230 | cpu: [ppc64] 231 | os: [aix] 232 | 233 | '@esbuild/android-arm64@0.21.5': 234 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 235 | engines: {node: '>=12'} 236 | cpu: [arm64] 237 | os: [android] 238 | 239 | '@esbuild/android-arm@0.21.5': 240 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 241 | engines: {node: '>=12'} 242 | cpu: [arm] 243 | os: [android] 244 | 245 | '@esbuild/android-x64@0.21.5': 246 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 247 | engines: {node: '>=12'} 248 | cpu: [x64] 249 | os: [android] 250 | 251 | '@esbuild/darwin-arm64@0.21.5': 252 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 253 | engines: {node: '>=12'} 254 | cpu: [arm64] 255 | os: [darwin] 256 | 257 | '@esbuild/darwin-x64@0.21.5': 258 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 259 | engines: {node: '>=12'} 260 | cpu: [x64] 261 | os: [darwin] 262 | 263 | '@esbuild/freebsd-arm64@0.21.5': 264 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 265 | engines: {node: '>=12'} 266 | cpu: [arm64] 267 | os: [freebsd] 268 | 269 | '@esbuild/freebsd-x64@0.21.5': 270 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 271 | engines: {node: '>=12'} 272 | cpu: [x64] 273 | os: [freebsd] 274 | 275 | '@esbuild/linux-arm64@0.21.5': 276 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 277 | engines: {node: '>=12'} 278 | cpu: [arm64] 279 | os: [linux] 280 | 281 | '@esbuild/linux-arm@0.21.5': 282 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 283 | engines: {node: '>=12'} 284 | cpu: [arm] 285 | os: [linux] 286 | 287 | '@esbuild/linux-ia32@0.21.5': 288 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 289 | engines: {node: '>=12'} 290 | cpu: [ia32] 291 | os: [linux] 292 | 293 | '@esbuild/linux-loong64@0.21.5': 294 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 295 | engines: {node: '>=12'} 296 | cpu: [loong64] 297 | os: [linux] 298 | 299 | '@esbuild/linux-mips64el@0.21.5': 300 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 301 | engines: {node: '>=12'} 302 | cpu: [mips64el] 303 | os: [linux] 304 | 305 | '@esbuild/linux-ppc64@0.21.5': 306 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 307 | engines: {node: '>=12'} 308 | cpu: [ppc64] 309 | os: [linux] 310 | 311 | '@esbuild/linux-riscv64@0.21.5': 312 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 313 | engines: {node: '>=12'} 314 | cpu: [riscv64] 315 | os: [linux] 316 | 317 | '@esbuild/linux-s390x@0.21.5': 318 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 319 | engines: {node: '>=12'} 320 | cpu: [s390x] 321 | os: [linux] 322 | 323 | '@esbuild/linux-x64@0.21.5': 324 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 325 | engines: {node: '>=12'} 326 | cpu: [x64] 327 | os: [linux] 328 | 329 | '@esbuild/netbsd-x64@0.21.5': 330 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 331 | engines: {node: '>=12'} 332 | cpu: [x64] 333 | os: [netbsd] 334 | 335 | '@esbuild/openbsd-x64@0.21.5': 336 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 337 | engines: {node: '>=12'} 338 | cpu: [x64] 339 | os: [openbsd] 340 | 341 | '@esbuild/sunos-x64@0.21.5': 342 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 343 | engines: {node: '>=12'} 344 | cpu: [x64] 345 | os: [sunos] 346 | 347 | '@esbuild/win32-arm64@0.21.5': 348 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 349 | engines: {node: '>=12'} 350 | cpu: [arm64] 351 | os: [win32] 352 | 353 | '@esbuild/win32-ia32@0.21.5': 354 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 355 | engines: {node: '>=12'} 356 | cpu: [ia32] 357 | os: [win32] 358 | 359 | '@esbuild/win32-x64@0.21.5': 360 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 361 | engines: {node: '>=12'} 362 | cpu: [x64] 363 | os: [win32] 364 | 365 | '@isaacs/cliui@8.0.2': 366 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 367 | engines: {node: '>=12'} 368 | 369 | '@istanbuljs/schema@0.1.3': 370 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 371 | engines: {node: '>=8'} 372 | 373 | '@jridgewell/gen-mapping@0.3.5': 374 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 375 | engines: {node: '>=6.0.0'} 376 | 377 | '@jridgewell/resolve-uri@3.1.2': 378 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 379 | engines: {node: '>=6.0.0'} 380 | 381 | '@jridgewell/set-array@1.2.1': 382 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 383 | engines: {node: '>=6.0.0'} 384 | 385 | '@jridgewell/sourcemap-codec@1.5.0': 386 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 387 | 388 | '@jridgewell/trace-mapping@0.3.25': 389 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 390 | 391 | '@jridgewell/trace-mapping@0.3.9': 392 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 393 | 394 | '@manypkg/find-root@1.1.0': 395 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} 396 | 397 | '@manypkg/get-packages@1.1.3': 398 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} 399 | 400 | '@nodelib/fs.scandir@2.1.5': 401 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 402 | engines: {node: '>= 8'} 403 | 404 | '@nodelib/fs.stat@2.0.5': 405 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 406 | engines: {node: '>= 8'} 407 | 408 | '@nodelib/fs.walk@1.2.8': 409 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 410 | engines: {node: '>= 8'} 411 | 412 | '@pkgjs/parseargs@0.11.0': 413 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 414 | engines: {node: '>=14'} 415 | 416 | '@rollup/rollup-android-arm-eabi@4.27.0': 417 | resolution: {integrity: sha512-e312hTjuM89YLqlcqEs7mSvwhxN5pgXqRobUob7Jsz1wDQlpAb2WTX4jzvrx5NrL1h2SE4fGdHSNyPxbLfzyeA==} 418 | cpu: [arm] 419 | os: [android] 420 | 421 | '@rollup/rollup-android-arm64@4.27.0': 422 | resolution: {integrity: sha512-cBUOny8GNXP++gN00Bo5L04I2oqUEFAU0OSDb+4hqp4/R/pZL/zlGzp7lJkhtPX52Rj+PIe0S8aOqhK4hztxHQ==} 423 | cpu: [arm64] 424 | os: [android] 425 | 426 | '@rollup/rollup-darwin-arm64@4.27.0': 427 | resolution: {integrity: sha512-aauK2M2ptFQQYdOqbKGYCg1LHlPbm6IxepSnHLLaMIGcd9YBiKRGl2+KtzQL/IkurP+b54EKBkvtZaWXijmzfQ==} 428 | cpu: [arm64] 429 | os: [darwin] 430 | 431 | '@rollup/rollup-darwin-x64@4.27.0': 432 | resolution: {integrity: sha512-VAjOnHUwpvxf3XT33sMpsLGKq24Rz1sTQhLuUicYrV9pxB4TNi0w11qAGPOyR+dQu/iZf88DmEmG0+2Gaqa1gg==} 433 | cpu: [x64] 434 | os: [darwin] 435 | 436 | '@rollup/rollup-freebsd-arm64@4.27.0': 437 | resolution: {integrity: sha512-I2eRlZG87gl6WxP6PvSB5bfFA1btE7tWnG6QAoEU/0Gr47f6KaxRwiRfBujHlzkuMPqtpTlSOW4aOEOyMtQqfg==} 438 | cpu: [arm64] 439 | os: [freebsd] 440 | 441 | '@rollup/rollup-freebsd-x64@4.27.0': 442 | resolution: {integrity: sha512-G05JNYFdjikD/2hJTf1gHdD5KjI2TotjiDn17amHtB5JgwrRF1EA9hJ3TRGIvT3zGXilNWWlR71R/2TT1pXRDg==} 443 | cpu: [x64] 444 | os: [freebsd] 445 | 446 | '@rollup/rollup-linux-arm-gnueabihf@4.27.0': 447 | resolution: {integrity: sha512-FMXxMZ7qnMULwgdmGSFVlOduAhFyqDPoK1A2Q8HBkzGYX9SMFU3ITKfLdIiCzTaaj/pt1OiEbpF2szUw6Kh++Q==} 448 | cpu: [arm] 449 | os: [linux] 450 | 451 | '@rollup/rollup-linux-arm-musleabihf@4.27.0': 452 | resolution: {integrity: sha512-0315TiPsJfOY+jAwEeqxcy9yVcAy/jg99GrMcd/L7CRESzi1vhyLPbnkDnz7giaEttSRf/d3llJYfoC+44Nl3A==} 453 | cpu: [arm] 454 | os: [linux] 455 | 456 | '@rollup/rollup-linux-arm64-gnu@4.27.0': 457 | resolution: {integrity: sha512-4zCKY5E9djPyHzvoCWIouFsuAvg+dk+rNia8lz1bjKpzKz02QvK4JPHyjcDT8CFR2J/aA98WccCirdDOy+VDWQ==} 458 | cpu: [arm64] 459 | os: [linux] 460 | 461 | '@rollup/rollup-linux-arm64-musl@4.27.0': 462 | resolution: {integrity: sha512-6St9rrPSLbYBbbJAClpU4gmnO7cdZCMMzx2MT0UCIIIevoLAmsCDOAG6t3J/RgN4CPUpdaGr/UnPqQTHZ4oDwA==} 463 | cpu: [arm64] 464 | os: [linux] 465 | 466 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.0': 467 | resolution: {integrity: sha512-dIBfp8NDrgvwUJxyqFv7501coIba+7xxBJy1gQEF0RGkIKa3Tq0Mh3sF9hmstDLtaMt7gL2aXsCNG9SCKyVVZg==} 468 | cpu: [ppc64] 469 | os: [linux] 470 | 471 | '@rollup/rollup-linux-riscv64-gnu@4.27.0': 472 | resolution: {integrity: sha512-Pu7xLHRy+5UjFCKR/vWsbFmiBYUC9993v99YoKWhAgK4VsdNuWHPs17NuCJEtVsZpYCNVPbRyBpQw58Ma8BmeA==} 473 | cpu: [riscv64] 474 | os: [linux] 475 | 476 | '@rollup/rollup-linux-s390x-gnu@4.27.0': 477 | resolution: {integrity: sha512-2Q9qQnk/eWdvXzzHl22y7tpDHREppFUh7N6cCs70HZEbQSgB7wd/2S/B05SSiyAiIn5BL+fYiASLds5bz0IQFw==} 478 | cpu: [s390x] 479 | os: [linux] 480 | 481 | '@rollup/rollup-linux-x64-gnu@4.27.0': 482 | resolution: {integrity: sha512-CNnqMZ4Yz0Ga0A75qux7DNChq0P9oAWn2S7yjZPRC+AaEF8Ysw5K/1lzT25/a3reJ4V2abcShIVG+tfZHb1UrQ==} 483 | cpu: [x64] 484 | os: [linux] 485 | 486 | '@rollup/rollup-linux-x64-musl@4.27.0': 487 | resolution: {integrity: sha512-dS1+eCbbao54XB+wLW6uuwRkChq4L0UfKhd3wvt6s+EN1rTIi24ee5Lk3HfRGq9J2jsRm12/AGKLA0kd82Sp/g==} 488 | cpu: [x64] 489 | os: [linux] 490 | 491 | '@rollup/rollup-win32-arm64-msvc@4.27.0': 492 | resolution: {integrity: sha512-VrYQHY5+Y71OU/uOSRE9lLhph16bbuWGrMwGwZDPxCUXUW5NgLA+K+q0kv7rafHRlnrsZSVcMOkZskzTNnR3ZQ==} 493 | cpu: [arm64] 494 | os: [win32] 495 | 496 | '@rollup/rollup-win32-ia32-msvc@4.27.0': 497 | resolution: {integrity: sha512-LCqk4Xi3e4GzLqaq+QDM7gP5DtJ/RgWMzV3U2brwp/vEz9RTA5YBgIDP69xYfrTXexes6xPsOIquy79+kLifiA==} 498 | cpu: [ia32] 499 | os: [win32] 500 | 501 | '@rollup/rollup-win32-x64-msvc@4.27.0': 502 | resolution: {integrity: sha512-dj2ZolfViR3chLWwSHID2mBzLLwYvXFldIplR6BSkdACXqAsrcmItKTff4h7enYB3Ugoh0v41WbxijE9HJb1Hw==} 503 | cpu: [x64] 504 | os: [win32] 505 | 506 | '@tsconfig/node10@1.0.11': 507 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} 508 | 509 | '@tsconfig/node12@1.0.11': 510 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 511 | 512 | '@tsconfig/node14@1.0.3': 513 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 514 | 515 | '@tsconfig/node16@1.0.4': 516 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 517 | 518 | '@types/debug@4.1.12': 519 | resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} 520 | 521 | '@types/estree@1.0.6': 522 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 523 | 524 | '@types/hast@3.0.4': 525 | resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} 526 | 527 | '@types/mdast@4.0.4': 528 | resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} 529 | 530 | '@types/ms@0.7.34': 531 | resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} 532 | 533 | '@types/node@12.20.55': 534 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} 535 | 536 | '@types/node@22.13.13': 537 | resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==} 538 | 539 | '@types/unist@3.0.3': 540 | resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} 541 | 542 | '@ungap/structured-clone@1.2.0': 543 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 544 | 545 | '@vitest/coverage-v8@2.1.5': 546 | resolution: {integrity: sha512-/RoopB7XGW7UEkUndRXF87A9CwkoZAJW01pj8/3pgmDVsjMH2IKy6H1A38po9tmUlwhSyYs0az82rbKd9Yaynw==} 547 | peerDependencies: 548 | '@vitest/browser': 2.1.5 549 | vitest: 2.1.5 550 | peerDependenciesMeta: 551 | '@vitest/browser': 552 | optional: true 553 | 554 | '@vitest/expect@2.1.5': 555 | resolution: {integrity: sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==} 556 | 557 | '@vitest/mocker@2.1.5': 558 | resolution: {integrity: sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==} 559 | peerDependencies: 560 | msw: ^2.4.9 561 | vite: ^5.0.0 562 | peerDependenciesMeta: 563 | msw: 564 | optional: true 565 | vite: 566 | optional: true 567 | 568 | '@vitest/pretty-format@2.1.5': 569 | resolution: {integrity: sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==} 570 | 571 | '@vitest/runner@2.1.5': 572 | resolution: {integrity: sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==} 573 | 574 | '@vitest/snapshot@2.1.5': 575 | resolution: {integrity: sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==} 576 | 577 | '@vitest/spy@2.1.5': 578 | resolution: {integrity: sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==} 579 | 580 | '@vitest/utils@2.1.5': 581 | resolution: {integrity: sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==} 582 | 583 | acorn-walk@8.3.4: 584 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 585 | engines: {node: '>=0.4.0'} 586 | 587 | acorn@8.14.0: 588 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 589 | engines: {node: '>=0.4.0'} 590 | hasBin: true 591 | 592 | ansi-colors@4.1.3: 593 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 594 | engines: {node: '>=6'} 595 | 596 | ansi-escapes@7.0.0: 597 | resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} 598 | engines: {node: '>=18'} 599 | 600 | ansi-regex@5.0.1: 601 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 602 | engines: {node: '>=8'} 603 | 604 | ansi-regex@6.1.0: 605 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 606 | engines: {node: '>=12'} 607 | 608 | ansi-styles@4.3.0: 609 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 610 | engines: {node: '>=8'} 611 | 612 | ansi-styles@6.2.1: 613 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 614 | engines: {node: '>=12'} 615 | 616 | arg@4.1.3: 617 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 618 | 619 | argparse@1.0.10: 620 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 621 | 622 | array-union@2.1.0: 623 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 624 | engines: {node: '>=8'} 625 | 626 | assertion-error@2.0.1: 627 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 628 | engines: {node: '>=12'} 629 | 630 | bail@2.0.2: 631 | resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} 632 | 633 | balanced-match@1.0.2: 634 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 635 | 636 | better-path-resolve@1.0.0: 637 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} 638 | engines: {node: '>=4'} 639 | 640 | brace-expansion@2.0.1: 641 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 642 | 643 | braces@3.0.3: 644 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 645 | engines: {node: '>=8'} 646 | 647 | cac@6.7.14: 648 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 649 | engines: {node: '>=8'} 650 | 651 | ccount@2.0.1: 652 | resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} 653 | 654 | chai@5.1.2: 655 | resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} 656 | engines: {node: '>=12'} 657 | 658 | chalk@5.4.1: 659 | resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} 660 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 661 | 662 | character-entities-html4@2.1.0: 663 | resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} 664 | 665 | character-entities-legacy@3.0.0: 666 | resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} 667 | 668 | character-entities@2.0.2: 669 | resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} 670 | 671 | chardet@0.7.0: 672 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 673 | 674 | check-error@2.1.1: 675 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 676 | engines: {node: '>= 16'} 677 | 678 | ci-info@3.9.0: 679 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 680 | engines: {node: '>=8'} 681 | 682 | cli-cursor@5.0.0: 683 | resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} 684 | engines: {node: '>=18'} 685 | 686 | cli-truncate@4.0.0: 687 | resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} 688 | engines: {node: '>=18'} 689 | 690 | color-convert@2.0.1: 691 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 692 | engines: {node: '>=7.0.0'} 693 | 694 | color-name@1.1.4: 695 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 696 | 697 | colorette@2.0.20: 698 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 699 | 700 | comma-separated-tokens@2.0.3: 701 | resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} 702 | 703 | commander@13.1.0: 704 | resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} 705 | engines: {node: '>=18'} 706 | 707 | create-require@1.1.1: 708 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 709 | 710 | cross-spawn@7.0.6: 711 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 712 | engines: {node: '>= 8'} 713 | 714 | dataloader@1.4.0: 715 | resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} 716 | 717 | debug@4.3.7: 718 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 719 | engines: {node: '>=6.0'} 720 | peerDependencies: 721 | supports-color: '*' 722 | peerDependenciesMeta: 723 | supports-color: 724 | optional: true 725 | 726 | debug@4.4.0: 727 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 728 | engines: {node: '>=6.0'} 729 | peerDependencies: 730 | supports-color: '*' 731 | peerDependenciesMeta: 732 | supports-color: 733 | optional: true 734 | 735 | decode-named-character-reference@1.0.2: 736 | resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} 737 | 738 | deep-eql@5.0.2: 739 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 740 | engines: {node: '>=6'} 741 | 742 | dequal@2.0.3: 743 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 744 | engines: {node: '>=6'} 745 | 746 | detect-indent@6.1.0: 747 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 748 | engines: {node: '>=8'} 749 | 750 | devlop@1.1.0: 751 | resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} 752 | 753 | diff@4.0.2: 754 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 755 | engines: {node: '>=0.3.1'} 756 | 757 | dir-glob@3.0.1: 758 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 759 | engines: {node: '>=8'} 760 | 761 | dotenv@8.6.0: 762 | resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} 763 | engines: {node: '>=10'} 764 | 765 | eastasianwidth@0.2.0: 766 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 767 | 768 | emoji-regex@10.4.0: 769 | resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} 770 | 771 | emoji-regex@8.0.0: 772 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 773 | 774 | emoji-regex@9.2.2: 775 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 776 | 777 | enquirer@2.4.1: 778 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 779 | engines: {node: '>=8.6'} 780 | 781 | entities@4.5.0: 782 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 783 | engines: {node: '>=0.12'} 784 | 785 | environment@1.1.0: 786 | resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} 787 | engines: {node: '>=18'} 788 | 789 | es-module-lexer@1.5.4: 790 | resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} 791 | 792 | esbuild@0.21.5: 793 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 794 | engines: {node: '>=12'} 795 | hasBin: true 796 | 797 | esprima@4.0.1: 798 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 799 | engines: {node: '>=4'} 800 | hasBin: true 801 | 802 | estree-walker@3.0.3: 803 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 804 | 805 | eventemitter3@5.0.1: 806 | resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 807 | 808 | execa@8.0.1: 809 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 810 | engines: {node: '>=16.17'} 811 | 812 | expect-type@1.1.0: 813 | resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} 814 | engines: {node: '>=12.0.0'} 815 | 816 | extend@3.0.2: 817 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} 818 | 819 | extendable-error@0.1.7: 820 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} 821 | 822 | external-editor@3.1.0: 823 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 824 | engines: {node: '>=4'} 825 | 826 | fast-glob@3.3.3: 827 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 828 | engines: {node: '>=8.6.0'} 829 | 830 | fastq@1.19.1: 831 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 832 | 833 | fill-range@7.1.1: 834 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 835 | engines: {node: '>=8'} 836 | 837 | find-up@4.1.0: 838 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 839 | engines: {node: '>=8'} 840 | 841 | foreground-child@3.3.0: 842 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 843 | engines: {node: '>=14'} 844 | 845 | fs-extra@7.0.1: 846 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} 847 | engines: {node: '>=6 <7 || >=8'} 848 | 849 | fs-extra@8.1.0: 850 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 851 | engines: {node: '>=6 <7 || >=8'} 852 | 853 | fsevents@2.3.3: 854 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 855 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 856 | os: [darwin] 857 | 858 | get-east-asian-width@1.3.0: 859 | resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} 860 | engines: {node: '>=18'} 861 | 862 | get-stream@8.0.1: 863 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 864 | engines: {node: '>=16'} 865 | 866 | glob-parent@5.1.2: 867 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 868 | engines: {node: '>= 6'} 869 | 870 | glob@10.4.5: 871 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 872 | hasBin: true 873 | 874 | glob@11.0.0: 875 | resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} 876 | engines: {node: 20 || >=22} 877 | hasBin: true 878 | 879 | globby@11.1.0: 880 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 881 | engines: {node: '>=10'} 882 | 883 | graceful-fs@4.2.11: 884 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 885 | 886 | has-flag@4.0.0: 887 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 888 | engines: {node: '>=8'} 889 | 890 | hast-util-embedded@3.0.0: 891 | resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} 892 | 893 | hast-util-from-html@2.0.3: 894 | resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} 895 | 896 | hast-util-from-parse5@8.0.1: 897 | resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} 898 | 899 | hast-util-is-element@3.0.0: 900 | resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} 901 | 902 | hast-util-minify-whitespace@1.0.1: 903 | resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} 904 | 905 | hast-util-parse-selector@4.0.0: 906 | resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} 907 | 908 | hast-util-to-html@9.0.3: 909 | resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} 910 | 911 | hast-util-to-string@3.0.1: 912 | resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} 913 | 914 | hast-util-whitespace@3.0.0: 915 | resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} 916 | 917 | hastscript@8.0.0: 918 | resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} 919 | 920 | html-escaper@2.0.2: 921 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 922 | 923 | html-void-elements@3.0.0: 924 | resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} 925 | 926 | human-id@4.1.1: 927 | resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} 928 | hasBin: true 929 | 930 | human-signals@5.0.0: 931 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 932 | engines: {node: '>=16.17.0'} 933 | 934 | iconv-lite@0.4.24: 935 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 936 | engines: {node: '>=0.10.0'} 937 | 938 | ignore@5.3.2: 939 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 940 | engines: {node: '>= 4'} 941 | 942 | is-extglob@2.1.1: 943 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 944 | engines: {node: '>=0.10.0'} 945 | 946 | is-fullwidth-code-point@3.0.0: 947 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 948 | engines: {node: '>=8'} 949 | 950 | is-fullwidth-code-point@4.0.0: 951 | resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} 952 | engines: {node: '>=12'} 953 | 954 | is-fullwidth-code-point@5.0.0: 955 | resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} 956 | engines: {node: '>=18'} 957 | 958 | is-glob@4.0.3: 959 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 960 | engines: {node: '>=0.10.0'} 961 | 962 | is-number@7.0.0: 963 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 964 | engines: {node: '>=0.12.0'} 965 | 966 | is-plain-obj@4.1.0: 967 | resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 968 | engines: {node: '>=12'} 969 | 970 | is-stream@3.0.0: 971 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 972 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 973 | 974 | is-subdir@1.2.0: 975 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} 976 | engines: {node: '>=4'} 977 | 978 | is-windows@1.0.2: 979 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} 980 | engines: {node: '>=0.10.0'} 981 | 982 | isexe@2.0.0: 983 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 984 | 985 | istanbul-lib-coverage@3.2.2: 986 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 987 | engines: {node: '>=8'} 988 | 989 | istanbul-lib-report@3.0.1: 990 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 991 | engines: {node: '>=10'} 992 | 993 | istanbul-lib-source-maps@5.0.6: 994 | resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} 995 | engines: {node: '>=10'} 996 | 997 | istanbul-reports@3.1.7: 998 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 999 | engines: {node: '>=8'} 1000 | 1001 | jackspeak@3.4.3: 1002 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1003 | 1004 | jackspeak@4.0.2: 1005 | resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} 1006 | engines: {node: 20 || >=22} 1007 | 1008 | js-yaml@3.14.1: 1009 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1010 | hasBin: true 1011 | 1012 | jsonfile@4.0.0: 1013 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 1014 | 1015 | lilconfig@3.1.3: 1016 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1017 | engines: {node: '>=14'} 1018 | 1019 | lint-staged@15.5.0: 1020 | resolution: {integrity: sha512-WyCzSbfYGhK7cU+UuDDkzUiytbfbi0ZdPy2orwtM75P3WTtQBzmG40cCxIa8Ii2+XjfxzLH6Be46tUfWS85Xfg==} 1021 | engines: {node: '>=18.12.0'} 1022 | hasBin: true 1023 | 1024 | listr2@8.2.5: 1025 | resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} 1026 | engines: {node: '>=18.0.0'} 1027 | 1028 | locate-path@5.0.0: 1029 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1030 | engines: {node: '>=8'} 1031 | 1032 | lodash.startcase@4.4.0: 1033 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} 1034 | 1035 | log-update@6.1.0: 1036 | resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} 1037 | engines: {node: '>=18'} 1038 | 1039 | loupe@3.1.2: 1040 | resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} 1041 | 1042 | lru-cache@10.4.3: 1043 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1044 | 1045 | lru-cache@11.0.2: 1046 | resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} 1047 | engines: {node: 20 || >=22} 1048 | 1049 | magic-string@0.30.12: 1050 | resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} 1051 | 1052 | magicast@0.3.5: 1053 | resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} 1054 | 1055 | make-dir@4.0.0: 1056 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 1057 | engines: {node: '>=10'} 1058 | 1059 | make-error@1.3.6: 1060 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1061 | 1062 | mdast-util-from-markdown@2.0.2: 1063 | resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} 1064 | 1065 | mdast-util-to-hast@13.2.0: 1066 | resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} 1067 | 1068 | mdast-util-to-string@4.0.0: 1069 | resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} 1070 | 1071 | merge-stream@2.0.0: 1072 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1073 | 1074 | merge2@1.4.1: 1075 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1076 | engines: {node: '>= 8'} 1077 | 1078 | micromark-core-commonmark@2.0.2: 1079 | resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==} 1080 | 1081 | micromark-factory-destination@2.0.1: 1082 | resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} 1083 | 1084 | micromark-factory-label@2.0.1: 1085 | resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} 1086 | 1087 | micromark-factory-space@2.0.1: 1088 | resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} 1089 | 1090 | micromark-factory-title@2.0.1: 1091 | resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} 1092 | 1093 | micromark-factory-whitespace@2.0.1: 1094 | resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} 1095 | 1096 | micromark-util-character@2.1.0: 1097 | resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} 1098 | 1099 | micromark-util-chunked@2.0.1: 1100 | resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} 1101 | 1102 | micromark-util-classify-character@2.0.1: 1103 | resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} 1104 | 1105 | micromark-util-combine-extensions@2.0.1: 1106 | resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} 1107 | 1108 | micromark-util-decode-numeric-character-reference@2.0.2: 1109 | resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} 1110 | 1111 | micromark-util-decode-string@2.0.1: 1112 | resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} 1113 | 1114 | micromark-util-encode@2.0.0: 1115 | resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} 1116 | 1117 | micromark-util-html-tag-name@2.0.1: 1118 | resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} 1119 | 1120 | micromark-util-normalize-identifier@2.0.1: 1121 | resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} 1122 | 1123 | micromark-util-resolve-all@2.0.1: 1124 | resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} 1125 | 1126 | micromark-util-sanitize-uri@2.0.0: 1127 | resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} 1128 | 1129 | micromark-util-subtokenize@2.0.2: 1130 | resolution: {integrity: sha512-xKxhkB62vwHUuuxHe9Xqty3UaAsizV2YKq5OV344u3hFBbf8zIYrhYOWhAQb94MtMPkjTOzzjJ/hid9/dR5vFA==} 1131 | 1132 | micromark-util-symbol@2.0.0: 1133 | resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} 1134 | 1135 | micromark-util-types@2.0.0: 1136 | resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} 1137 | 1138 | micromark@4.0.1: 1139 | resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==} 1140 | 1141 | micromatch@4.0.8: 1142 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1143 | engines: {node: '>=8.6'} 1144 | 1145 | mimic-fn@4.0.0: 1146 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1147 | engines: {node: '>=12'} 1148 | 1149 | mimic-function@5.0.1: 1150 | resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} 1151 | engines: {node: '>=18'} 1152 | 1153 | minimatch@10.0.1: 1154 | resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} 1155 | engines: {node: 20 || >=22} 1156 | 1157 | minimatch@9.0.5: 1158 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1159 | engines: {node: '>=16 || 14 >=14.17'} 1160 | 1161 | minipass@7.1.2: 1162 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1163 | engines: {node: '>=16 || 14 >=14.17'} 1164 | 1165 | mri@1.2.0: 1166 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1167 | engines: {node: '>=4'} 1168 | 1169 | ms@2.1.3: 1170 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1171 | 1172 | nanoid@3.3.7: 1173 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1174 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1175 | hasBin: true 1176 | 1177 | node-fetch@2.7.0: 1178 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1179 | engines: {node: 4.x || >=6.0.0} 1180 | peerDependencies: 1181 | encoding: ^0.1.0 1182 | peerDependenciesMeta: 1183 | encoding: 1184 | optional: true 1185 | 1186 | npm-run-path@5.3.0: 1187 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 1188 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1189 | 1190 | onetime@6.0.0: 1191 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1192 | engines: {node: '>=12'} 1193 | 1194 | onetime@7.0.0: 1195 | resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} 1196 | engines: {node: '>=18'} 1197 | 1198 | os-tmpdir@1.0.2: 1199 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 1200 | engines: {node: '>=0.10.0'} 1201 | 1202 | outdent@0.5.0: 1203 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} 1204 | 1205 | p-filter@2.1.0: 1206 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} 1207 | engines: {node: '>=8'} 1208 | 1209 | p-limit@2.3.0: 1210 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1211 | engines: {node: '>=6'} 1212 | 1213 | p-locate@4.1.0: 1214 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1215 | engines: {node: '>=8'} 1216 | 1217 | p-map@2.1.0: 1218 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} 1219 | engines: {node: '>=6'} 1220 | 1221 | p-try@2.2.0: 1222 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1223 | engines: {node: '>=6'} 1224 | 1225 | package-json-from-dist@1.0.1: 1226 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1227 | 1228 | package-manager-detector@0.2.11: 1229 | resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} 1230 | 1231 | parse5@7.2.1: 1232 | resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} 1233 | 1234 | path-exists@4.0.0: 1235 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1236 | engines: {node: '>=8'} 1237 | 1238 | path-key@3.1.1: 1239 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1240 | engines: {node: '>=8'} 1241 | 1242 | path-key@4.0.0: 1243 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1244 | engines: {node: '>=12'} 1245 | 1246 | path-scurry@1.11.1: 1247 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1248 | engines: {node: '>=16 || 14 >=14.18'} 1249 | 1250 | path-scurry@2.0.0: 1251 | resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} 1252 | engines: {node: 20 || >=22} 1253 | 1254 | path-type@4.0.0: 1255 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1256 | engines: {node: '>=8'} 1257 | 1258 | pathe@1.1.2: 1259 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 1260 | 1261 | pathval@2.0.0: 1262 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 1263 | engines: {node: '>= 14.16'} 1264 | 1265 | picocolors@1.1.1: 1266 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1267 | 1268 | picomatch@2.3.1: 1269 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1270 | engines: {node: '>=8.6'} 1271 | 1272 | pidtree@0.6.0: 1273 | resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} 1274 | engines: {node: '>=0.10'} 1275 | hasBin: true 1276 | 1277 | pify@4.0.1: 1278 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1279 | engines: {node: '>=6'} 1280 | 1281 | postcss@8.4.49: 1282 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 1283 | engines: {node: ^10 || ^12 || >=14} 1284 | 1285 | prettier@2.8.8: 1286 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 1287 | engines: {node: '>=10.13.0'} 1288 | hasBin: true 1289 | 1290 | property-information@6.5.0: 1291 | resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} 1292 | 1293 | quansync@0.2.8: 1294 | resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==} 1295 | 1296 | queue-microtask@1.2.3: 1297 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1298 | 1299 | read-yaml-file@1.1.0: 1300 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} 1301 | engines: {node: '>=6'} 1302 | 1303 | regenerator-runtime@0.14.1: 1304 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1305 | 1306 | rehype-minify-whitespace@6.0.2: 1307 | resolution: {integrity: sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==} 1308 | 1309 | rehype-parse@9.0.1: 1310 | resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} 1311 | 1312 | rehype-stringify@10.0.1: 1313 | resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} 1314 | 1315 | rehype@13.0.2: 1316 | resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} 1317 | 1318 | remark-parse@11.0.0: 1319 | resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} 1320 | 1321 | remark-rehype@11.1.1: 1322 | resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} 1323 | 1324 | resolve-from@5.0.0: 1325 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1326 | engines: {node: '>=8'} 1327 | 1328 | restore-cursor@5.1.0: 1329 | resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} 1330 | engines: {node: '>=18'} 1331 | 1332 | reusify@1.1.0: 1333 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1334 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1335 | 1336 | rfdc@1.4.1: 1337 | resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} 1338 | 1339 | rimraf@6.0.1: 1340 | resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} 1341 | engines: {node: 20 || >=22} 1342 | hasBin: true 1343 | 1344 | rollup@4.27.0: 1345 | resolution: {integrity: sha512-nrOD/RrnAMssruS7bPa7MYpEuH6tUpOa43NLtxQiLKem0An8HZyXun5Ndig6JzbkJoIbaKkt85V67VCaQ59GyA==} 1346 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1347 | hasBin: true 1348 | 1349 | run-parallel@1.2.0: 1350 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1351 | 1352 | safer-buffer@2.1.2: 1353 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1354 | 1355 | semver@7.7.1: 1356 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1357 | engines: {node: '>=10'} 1358 | hasBin: true 1359 | 1360 | shebang-command@2.0.0: 1361 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1362 | engines: {node: '>=8'} 1363 | 1364 | shebang-regex@3.0.0: 1365 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1366 | engines: {node: '>=8'} 1367 | 1368 | siginfo@2.0.0: 1369 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1370 | 1371 | signal-exit@4.1.0: 1372 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1373 | engines: {node: '>=14'} 1374 | 1375 | simple-git-hooks@2.12.1: 1376 | resolution: {integrity: sha512-NB3V4XyCOrWTIhjh85DyEoVlM3adHWwqQXKYHmuegy/108bJPP6YxuPGm4ZKBq1+GVKRbKJuzNY//09cMJYp+A==} 1377 | hasBin: true 1378 | 1379 | slash@3.0.0: 1380 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1381 | engines: {node: '>=8'} 1382 | 1383 | slice-ansi@5.0.0: 1384 | resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} 1385 | engines: {node: '>=12'} 1386 | 1387 | slice-ansi@7.1.0: 1388 | resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} 1389 | engines: {node: '>=18'} 1390 | 1391 | source-map-js@1.2.1: 1392 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1393 | engines: {node: '>=0.10.0'} 1394 | 1395 | space-separated-tokens@2.0.2: 1396 | resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} 1397 | 1398 | spawndamnit@3.0.1: 1399 | resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} 1400 | 1401 | sprintf-js@1.0.3: 1402 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1403 | 1404 | stackback@0.0.2: 1405 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1406 | 1407 | std-env@3.8.0: 1408 | resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} 1409 | 1410 | string-argv@0.3.2: 1411 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 1412 | engines: {node: '>=0.6.19'} 1413 | 1414 | string-width@4.2.3: 1415 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1416 | engines: {node: '>=8'} 1417 | 1418 | string-width@5.1.2: 1419 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1420 | engines: {node: '>=12'} 1421 | 1422 | string-width@7.2.0: 1423 | resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} 1424 | engines: {node: '>=18'} 1425 | 1426 | stringify-entities@4.0.4: 1427 | resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} 1428 | 1429 | strip-ansi@6.0.1: 1430 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1431 | engines: {node: '>=8'} 1432 | 1433 | strip-ansi@7.1.0: 1434 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1435 | engines: {node: '>=12'} 1436 | 1437 | strip-bom@3.0.0: 1438 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1439 | engines: {node: '>=4'} 1440 | 1441 | strip-final-newline@3.0.0: 1442 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 1443 | engines: {node: '>=12'} 1444 | 1445 | supports-color@7.2.0: 1446 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1447 | engines: {node: '>=8'} 1448 | 1449 | term-size@2.2.1: 1450 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} 1451 | engines: {node: '>=8'} 1452 | 1453 | test-exclude@7.0.1: 1454 | resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} 1455 | engines: {node: '>=18'} 1456 | 1457 | tinybench@2.9.0: 1458 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1459 | 1460 | tinyexec@0.3.1: 1461 | resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} 1462 | 1463 | tinypool@1.0.2: 1464 | resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} 1465 | engines: {node: ^18.0.0 || >=20.0.0} 1466 | 1467 | tinyrainbow@1.2.0: 1468 | resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} 1469 | engines: {node: '>=14.0.0'} 1470 | 1471 | tinyspy@3.0.2: 1472 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 1473 | engines: {node: '>=14.0.0'} 1474 | 1475 | tmp@0.0.33: 1476 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 1477 | engines: {node: '>=0.6.0'} 1478 | 1479 | to-regex-range@5.0.1: 1480 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1481 | engines: {node: '>=8.0'} 1482 | 1483 | tr46@0.0.3: 1484 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1485 | 1486 | trim-lines@3.0.1: 1487 | resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} 1488 | 1489 | trough@2.2.0: 1490 | resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} 1491 | 1492 | ts-node@10.9.2: 1493 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} 1494 | hasBin: true 1495 | peerDependencies: 1496 | '@swc/core': '>=1.2.50' 1497 | '@swc/wasm': '>=1.2.50' 1498 | '@types/node': '*' 1499 | typescript: '>=2.7' 1500 | peerDependenciesMeta: 1501 | '@swc/core': 1502 | optional: true 1503 | '@swc/wasm': 1504 | optional: true 1505 | 1506 | tslib@2.8.1: 1507 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1508 | 1509 | typescript@5.8.2: 1510 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} 1511 | engines: {node: '>=14.17'} 1512 | hasBin: true 1513 | 1514 | undici-types@6.20.0: 1515 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1516 | 1517 | unified@11.0.5: 1518 | resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} 1519 | 1520 | unist-util-is@6.0.0: 1521 | resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} 1522 | 1523 | unist-util-position@5.0.0: 1524 | resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} 1525 | 1526 | unist-util-stringify-position@4.0.0: 1527 | resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} 1528 | 1529 | unist-util-visit-parents@6.0.1: 1530 | resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} 1531 | 1532 | unist-util-visit@5.0.0: 1533 | resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} 1534 | 1535 | universalify@0.1.2: 1536 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 1537 | engines: {node: '>= 4.0.0'} 1538 | 1539 | v8-compile-cache-lib@3.0.1: 1540 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 1541 | 1542 | vfile-location@5.0.3: 1543 | resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} 1544 | 1545 | vfile-message@4.0.2: 1546 | resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} 1547 | 1548 | vfile@6.0.3: 1549 | resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} 1550 | 1551 | vite-node@2.1.5: 1552 | resolution: {integrity: sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==} 1553 | engines: {node: ^18.0.0 || >=20.0.0} 1554 | hasBin: true 1555 | 1556 | vite@5.4.11: 1557 | resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} 1558 | engines: {node: ^18.0.0 || >=20.0.0} 1559 | hasBin: true 1560 | peerDependencies: 1561 | '@types/node': ^18.0.0 || >=20.0.0 1562 | less: '*' 1563 | lightningcss: ^1.21.0 1564 | sass: '*' 1565 | sass-embedded: '*' 1566 | stylus: '*' 1567 | sugarss: '*' 1568 | terser: ^5.4.0 1569 | peerDependenciesMeta: 1570 | '@types/node': 1571 | optional: true 1572 | less: 1573 | optional: true 1574 | lightningcss: 1575 | optional: true 1576 | sass: 1577 | optional: true 1578 | sass-embedded: 1579 | optional: true 1580 | stylus: 1581 | optional: true 1582 | sugarss: 1583 | optional: true 1584 | terser: 1585 | optional: true 1586 | 1587 | vitest@2.1.5: 1588 | resolution: {integrity: sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==} 1589 | engines: {node: ^18.0.0 || >=20.0.0} 1590 | hasBin: true 1591 | peerDependencies: 1592 | '@edge-runtime/vm': '*' 1593 | '@types/node': ^18.0.0 || >=20.0.0 1594 | '@vitest/browser': 2.1.5 1595 | '@vitest/ui': 2.1.5 1596 | happy-dom: '*' 1597 | jsdom: '*' 1598 | peerDependenciesMeta: 1599 | '@edge-runtime/vm': 1600 | optional: true 1601 | '@types/node': 1602 | optional: true 1603 | '@vitest/browser': 1604 | optional: true 1605 | '@vitest/ui': 1606 | optional: true 1607 | happy-dom: 1608 | optional: true 1609 | jsdom: 1610 | optional: true 1611 | 1612 | web-namespaces@2.0.1: 1613 | resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} 1614 | 1615 | webidl-conversions@3.0.1: 1616 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1617 | 1618 | whatwg-url@5.0.0: 1619 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1620 | 1621 | which@2.0.2: 1622 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1623 | engines: {node: '>= 8'} 1624 | hasBin: true 1625 | 1626 | why-is-node-running@2.3.0: 1627 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1628 | engines: {node: '>=8'} 1629 | hasBin: true 1630 | 1631 | wrap-ansi@7.0.0: 1632 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1633 | engines: {node: '>=10'} 1634 | 1635 | wrap-ansi@8.1.0: 1636 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1637 | engines: {node: '>=12'} 1638 | 1639 | wrap-ansi@9.0.0: 1640 | resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} 1641 | engines: {node: '>=18'} 1642 | 1643 | yaml@2.7.0: 1644 | resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} 1645 | engines: {node: '>= 14'} 1646 | hasBin: true 1647 | 1648 | yn@3.1.1: 1649 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 1650 | engines: {node: '>=6'} 1651 | 1652 | zwitch@2.0.4: 1653 | resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} 1654 | 1655 | snapshots: 1656 | 1657 | '@ampproject/remapping@2.3.0': 1658 | dependencies: 1659 | '@jridgewell/gen-mapping': 0.3.5 1660 | '@jridgewell/trace-mapping': 0.3.25 1661 | 1662 | '@babel/helper-string-parser@7.25.9': {} 1663 | 1664 | '@babel/helper-validator-identifier@7.25.9': {} 1665 | 1666 | '@babel/parser@7.26.2': 1667 | dependencies: 1668 | '@babel/types': 7.26.0 1669 | 1670 | '@babel/runtime@7.26.9': 1671 | dependencies: 1672 | regenerator-runtime: 0.14.1 1673 | 1674 | '@babel/types@7.26.0': 1675 | dependencies: 1676 | '@babel/helper-string-parser': 7.25.9 1677 | '@babel/helper-validator-identifier': 7.25.9 1678 | 1679 | '@bcoe/v8-coverage@0.2.3': {} 1680 | 1681 | '@biomejs/biome@1.9.4': 1682 | optionalDependencies: 1683 | '@biomejs/cli-darwin-arm64': 1.9.4 1684 | '@biomejs/cli-darwin-x64': 1.9.4 1685 | '@biomejs/cli-linux-arm64': 1.9.4 1686 | '@biomejs/cli-linux-arm64-musl': 1.9.4 1687 | '@biomejs/cli-linux-x64': 1.9.4 1688 | '@biomejs/cli-linux-x64-musl': 1.9.4 1689 | '@biomejs/cli-win32-arm64': 1.9.4 1690 | '@biomejs/cli-win32-x64': 1.9.4 1691 | 1692 | '@biomejs/cli-darwin-arm64@1.9.4': 1693 | optional: true 1694 | 1695 | '@biomejs/cli-darwin-x64@1.9.4': 1696 | optional: true 1697 | 1698 | '@biomejs/cli-linux-arm64-musl@1.9.4': 1699 | optional: true 1700 | 1701 | '@biomejs/cli-linux-arm64@1.9.4': 1702 | optional: true 1703 | 1704 | '@biomejs/cli-linux-x64-musl@1.9.4': 1705 | optional: true 1706 | 1707 | '@biomejs/cli-linux-x64@1.9.4': 1708 | optional: true 1709 | 1710 | '@biomejs/cli-win32-arm64@1.9.4': 1711 | optional: true 1712 | 1713 | '@biomejs/cli-win32-x64@1.9.4': 1714 | optional: true 1715 | 1716 | '@changesets/apply-release-plan@7.0.10': 1717 | dependencies: 1718 | '@changesets/config': 3.1.1 1719 | '@changesets/get-version-range-type': 0.4.0 1720 | '@changesets/git': 3.0.2 1721 | '@changesets/should-skip-package': 0.1.2 1722 | '@changesets/types': 6.1.0 1723 | '@manypkg/get-packages': 1.1.3 1724 | detect-indent: 6.1.0 1725 | fs-extra: 7.0.1 1726 | lodash.startcase: 4.4.0 1727 | outdent: 0.5.0 1728 | prettier: 2.8.8 1729 | resolve-from: 5.0.0 1730 | semver: 7.7.1 1731 | 1732 | '@changesets/assemble-release-plan@6.0.6': 1733 | dependencies: 1734 | '@changesets/errors': 0.2.0 1735 | '@changesets/get-dependents-graph': 2.1.3 1736 | '@changesets/should-skip-package': 0.1.2 1737 | '@changesets/types': 6.1.0 1738 | '@manypkg/get-packages': 1.1.3 1739 | semver: 7.7.1 1740 | 1741 | '@changesets/changelog-git@0.2.1': 1742 | dependencies: 1743 | '@changesets/types': 6.1.0 1744 | 1745 | '@changesets/changelog-github@0.5.1': 1746 | dependencies: 1747 | '@changesets/get-github-info': 0.6.0 1748 | '@changesets/types': 6.1.0 1749 | dotenv: 8.6.0 1750 | transitivePeerDependencies: 1751 | - encoding 1752 | 1753 | '@changesets/cli@2.28.1': 1754 | dependencies: 1755 | '@changesets/apply-release-plan': 7.0.10 1756 | '@changesets/assemble-release-plan': 6.0.6 1757 | '@changesets/changelog-git': 0.2.1 1758 | '@changesets/config': 3.1.1 1759 | '@changesets/errors': 0.2.0 1760 | '@changesets/get-dependents-graph': 2.1.3 1761 | '@changesets/get-release-plan': 4.0.8 1762 | '@changesets/git': 3.0.2 1763 | '@changesets/logger': 0.1.1 1764 | '@changesets/pre': 2.0.2 1765 | '@changesets/read': 0.6.3 1766 | '@changesets/should-skip-package': 0.1.2 1767 | '@changesets/types': 6.1.0 1768 | '@changesets/write': 0.4.0 1769 | '@manypkg/get-packages': 1.1.3 1770 | ansi-colors: 4.1.3 1771 | ci-info: 3.9.0 1772 | enquirer: 2.4.1 1773 | external-editor: 3.1.0 1774 | fs-extra: 7.0.1 1775 | mri: 1.2.0 1776 | p-limit: 2.3.0 1777 | package-manager-detector: 0.2.11 1778 | picocolors: 1.1.1 1779 | resolve-from: 5.0.0 1780 | semver: 7.7.1 1781 | spawndamnit: 3.0.1 1782 | term-size: 2.2.1 1783 | 1784 | '@changesets/config@3.1.1': 1785 | dependencies: 1786 | '@changesets/errors': 0.2.0 1787 | '@changesets/get-dependents-graph': 2.1.3 1788 | '@changesets/logger': 0.1.1 1789 | '@changesets/types': 6.1.0 1790 | '@manypkg/get-packages': 1.1.3 1791 | fs-extra: 7.0.1 1792 | micromatch: 4.0.8 1793 | 1794 | '@changesets/errors@0.2.0': 1795 | dependencies: 1796 | extendable-error: 0.1.7 1797 | 1798 | '@changesets/get-dependents-graph@2.1.3': 1799 | dependencies: 1800 | '@changesets/types': 6.1.0 1801 | '@manypkg/get-packages': 1.1.3 1802 | picocolors: 1.1.1 1803 | semver: 7.7.1 1804 | 1805 | '@changesets/get-github-info@0.6.0': 1806 | dependencies: 1807 | dataloader: 1.4.0 1808 | node-fetch: 2.7.0 1809 | transitivePeerDependencies: 1810 | - encoding 1811 | 1812 | '@changesets/get-release-plan@4.0.8': 1813 | dependencies: 1814 | '@changesets/assemble-release-plan': 6.0.6 1815 | '@changesets/config': 3.1.1 1816 | '@changesets/pre': 2.0.2 1817 | '@changesets/read': 0.6.3 1818 | '@changesets/types': 6.1.0 1819 | '@manypkg/get-packages': 1.1.3 1820 | 1821 | '@changesets/get-version-range-type@0.4.0': {} 1822 | 1823 | '@changesets/git@3.0.2': 1824 | dependencies: 1825 | '@changesets/errors': 0.2.0 1826 | '@manypkg/get-packages': 1.1.3 1827 | is-subdir: 1.2.0 1828 | micromatch: 4.0.8 1829 | spawndamnit: 3.0.1 1830 | 1831 | '@changesets/logger@0.1.1': 1832 | dependencies: 1833 | picocolors: 1.1.1 1834 | 1835 | '@changesets/parse@0.4.1': 1836 | dependencies: 1837 | '@changesets/types': 6.1.0 1838 | js-yaml: 3.14.1 1839 | 1840 | '@changesets/pre@2.0.2': 1841 | dependencies: 1842 | '@changesets/errors': 0.2.0 1843 | '@changesets/types': 6.1.0 1844 | '@manypkg/get-packages': 1.1.3 1845 | fs-extra: 7.0.1 1846 | 1847 | '@changesets/read@0.6.3': 1848 | dependencies: 1849 | '@changesets/git': 3.0.2 1850 | '@changesets/logger': 0.1.1 1851 | '@changesets/parse': 0.4.1 1852 | '@changesets/types': 6.1.0 1853 | fs-extra: 7.0.1 1854 | p-filter: 2.1.0 1855 | picocolors: 1.1.1 1856 | 1857 | '@changesets/should-skip-package@0.1.2': 1858 | dependencies: 1859 | '@changesets/types': 6.1.0 1860 | '@manypkg/get-packages': 1.1.3 1861 | 1862 | '@changesets/types@4.1.0': {} 1863 | 1864 | '@changesets/types@6.1.0': {} 1865 | 1866 | '@changesets/write@0.4.0': 1867 | dependencies: 1868 | '@changesets/types': 6.1.0 1869 | fs-extra: 7.0.1 1870 | human-id: 4.1.1 1871 | prettier: 2.8.8 1872 | 1873 | '@cspotcode/source-map-support@0.8.1': 1874 | dependencies: 1875 | '@jridgewell/trace-mapping': 0.3.9 1876 | 1877 | '@esbuild/aix-ppc64@0.21.5': 1878 | optional: true 1879 | 1880 | '@esbuild/android-arm64@0.21.5': 1881 | optional: true 1882 | 1883 | '@esbuild/android-arm@0.21.5': 1884 | optional: true 1885 | 1886 | '@esbuild/android-x64@0.21.5': 1887 | optional: true 1888 | 1889 | '@esbuild/darwin-arm64@0.21.5': 1890 | optional: true 1891 | 1892 | '@esbuild/darwin-x64@0.21.5': 1893 | optional: true 1894 | 1895 | '@esbuild/freebsd-arm64@0.21.5': 1896 | optional: true 1897 | 1898 | '@esbuild/freebsd-x64@0.21.5': 1899 | optional: true 1900 | 1901 | '@esbuild/linux-arm64@0.21.5': 1902 | optional: true 1903 | 1904 | '@esbuild/linux-arm@0.21.5': 1905 | optional: true 1906 | 1907 | '@esbuild/linux-ia32@0.21.5': 1908 | optional: true 1909 | 1910 | '@esbuild/linux-loong64@0.21.5': 1911 | optional: true 1912 | 1913 | '@esbuild/linux-mips64el@0.21.5': 1914 | optional: true 1915 | 1916 | '@esbuild/linux-ppc64@0.21.5': 1917 | optional: true 1918 | 1919 | '@esbuild/linux-riscv64@0.21.5': 1920 | optional: true 1921 | 1922 | '@esbuild/linux-s390x@0.21.5': 1923 | optional: true 1924 | 1925 | '@esbuild/linux-x64@0.21.5': 1926 | optional: true 1927 | 1928 | '@esbuild/netbsd-x64@0.21.5': 1929 | optional: true 1930 | 1931 | '@esbuild/openbsd-x64@0.21.5': 1932 | optional: true 1933 | 1934 | '@esbuild/sunos-x64@0.21.5': 1935 | optional: true 1936 | 1937 | '@esbuild/win32-arm64@0.21.5': 1938 | optional: true 1939 | 1940 | '@esbuild/win32-ia32@0.21.5': 1941 | optional: true 1942 | 1943 | '@esbuild/win32-x64@0.21.5': 1944 | optional: true 1945 | 1946 | '@isaacs/cliui@8.0.2': 1947 | dependencies: 1948 | string-width: 5.1.2 1949 | string-width-cjs: string-width@4.2.3 1950 | strip-ansi: 7.1.0 1951 | strip-ansi-cjs: strip-ansi@6.0.1 1952 | wrap-ansi: 8.1.0 1953 | wrap-ansi-cjs: wrap-ansi@7.0.0 1954 | 1955 | '@istanbuljs/schema@0.1.3': {} 1956 | 1957 | '@jridgewell/gen-mapping@0.3.5': 1958 | dependencies: 1959 | '@jridgewell/set-array': 1.2.1 1960 | '@jridgewell/sourcemap-codec': 1.5.0 1961 | '@jridgewell/trace-mapping': 0.3.25 1962 | 1963 | '@jridgewell/resolve-uri@3.1.2': {} 1964 | 1965 | '@jridgewell/set-array@1.2.1': {} 1966 | 1967 | '@jridgewell/sourcemap-codec@1.5.0': {} 1968 | 1969 | '@jridgewell/trace-mapping@0.3.25': 1970 | dependencies: 1971 | '@jridgewell/resolve-uri': 3.1.2 1972 | '@jridgewell/sourcemap-codec': 1.5.0 1973 | 1974 | '@jridgewell/trace-mapping@0.3.9': 1975 | dependencies: 1976 | '@jridgewell/resolve-uri': 3.1.2 1977 | '@jridgewell/sourcemap-codec': 1.5.0 1978 | 1979 | '@manypkg/find-root@1.1.0': 1980 | dependencies: 1981 | '@babel/runtime': 7.26.9 1982 | '@types/node': 12.20.55 1983 | find-up: 4.1.0 1984 | fs-extra: 8.1.0 1985 | 1986 | '@manypkg/get-packages@1.1.3': 1987 | dependencies: 1988 | '@babel/runtime': 7.26.9 1989 | '@changesets/types': 4.1.0 1990 | '@manypkg/find-root': 1.1.0 1991 | fs-extra: 8.1.0 1992 | globby: 11.1.0 1993 | read-yaml-file: 1.1.0 1994 | 1995 | '@nodelib/fs.scandir@2.1.5': 1996 | dependencies: 1997 | '@nodelib/fs.stat': 2.0.5 1998 | run-parallel: 1.2.0 1999 | 2000 | '@nodelib/fs.stat@2.0.5': {} 2001 | 2002 | '@nodelib/fs.walk@1.2.8': 2003 | dependencies: 2004 | '@nodelib/fs.scandir': 2.1.5 2005 | fastq: 1.19.1 2006 | 2007 | '@pkgjs/parseargs@0.11.0': 2008 | optional: true 2009 | 2010 | '@rollup/rollup-android-arm-eabi@4.27.0': 2011 | optional: true 2012 | 2013 | '@rollup/rollup-android-arm64@4.27.0': 2014 | optional: true 2015 | 2016 | '@rollup/rollup-darwin-arm64@4.27.0': 2017 | optional: true 2018 | 2019 | '@rollup/rollup-darwin-x64@4.27.0': 2020 | optional: true 2021 | 2022 | '@rollup/rollup-freebsd-arm64@4.27.0': 2023 | optional: true 2024 | 2025 | '@rollup/rollup-freebsd-x64@4.27.0': 2026 | optional: true 2027 | 2028 | '@rollup/rollup-linux-arm-gnueabihf@4.27.0': 2029 | optional: true 2030 | 2031 | '@rollup/rollup-linux-arm-musleabihf@4.27.0': 2032 | optional: true 2033 | 2034 | '@rollup/rollup-linux-arm64-gnu@4.27.0': 2035 | optional: true 2036 | 2037 | '@rollup/rollup-linux-arm64-musl@4.27.0': 2038 | optional: true 2039 | 2040 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.0': 2041 | optional: true 2042 | 2043 | '@rollup/rollup-linux-riscv64-gnu@4.27.0': 2044 | optional: true 2045 | 2046 | '@rollup/rollup-linux-s390x-gnu@4.27.0': 2047 | optional: true 2048 | 2049 | '@rollup/rollup-linux-x64-gnu@4.27.0': 2050 | optional: true 2051 | 2052 | '@rollup/rollup-linux-x64-musl@4.27.0': 2053 | optional: true 2054 | 2055 | '@rollup/rollup-win32-arm64-msvc@4.27.0': 2056 | optional: true 2057 | 2058 | '@rollup/rollup-win32-ia32-msvc@4.27.0': 2059 | optional: true 2060 | 2061 | '@rollup/rollup-win32-x64-msvc@4.27.0': 2062 | optional: true 2063 | 2064 | '@tsconfig/node10@1.0.11': {} 2065 | 2066 | '@tsconfig/node12@1.0.11': {} 2067 | 2068 | '@tsconfig/node14@1.0.3': {} 2069 | 2070 | '@tsconfig/node16@1.0.4': {} 2071 | 2072 | '@types/debug@4.1.12': 2073 | dependencies: 2074 | '@types/ms': 0.7.34 2075 | 2076 | '@types/estree@1.0.6': {} 2077 | 2078 | '@types/hast@3.0.4': 2079 | dependencies: 2080 | '@types/unist': 3.0.3 2081 | 2082 | '@types/mdast@4.0.4': 2083 | dependencies: 2084 | '@types/unist': 3.0.3 2085 | 2086 | '@types/ms@0.7.34': {} 2087 | 2088 | '@types/node@12.20.55': {} 2089 | 2090 | '@types/node@22.13.13': 2091 | dependencies: 2092 | undici-types: 6.20.0 2093 | 2094 | '@types/unist@3.0.3': {} 2095 | 2096 | '@ungap/structured-clone@1.2.0': {} 2097 | 2098 | '@vitest/coverage-v8@2.1.5(vitest@2.1.5(@types/node@22.13.13))': 2099 | dependencies: 2100 | '@ampproject/remapping': 2.3.0 2101 | '@bcoe/v8-coverage': 0.2.3 2102 | debug: 4.3.7 2103 | istanbul-lib-coverage: 3.2.2 2104 | istanbul-lib-report: 3.0.1 2105 | istanbul-lib-source-maps: 5.0.6 2106 | istanbul-reports: 3.1.7 2107 | magic-string: 0.30.12 2108 | magicast: 0.3.5 2109 | std-env: 3.8.0 2110 | test-exclude: 7.0.1 2111 | tinyrainbow: 1.2.0 2112 | vitest: 2.1.5(@types/node@22.13.13) 2113 | transitivePeerDependencies: 2114 | - supports-color 2115 | 2116 | '@vitest/expect@2.1.5': 2117 | dependencies: 2118 | '@vitest/spy': 2.1.5 2119 | '@vitest/utils': 2.1.5 2120 | chai: 5.1.2 2121 | tinyrainbow: 1.2.0 2122 | 2123 | '@vitest/mocker@2.1.5(vite@5.4.11(@types/node@22.13.13))': 2124 | dependencies: 2125 | '@vitest/spy': 2.1.5 2126 | estree-walker: 3.0.3 2127 | magic-string: 0.30.12 2128 | optionalDependencies: 2129 | vite: 5.4.11(@types/node@22.13.13) 2130 | 2131 | '@vitest/pretty-format@2.1.5': 2132 | dependencies: 2133 | tinyrainbow: 1.2.0 2134 | 2135 | '@vitest/runner@2.1.5': 2136 | dependencies: 2137 | '@vitest/utils': 2.1.5 2138 | pathe: 1.1.2 2139 | 2140 | '@vitest/snapshot@2.1.5': 2141 | dependencies: 2142 | '@vitest/pretty-format': 2.1.5 2143 | magic-string: 0.30.12 2144 | pathe: 1.1.2 2145 | 2146 | '@vitest/spy@2.1.5': 2147 | dependencies: 2148 | tinyspy: 3.0.2 2149 | 2150 | '@vitest/utils@2.1.5': 2151 | dependencies: 2152 | '@vitest/pretty-format': 2.1.5 2153 | loupe: 3.1.2 2154 | tinyrainbow: 1.2.0 2155 | 2156 | acorn-walk@8.3.4: 2157 | dependencies: 2158 | acorn: 8.14.0 2159 | 2160 | acorn@8.14.0: {} 2161 | 2162 | ansi-colors@4.1.3: {} 2163 | 2164 | ansi-escapes@7.0.0: 2165 | dependencies: 2166 | environment: 1.1.0 2167 | 2168 | ansi-regex@5.0.1: {} 2169 | 2170 | ansi-regex@6.1.0: {} 2171 | 2172 | ansi-styles@4.3.0: 2173 | dependencies: 2174 | color-convert: 2.0.1 2175 | 2176 | ansi-styles@6.2.1: {} 2177 | 2178 | arg@4.1.3: {} 2179 | 2180 | argparse@1.0.10: 2181 | dependencies: 2182 | sprintf-js: 1.0.3 2183 | 2184 | array-union@2.1.0: {} 2185 | 2186 | assertion-error@2.0.1: {} 2187 | 2188 | bail@2.0.2: {} 2189 | 2190 | balanced-match@1.0.2: {} 2191 | 2192 | better-path-resolve@1.0.0: 2193 | dependencies: 2194 | is-windows: 1.0.2 2195 | 2196 | brace-expansion@2.0.1: 2197 | dependencies: 2198 | balanced-match: 1.0.2 2199 | 2200 | braces@3.0.3: 2201 | dependencies: 2202 | fill-range: 7.1.1 2203 | 2204 | cac@6.7.14: {} 2205 | 2206 | ccount@2.0.1: {} 2207 | 2208 | chai@5.1.2: 2209 | dependencies: 2210 | assertion-error: 2.0.1 2211 | check-error: 2.1.1 2212 | deep-eql: 5.0.2 2213 | loupe: 3.1.2 2214 | pathval: 2.0.0 2215 | 2216 | chalk@5.4.1: {} 2217 | 2218 | character-entities-html4@2.1.0: {} 2219 | 2220 | character-entities-legacy@3.0.0: {} 2221 | 2222 | character-entities@2.0.2: {} 2223 | 2224 | chardet@0.7.0: {} 2225 | 2226 | check-error@2.1.1: {} 2227 | 2228 | ci-info@3.9.0: {} 2229 | 2230 | cli-cursor@5.0.0: 2231 | dependencies: 2232 | restore-cursor: 5.1.0 2233 | 2234 | cli-truncate@4.0.0: 2235 | dependencies: 2236 | slice-ansi: 5.0.0 2237 | string-width: 7.2.0 2238 | 2239 | color-convert@2.0.1: 2240 | dependencies: 2241 | color-name: 1.1.4 2242 | 2243 | color-name@1.1.4: {} 2244 | 2245 | colorette@2.0.20: {} 2246 | 2247 | comma-separated-tokens@2.0.3: {} 2248 | 2249 | commander@13.1.0: {} 2250 | 2251 | create-require@1.1.1: {} 2252 | 2253 | cross-spawn@7.0.6: 2254 | dependencies: 2255 | path-key: 3.1.1 2256 | shebang-command: 2.0.0 2257 | which: 2.0.2 2258 | 2259 | dataloader@1.4.0: {} 2260 | 2261 | debug@4.3.7: 2262 | dependencies: 2263 | ms: 2.1.3 2264 | 2265 | debug@4.4.0: 2266 | dependencies: 2267 | ms: 2.1.3 2268 | 2269 | decode-named-character-reference@1.0.2: 2270 | dependencies: 2271 | character-entities: 2.0.2 2272 | 2273 | deep-eql@5.0.2: {} 2274 | 2275 | dequal@2.0.3: {} 2276 | 2277 | detect-indent@6.1.0: {} 2278 | 2279 | devlop@1.1.0: 2280 | dependencies: 2281 | dequal: 2.0.3 2282 | 2283 | diff@4.0.2: {} 2284 | 2285 | dir-glob@3.0.1: 2286 | dependencies: 2287 | path-type: 4.0.0 2288 | 2289 | dotenv@8.6.0: {} 2290 | 2291 | eastasianwidth@0.2.0: {} 2292 | 2293 | emoji-regex@10.4.0: {} 2294 | 2295 | emoji-regex@8.0.0: {} 2296 | 2297 | emoji-regex@9.2.2: {} 2298 | 2299 | enquirer@2.4.1: 2300 | dependencies: 2301 | ansi-colors: 4.1.3 2302 | strip-ansi: 6.0.1 2303 | 2304 | entities@4.5.0: {} 2305 | 2306 | environment@1.1.0: {} 2307 | 2308 | es-module-lexer@1.5.4: {} 2309 | 2310 | esbuild@0.21.5: 2311 | optionalDependencies: 2312 | '@esbuild/aix-ppc64': 0.21.5 2313 | '@esbuild/android-arm': 0.21.5 2314 | '@esbuild/android-arm64': 0.21.5 2315 | '@esbuild/android-x64': 0.21.5 2316 | '@esbuild/darwin-arm64': 0.21.5 2317 | '@esbuild/darwin-x64': 0.21.5 2318 | '@esbuild/freebsd-arm64': 0.21.5 2319 | '@esbuild/freebsd-x64': 0.21.5 2320 | '@esbuild/linux-arm': 0.21.5 2321 | '@esbuild/linux-arm64': 0.21.5 2322 | '@esbuild/linux-ia32': 0.21.5 2323 | '@esbuild/linux-loong64': 0.21.5 2324 | '@esbuild/linux-mips64el': 0.21.5 2325 | '@esbuild/linux-ppc64': 0.21.5 2326 | '@esbuild/linux-riscv64': 0.21.5 2327 | '@esbuild/linux-s390x': 0.21.5 2328 | '@esbuild/linux-x64': 0.21.5 2329 | '@esbuild/netbsd-x64': 0.21.5 2330 | '@esbuild/openbsd-x64': 0.21.5 2331 | '@esbuild/sunos-x64': 0.21.5 2332 | '@esbuild/win32-arm64': 0.21.5 2333 | '@esbuild/win32-ia32': 0.21.5 2334 | '@esbuild/win32-x64': 0.21.5 2335 | 2336 | esprima@4.0.1: {} 2337 | 2338 | estree-walker@3.0.3: 2339 | dependencies: 2340 | '@types/estree': 1.0.6 2341 | 2342 | eventemitter3@5.0.1: {} 2343 | 2344 | execa@8.0.1: 2345 | dependencies: 2346 | cross-spawn: 7.0.6 2347 | get-stream: 8.0.1 2348 | human-signals: 5.0.0 2349 | is-stream: 3.0.0 2350 | merge-stream: 2.0.0 2351 | npm-run-path: 5.3.0 2352 | onetime: 6.0.0 2353 | signal-exit: 4.1.0 2354 | strip-final-newline: 3.0.0 2355 | 2356 | expect-type@1.1.0: {} 2357 | 2358 | extend@3.0.2: {} 2359 | 2360 | extendable-error@0.1.7: {} 2361 | 2362 | external-editor@3.1.0: 2363 | dependencies: 2364 | chardet: 0.7.0 2365 | iconv-lite: 0.4.24 2366 | tmp: 0.0.33 2367 | 2368 | fast-glob@3.3.3: 2369 | dependencies: 2370 | '@nodelib/fs.stat': 2.0.5 2371 | '@nodelib/fs.walk': 1.2.8 2372 | glob-parent: 5.1.2 2373 | merge2: 1.4.1 2374 | micromatch: 4.0.8 2375 | 2376 | fastq@1.19.1: 2377 | dependencies: 2378 | reusify: 1.1.0 2379 | 2380 | fill-range@7.1.1: 2381 | dependencies: 2382 | to-regex-range: 5.0.1 2383 | 2384 | find-up@4.1.0: 2385 | dependencies: 2386 | locate-path: 5.0.0 2387 | path-exists: 4.0.0 2388 | 2389 | foreground-child@3.3.0: 2390 | dependencies: 2391 | cross-spawn: 7.0.6 2392 | signal-exit: 4.1.0 2393 | 2394 | fs-extra@7.0.1: 2395 | dependencies: 2396 | graceful-fs: 4.2.11 2397 | jsonfile: 4.0.0 2398 | universalify: 0.1.2 2399 | 2400 | fs-extra@8.1.0: 2401 | dependencies: 2402 | graceful-fs: 4.2.11 2403 | jsonfile: 4.0.0 2404 | universalify: 0.1.2 2405 | 2406 | fsevents@2.3.3: 2407 | optional: true 2408 | 2409 | get-east-asian-width@1.3.0: {} 2410 | 2411 | get-stream@8.0.1: {} 2412 | 2413 | glob-parent@5.1.2: 2414 | dependencies: 2415 | is-glob: 4.0.3 2416 | 2417 | glob@10.4.5: 2418 | dependencies: 2419 | foreground-child: 3.3.0 2420 | jackspeak: 3.4.3 2421 | minimatch: 9.0.5 2422 | minipass: 7.1.2 2423 | package-json-from-dist: 1.0.1 2424 | path-scurry: 1.11.1 2425 | 2426 | glob@11.0.0: 2427 | dependencies: 2428 | foreground-child: 3.3.0 2429 | jackspeak: 4.0.2 2430 | minimatch: 10.0.1 2431 | minipass: 7.1.2 2432 | package-json-from-dist: 1.0.1 2433 | path-scurry: 2.0.0 2434 | 2435 | globby@11.1.0: 2436 | dependencies: 2437 | array-union: 2.1.0 2438 | dir-glob: 3.0.1 2439 | fast-glob: 3.3.3 2440 | ignore: 5.3.2 2441 | merge2: 1.4.1 2442 | slash: 3.0.0 2443 | 2444 | graceful-fs@4.2.11: {} 2445 | 2446 | has-flag@4.0.0: {} 2447 | 2448 | hast-util-embedded@3.0.0: 2449 | dependencies: 2450 | '@types/hast': 3.0.4 2451 | hast-util-is-element: 3.0.0 2452 | 2453 | hast-util-from-html@2.0.3: 2454 | dependencies: 2455 | '@types/hast': 3.0.4 2456 | devlop: 1.1.0 2457 | hast-util-from-parse5: 8.0.1 2458 | parse5: 7.2.1 2459 | vfile: 6.0.3 2460 | vfile-message: 4.0.2 2461 | 2462 | hast-util-from-parse5@8.0.1: 2463 | dependencies: 2464 | '@types/hast': 3.0.4 2465 | '@types/unist': 3.0.3 2466 | devlop: 1.1.0 2467 | hastscript: 8.0.0 2468 | property-information: 6.5.0 2469 | vfile: 6.0.3 2470 | vfile-location: 5.0.3 2471 | web-namespaces: 2.0.1 2472 | 2473 | hast-util-is-element@3.0.0: 2474 | dependencies: 2475 | '@types/hast': 3.0.4 2476 | 2477 | hast-util-minify-whitespace@1.0.1: 2478 | dependencies: 2479 | '@types/hast': 3.0.4 2480 | hast-util-embedded: 3.0.0 2481 | hast-util-is-element: 3.0.0 2482 | hast-util-whitespace: 3.0.0 2483 | unist-util-is: 6.0.0 2484 | 2485 | hast-util-parse-selector@4.0.0: 2486 | dependencies: 2487 | '@types/hast': 3.0.4 2488 | 2489 | hast-util-to-html@9.0.3: 2490 | dependencies: 2491 | '@types/hast': 3.0.4 2492 | '@types/unist': 3.0.3 2493 | ccount: 2.0.1 2494 | comma-separated-tokens: 2.0.3 2495 | hast-util-whitespace: 3.0.0 2496 | html-void-elements: 3.0.0 2497 | mdast-util-to-hast: 13.2.0 2498 | property-information: 6.5.0 2499 | space-separated-tokens: 2.0.2 2500 | stringify-entities: 4.0.4 2501 | zwitch: 2.0.4 2502 | 2503 | hast-util-to-string@3.0.1: 2504 | dependencies: 2505 | '@types/hast': 3.0.4 2506 | 2507 | hast-util-whitespace@3.0.0: 2508 | dependencies: 2509 | '@types/hast': 3.0.4 2510 | 2511 | hastscript@8.0.0: 2512 | dependencies: 2513 | '@types/hast': 3.0.4 2514 | comma-separated-tokens: 2.0.3 2515 | hast-util-parse-selector: 4.0.0 2516 | property-information: 6.5.0 2517 | space-separated-tokens: 2.0.2 2518 | 2519 | html-escaper@2.0.2: {} 2520 | 2521 | html-void-elements@3.0.0: {} 2522 | 2523 | human-id@4.1.1: {} 2524 | 2525 | human-signals@5.0.0: {} 2526 | 2527 | iconv-lite@0.4.24: 2528 | dependencies: 2529 | safer-buffer: 2.1.2 2530 | 2531 | ignore@5.3.2: {} 2532 | 2533 | is-extglob@2.1.1: {} 2534 | 2535 | is-fullwidth-code-point@3.0.0: {} 2536 | 2537 | is-fullwidth-code-point@4.0.0: {} 2538 | 2539 | is-fullwidth-code-point@5.0.0: 2540 | dependencies: 2541 | get-east-asian-width: 1.3.0 2542 | 2543 | is-glob@4.0.3: 2544 | dependencies: 2545 | is-extglob: 2.1.1 2546 | 2547 | is-number@7.0.0: {} 2548 | 2549 | is-plain-obj@4.1.0: {} 2550 | 2551 | is-stream@3.0.0: {} 2552 | 2553 | is-subdir@1.2.0: 2554 | dependencies: 2555 | better-path-resolve: 1.0.0 2556 | 2557 | is-windows@1.0.2: {} 2558 | 2559 | isexe@2.0.0: {} 2560 | 2561 | istanbul-lib-coverage@3.2.2: {} 2562 | 2563 | istanbul-lib-report@3.0.1: 2564 | dependencies: 2565 | istanbul-lib-coverage: 3.2.2 2566 | make-dir: 4.0.0 2567 | supports-color: 7.2.0 2568 | 2569 | istanbul-lib-source-maps@5.0.6: 2570 | dependencies: 2571 | '@jridgewell/trace-mapping': 0.3.25 2572 | debug: 4.3.7 2573 | istanbul-lib-coverage: 3.2.2 2574 | transitivePeerDependencies: 2575 | - supports-color 2576 | 2577 | istanbul-reports@3.1.7: 2578 | dependencies: 2579 | html-escaper: 2.0.2 2580 | istanbul-lib-report: 3.0.1 2581 | 2582 | jackspeak@3.4.3: 2583 | dependencies: 2584 | '@isaacs/cliui': 8.0.2 2585 | optionalDependencies: 2586 | '@pkgjs/parseargs': 0.11.0 2587 | 2588 | jackspeak@4.0.2: 2589 | dependencies: 2590 | '@isaacs/cliui': 8.0.2 2591 | 2592 | js-yaml@3.14.1: 2593 | dependencies: 2594 | argparse: 1.0.10 2595 | esprima: 4.0.1 2596 | 2597 | jsonfile@4.0.0: 2598 | optionalDependencies: 2599 | graceful-fs: 4.2.11 2600 | 2601 | lilconfig@3.1.3: {} 2602 | 2603 | lint-staged@15.5.0: 2604 | dependencies: 2605 | chalk: 5.4.1 2606 | commander: 13.1.0 2607 | debug: 4.4.0 2608 | execa: 8.0.1 2609 | lilconfig: 3.1.3 2610 | listr2: 8.2.5 2611 | micromatch: 4.0.8 2612 | pidtree: 0.6.0 2613 | string-argv: 0.3.2 2614 | yaml: 2.7.0 2615 | transitivePeerDependencies: 2616 | - supports-color 2617 | 2618 | listr2@8.2.5: 2619 | dependencies: 2620 | cli-truncate: 4.0.0 2621 | colorette: 2.0.20 2622 | eventemitter3: 5.0.1 2623 | log-update: 6.1.0 2624 | rfdc: 1.4.1 2625 | wrap-ansi: 9.0.0 2626 | 2627 | locate-path@5.0.0: 2628 | dependencies: 2629 | p-locate: 4.1.0 2630 | 2631 | lodash.startcase@4.4.0: {} 2632 | 2633 | log-update@6.1.0: 2634 | dependencies: 2635 | ansi-escapes: 7.0.0 2636 | cli-cursor: 5.0.0 2637 | slice-ansi: 7.1.0 2638 | strip-ansi: 7.1.0 2639 | wrap-ansi: 9.0.0 2640 | 2641 | loupe@3.1.2: {} 2642 | 2643 | lru-cache@10.4.3: {} 2644 | 2645 | lru-cache@11.0.2: {} 2646 | 2647 | magic-string@0.30.12: 2648 | dependencies: 2649 | '@jridgewell/sourcemap-codec': 1.5.0 2650 | 2651 | magicast@0.3.5: 2652 | dependencies: 2653 | '@babel/parser': 7.26.2 2654 | '@babel/types': 7.26.0 2655 | source-map-js: 1.2.1 2656 | 2657 | make-dir@4.0.0: 2658 | dependencies: 2659 | semver: 7.7.1 2660 | 2661 | make-error@1.3.6: {} 2662 | 2663 | mdast-util-from-markdown@2.0.2: 2664 | dependencies: 2665 | '@types/mdast': 4.0.4 2666 | '@types/unist': 3.0.3 2667 | decode-named-character-reference: 1.0.2 2668 | devlop: 1.1.0 2669 | mdast-util-to-string: 4.0.0 2670 | micromark: 4.0.1 2671 | micromark-util-decode-numeric-character-reference: 2.0.2 2672 | micromark-util-decode-string: 2.0.1 2673 | micromark-util-normalize-identifier: 2.0.1 2674 | micromark-util-symbol: 2.0.0 2675 | micromark-util-types: 2.0.0 2676 | unist-util-stringify-position: 4.0.0 2677 | transitivePeerDependencies: 2678 | - supports-color 2679 | 2680 | mdast-util-to-hast@13.2.0: 2681 | dependencies: 2682 | '@types/hast': 3.0.4 2683 | '@types/mdast': 4.0.4 2684 | '@ungap/structured-clone': 1.2.0 2685 | devlop: 1.1.0 2686 | micromark-util-sanitize-uri: 2.0.0 2687 | trim-lines: 3.0.1 2688 | unist-util-position: 5.0.0 2689 | unist-util-visit: 5.0.0 2690 | vfile: 6.0.3 2691 | 2692 | mdast-util-to-string@4.0.0: 2693 | dependencies: 2694 | '@types/mdast': 4.0.4 2695 | 2696 | merge-stream@2.0.0: {} 2697 | 2698 | merge2@1.4.1: {} 2699 | 2700 | micromark-core-commonmark@2.0.2: 2701 | dependencies: 2702 | decode-named-character-reference: 1.0.2 2703 | devlop: 1.1.0 2704 | micromark-factory-destination: 2.0.1 2705 | micromark-factory-label: 2.0.1 2706 | micromark-factory-space: 2.0.1 2707 | micromark-factory-title: 2.0.1 2708 | micromark-factory-whitespace: 2.0.1 2709 | micromark-util-character: 2.1.0 2710 | micromark-util-chunked: 2.0.1 2711 | micromark-util-classify-character: 2.0.1 2712 | micromark-util-html-tag-name: 2.0.1 2713 | micromark-util-normalize-identifier: 2.0.1 2714 | micromark-util-resolve-all: 2.0.1 2715 | micromark-util-subtokenize: 2.0.2 2716 | micromark-util-symbol: 2.0.0 2717 | micromark-util-types: 2.0.0 2718 | 2719 | micromark-factory-destination@2.0.1: 2720 | dependencies: 2721 | micromark-util-character: 2.1.0 2722 | micromark-util-symbol: 2.0.0 2723 | micromark-util-types: 2.0.0 2724 | 2725 | micromark-factory-label@2.0.1: 2726 | dependencies: 2727 | devlop: 1.1.0 2728 | micromark-util-character: 2.1.0 2729 | micromark-util-symbol: 2.0.0 2730 | micromark-util-types: 2.0.0 2731 | 2732 | micromark-factory-space@2.0.1: 2733 | dependencies: 2734 | micromark-util-character: 2.1.0 2735 | micromark-util-types: 2.0.0 2736 | 2737 | micromark-factory-title@2.0.1: 2738 | dependencies: 2739 | micromark-factory-space: 2.0.1 2740 | micromark-util-character: 2.1.0 2741 | micromark-util-symbol: 2.0.0 2742 | micromark-util-types: 2.0.0 2743 | 2744 | micromark-factory-whitespace@2.0.1: 2745 | dependencies: 2746 | micromark-factory-space: 2.0.1 2747 | micromark-util-character: 2.1.0 2748 | micromark-util-symbol: 2.0.0 2749 | micromark-util-types: 2.0.0 2750 | 2751 | micromark-util-character@2.1.0: 2752 | dependencies: 2753 | micromark-util-symbol: 2.0.0 2754 | micromark-util-types: 2.0.0 2755 | 2756 | micromark-util-chunked@2.0.1: 2757 | dependencies: 2758 | micromark-util-symbol: 2.0.0 2759 | 2760 | micromark-util-classify-character@2.0.1: 2761 | dependencies: 2762 | micromark-util-character: 2.1.0 2763 | micromark-util-symbol: 2.0.0 2764 | micromark-util-types: 2.0.0 2765 | 2766 | micromark-util-combine-extensions@2.0.1: 2767 | dependencies: 2768 | micromark-util-chunked: 2.0.1 2769 | micromark-util-types: 2.0.0 2770 | 2771 | micromark-util-decode-numeric-character-reference@2.0.2: 2772 | dependencies: 2773 | micromark-util-symbol: 2.0.0 2774 | 2775 | micromark-util-decode-string@2.0.1: 2776 | dependencies: 2777 | decode-named-character-reference: 1.0.2 2778 | micromark-util-character: 2.1.0 2779 | micromark-util-decode-numeric-character-reference: 2.0.2 2780 | micromark-util-symbol: 2.0.0 2781 | 2782 | micromark-util-encode@2.0.0: {} 2783 | 2784 | micromark-util-html-tag-name@2.0.1: {} 2785 | 2786 | micromark-util-normalize-identifier@2.0.1: 2787 | dependencies: 2788 | micromark-util-symbol: 2.0.0 2789 | 2790 | micromark-util-resolve-all@2.0.1: 2791 | dependencies: 2792 | micromark-util-types: 2.0.0 2793 | 2794 | micromark-util-sanitize-uri@2.0.0: 2795 | dependencies: 2796 | micromark-util-character: 2.1.0 2797 | micromark-util-encode: 2.0.0 2798 | micromark-util-symbol: 2.0.0 2799 | 2800 | micromark-util-subtokenize@2.0.2: 2801 | dependencies: 2802 | devlop: 1.1.0 2803 | micromark-util-chunked: 2.0.1 2804 | micromark-util-symbol: 2.0.0 2805 | micromark-util-types: 2.0.0 2806 | 2807 | micromark-util-symbol@2.0.0: {} 2808 | 2809 | micromark-util-types@2.0.0: {} 2810 | 2811 | micromark@4.0.1: 2812 | dependencies: 2813 | '@types/debug': 4.1.12 2814 | debug: 4.4.0 2815 | decode-named-character-reference: 1.0.2 2816 | devlop: 1.1.0 2817 | micromark-core-commonmark: 2.0.2 2818 | micromark-factory-space: 2.0.1 2819 | micromark-util-character: 2.1.0 2820 | micromark-util-chunked: 2.0.1 2821 | micromark-util-combine-extensions: 2.0.1 2822 | micromark-util-decode-numeric-character-reference: 2.0.2 2823 | micromark-util-encode: 2.0.0 2824 | micromark-util-normalize-identifier: 2.0.1 2825 | micromark-util-resolve-all: 2.0.1 2826 | micromark-util-sanitize-uri: 2.0.0 2827 | micromark-util-subtokenize: 2.0.2 2828 | micromark-util-symbol: 2.0.0 2829 | micromark-util-types: 2.0.0 2830 | transitivePeerDependencies: 2831 | - supports-color 2832 | 2833 | micromatch@4.0.8: 2834 | dependencies: 2835 | braces: 3.0.3 2836 | picomatch: 2.3.1 2837 | 2838 | mimic-fn@4.0.0: {} 2839 | 2840 | mimic-function@5.0.1: {} 2841 | 2842 | minimatch@10.0.1: 2843 | dependencies: 2844 | brace-expansion: 2.0.1 2845 | 2846 | minimatch@9.0.5: 2847 | dependencies: 2848 | brace-expansion: 2.0.1 2849 | 2850 | minipass@7.1.2: {} 2851 | 2852 | mri@1.2.0: {} 2853 | 2854 | ms@2.1.3: {} 2855 | 2856 | nanoid@3.3.7: {} 2857 | 2858 | node-fetch@2.7.0: 2859 | dependencies: 2860 | whatwg-url: 5.0.0 2861 | 2862 | npm-run-path@5.3.0: 2863 | dependencies: 2864 | path-key: 4.0.0 2865 | 2866 | onetime@6.0.0: 2867 | dependencies: 2868 | mimic-fn: 4.0.0 2869 | 2870 | onetime@7.0.0: 2871 | dependencies: 2872 | mimic-function: 5.0.1 2873 | 2874 | os-tmpdir@1.0.2: {} 2875 | 2876 | outdent@0.5.0: {} 2877 | 2878 | p-filter@2.1.0: 2879 | dependencies: 2880 | p-map: 2.1.0 2881 | 2882 | p-limit@2.3.0: 2883 | dependencies: 2884 | p-try: 2.2.0 2885 | 2886 | p-locate@4.1.0: 2887 | dependencies: 2888 | p-limit: 2.3.0 2889 | 2890 | p-map@2.1.0: {} 2891 | 2892 | p-try@2.2.0: {} 2893 | 2894 | package-json-from-dist@1.0.1: {} 2895 | 2896 | package-manager-detector@0.2.11: 2897 | dependencies: 2898 | quansync: 0.2.8 2899 | 2900 | parse5@7.2.1: 2901 | dependencies: 2902 | entities: 4.5.0 2903 | 2904 | path-exists@4.0.0: {} 2905 | 2906 | path-key@3.1.1: {} 2907 | 2908 | path-key@4.0.0: {} 2909 | 2910 | path-scurry@1.11.1: 2911 | dependencies: 2912 | lru-cache: 10.4.3 2913 | minipass: 7.1.2 2914 | 2915 | path-scurry@2.0.0: 2916 | dependencies: 2917 | lru-cache: 11.0.2 2918 | minipass: 7.1.2 2919 | 2920 | path-type@4.0.0: {} 2921 | 2922 | pathe@1.1.2: {} 2923 | 2924 | pathval@2.0.0: {} 2925 | 2926 | picocolors@1.1.1: {} 2927 | 2928 | picomatch@2.3.1: {} 2929 | 2930 | pidtree@0.6.0: {} 2931 | 2932 | pify@4.0.1: {} 2933 | 2934 | postcss@8.4.49: 2935 | dependencies: 2936 | nanoid: 3.3.7 2937 | picocolors: 1.1.1 2938 | source-map-js: 1.2.1 2939 | 2940 | prettier@2.8.8: {} 2941 | 2942 | property-information@6.5.0: {} 2943 | 2944 | quansync@0.2.8: {} 2945 | 2946 | queue-microtask@1.2.3: {} 2947 | 2948 | read-yaml-file@1.1.0: 2949 | dependencies: 2950 | graceful-fs: 4.2.11 2951 | js-yaml: 3.14.1 2952 | pify: 4.0.1 2953 | strip-bom: 3.0.0 2954 | 2955 | regenerator-runtime@0.14.1: {} 2956 | 2957 | rehype-minify-whitespace@6.0.2: 2958 | dependencies: 2959 | '@types/hast': 3.0.4 2960 | hast-util-minify-whitespace: 1.0.1 2961 | 2962 | rehype-parse@9.0.1: 2963 | dependencies: 2964 | '@types/hast': 3.0.4 2965 | hast-util-from-html: 2.0.3 2966 | unified: 11.0.5 2967 | 2968 | rehype-stringify@10.0.1: 2969 | dependencies: 2970 | '@types/hast': 3.0.4 2971 | hast-util-to-html: 9.0.3 2972 | unified: 11.0.5 2973 | 2974 | rehype@13.0.2: 2975 | dependencies: 2976 | '@types/hast': 3.0.4 2977 | rehype-parse: 9.0.1 2978 | rehype-stringify: 10.0.1 2979 | unified: 11.0.5 2980 | 2981 | remark-parse@11.0.0: 2982 | dependencies: 2983 | '@types/mdast': 4.0.4 2984 | mdast-util-from-markdown: 2.0.2 2985 | micromark-util-types: 2.0.0 2986 | unified: 11.0.5 2987 | transitivePeerDependencies: 2988 | - supports-color 2989 | 2990 | remark-rehype@11.1.1: 2991 | dependencies: 2992 | '@types/hast': 3.0.4 2993 | '@types/mdast': 4.0.4 2994 | mdast-util-to-hast: 13.2.0 2995 | unified: 11.0.5 2996 | vfile: 6.0.3 2997 | 2998 | resolve-from@5.0.0: {} 2999 | 3000 | restore-cursor@5.1.0: 3001 | dependencies: 3002 | onetime: 7.0.0 3003 | signal-exit: 4.1.0 3004 | 3005 | reusify@1.1.0: {} 3006 | 3007 | rfdc@1.4.1: {} 3008 | 3009 | rimraf@6.0.1: 3010 | dependencies: 3011 | glob: 11.0.0 3012 | package-json-from-dist: 1.0.1 3013 | 3014 | rollup@4.27.0: 3015 | dependencies: 3016 | '@types/estree': 1.0.6 3017 | optionalDependencies: 3018 | '@rollup/rollup-android-arm-eabi': 4.27.0 3019 | '@rollup/rollup-android-arm64': 4.27.0 3020 | '@rollup/rollup-darwin-arm64': 4.27.0 3021 | '@rollup/rollup-darwin-x64': 4.27.0 3022 | '@rollup/rollup-freebsd-arm64': 4.27.0 3023 | '@rollup/rollup-freebsd-x64': 4.27.0 3024 | '@rollup/rollup-linux-arm-gnueabihf': 4.27.0 3025 | '@rollup/rollup-linux-arm-musleabihf': 4.27.0 3026 | '@rollup/rollup-linux-arm64-gnu': 4.27.0 3027 | '@rollup/rollup-linux-arm64-musl': 4.27.0 3028 | '@rollup/rollup-linux-powerpc64le-gnu': 4.27.0 3029 | '@rollup/rollup-linux-riscv64-gnu': 4.27.0 3030 | '@rollup/rollup-linux-s390x-gnu': 4.27.0 3031 | '@rollup/rollup-linux-x64-gnu': 4.27.0 3032 | '@rollup/rollup-linux-x64-musl': 4.27.0 3033 | '@rollup/rollup-win32-arm64-msvc': 4.27.0 3034 | '@rollup/rollup-win32-ia32-msvc': 4.27.0 3035 | '@rollup/rollup-win32-x64-msvc': 4.27.0 3036 | fsevents: 2.3.3 3037 | 3038 | run-parallel@1.2.0: 3039 | dependencies: 3040 | queue-microtask: 1.2.3 3041 | 3042 | safer-buffer@2.1.2: {} 3043 | 3044 | semver@7.7.1: {} 3045 | 3046 | shebang-command@2.0.0: 3047 | dependencies: 3048 | shebang-regex: 3.0.0 3049 | 3050 | shebang-regex@3.0.0: {} 3051 | 3052 | siginfo@2.0.0: {} 3053 | 3054 | signal-exit@4.1.0: {} 3055 | 3056 | simple-git-hooks@2.12.1: {} 3057 | 3058 | slash@3.0.0: {} 3059 | 3060 | slice-ansi@5.0.0: 3061 | dependencies: 3062 | ansi-styles: 6.2.1 3063 | is-fullwidth-code-point: 4.0.0 3064 | 3065 | slice-ansi@7.1.0: 3066 | dependencies: 3067 | ansi-styles: 6.2.1 3068 | is-fullwidth-code-point: 5.0.0 3069 | 3070 | source-map-js@1.2.1: {} 3071 | 3072 | space-separated-tokens@2.0.2: {} 3073 | 3074 | spawndamnit@3.0.1: 3075 | dependencies: 3076 | cross-spawn: 7.0.6 3077 | signal-exit: 4.1.0 3078 | 3079 | sprintf-js@1.0.3: {} 3080 | 3081 | stackback@0.0.2: {} 3082 | 3083 | std-env@3.8.0: {} 3084 | 3085 | string-argv@0.3.2: {} 3086 | 3087 | string-width@4.2.3: 3088 | dependencies: 3089 | emoji-regex: 8.0.0 3090 | is-fullwidth-code-point: 3.0.0 3091 | strip-ansi: 6.0.1 3092 | 3093 | string-width@5.1.2: 3094 | dependencies: 3095 | eastasianwidth: 0.2.0 3096 | emoji-regex: 9.2.2 3097 | strip-ansi: 7.1.0 3098 | 3099 | string-width@7.2.0: 3100 | dependencies: 3101 | emoji-regex: 10.4.0 3102 | get-east-asian-width: 1.3.0 3103 | strip-ansi: 7.1.0 3104 | 3105 | stringify-entities@4.0.4: 3106 | dependencies: 3107 | character-entities-html4: 2.1.0 3108 | character-entities-legacy: 3.0.0 3109 | 3110 | strip-ansi@6.0.1: 3111 | dependencies: 3112 | ansi-regex: 5.0.1 3113 | 3114 | strip-ansi@7.1.0: 3115 | dependencies: 3116 | ansi-regex: 6.1.0 3117 | 3118 | strip-bom@3.0.0: {} 3119 | 3120 | strip-final-newline@3.0.0: {} 3121 | 3122 | supports-color@7.2.0: 3123 | dependencies: 3124 | has-flag: 4.0.0 3125 | 3126 | term-size@2.2.1: {} 3127 | 3128 | test-exclude@7.0.1: 3129 | dependencies: 3130 | '@istanbuljs/schema': 0.1.3 3131 | glob: 10.4.5 3132 | minimatch: 9.0.5 3133 | 3134 | tinybench@2.9.0: {} 3135 | 3136 | tinyexec@0.3.1: {} 3137 | 3138 | tinypool@1.0.2: {} 3139 | 3140 | tinyrainbow@1.2.0: {} 3141 | 3142 | tinyspy@3.0.2: {} 3143 | 3144 | tmp@0.0.33: 3145 | dependencies: 3146 | os-tmpdir: 1.0.2 3147 | 3148 | to-regex-range@5.0.1: 3149 | dependencies: 3150 | is-number: 7.0.0 3151 | 3152 | tr46@0.0.3: {} 3153 | 3154 | trim-lines@3.0.1: {} 3155 | 3156 | trough@2.2.0: {} 3157 | 3158 | ts-node@10.9.2(@types/node@22.13.13)(typescript@5.8.2): 3159 | dependencies: 3160 | '@cspotcode/source-map-support': 0.8.1 3161 | '@tsconfig/node10': 1.0.11 3162 | '@tsconfig/node12': 1.0.11 3163 | '@tsconfig/node14': 1.0.3 3164 | '@tsconfig/node16': 1.0.4 3165 | '@types/node': 22.13.13 3166 | acorn: 8.14.0 3167 | acorn-walk: 8.3.4 3168 | arg: 4.1.3 3169 | create-require: 1.1.1 3170 | diff: 4.0.2 3171 | make-error: 1.3.6 3172 | typescript: 5.8.2 3173 | v8-compile-cache-lib: 3.0.1 3174 | yn: 3.1.1 3175 | 3176 | tslib@2.8.1: {} 3177 | 3178 | typescript@5.8.2: {} 3179 | 3180 | undici-types@6.20.0: {} 3181 | 3182 | unified@11.0.5: 3183 | dependencies: 3184 | '@types/unist': 3.0.3 3185 | bail: 2.0.2 3186 | devlop: 1.1.0 3187 | extend: 3.0.2 3188 | is-plain-obj: 4.1.0 3189 | trough: 2.2.0 3190 | vfile: 6.0.3 3191 | 3192 | unist-util-is@6.0.0: 3193 | dependencies: 3194 | '@types/unist': 3.0.3 3195 | 3196 | unist-util-position@5.0.0: 3197 | dependencies: 3198 | '@types/unist': 3.0.3 3199 | 3200 | unist-util-stringify-position@4.0.0: 3201 | dependencies: 3202 | '@types/unist': 3.0.3 3203 | 3204 | unist-util-visit-parents@6.0.1: 3205 | dependencies: 3206 | '@types/unist': 3.0.3 3207 | unist-util-is: 6.0.0 3208 | 3209 | unist-util-visit@5.0.0: 3210 | dependencies: 3211 | '@types/unist': 3.0.3 3212 | unist-util-is: 6.0.0 3213 | unist-util-visit-parents: 6.0.1 3214 | 3215 | universalify@0.1.2: {} 3216 | 3217 | v8-compile-cache-lib@3.0.1: {} 3218 | 3219 | vfile-location@5.0.3: 3220 | dependencies: 3221 | '@types/unist': 3.0.3 3222 | vfile: 6.0.3 3223 | 3224 | vfile-message@4.0.2: 3225 | dependencies: 3226 | '@types/unist': 3.0.3 3227 | unist-util-stringify-position: 4.0.0 3228 | 3229 | vfile@6.0.3: 3230 | dependencies: 3231 | '@types/unist': 3.0.3 3232 | vfile-message: 4.0.2 3233 | 3234 | vite-node@2.1.5(@types/node@22.13.13): 3235 | dependencies: 3236 | cac: 6.7.14 3237 | debug: 4.3.7 3238 | es-module-lexer: 1.5.4 3239 | pathe: 1.1.2 3240 | vite: 5.4.11(@types/node@22.13.13) 3241 | transitivePeerDependencies: 3242 | - '@types/node' 3243 | - less 3244 | - lightningcss 3245 | - sass 3246 | - sass-embedded 3247 | - stylus 3248 | - sugarss 3249 | - supports-color 3250 | - terser 3251 | 3252 | vite@5.4.11(@types/node@22.13.13): 3253 | dependencies: 3254 | esbuild: 0.21.5 3255 | postcss: 8.4.49 3256 | rollup: 4.27.0 3257 | optionalDependencies: 3258 | '@types/node': 22.13.13 3259 | fsevents: 2.3.3 3260 | 3261 | vitest@2.1.5(@types/node@22.13.13): 3262 | dependencies: 3263 | '@vitest/expect': 2.1.5 3264 | '@vitest/mocker': 2.1.5(vite@5.4.11(@types/node@22.13.13)) 3265 | '@vitest/pretty-format': 2.1.5 3266 | '@vitest/runner': 2.1.5 3267 | '@vitest/snapshot': 2.1.5 3268 | '@vitest/spy': 2.1.5 3269 | '@vitest/utils': 2.1.5 3270 | chai: 5.1.2 3271 | debug: 4.3.7 3272 | expect-type: 1.1.0 3273 | magic-string: 0.30.12 3274 | pathe: 1.1.2 3275 | std-env: 3.8.0 3276 | tinybench: 2.9.0 3277 | tinyexec: 0.3.1 3278 | tinypool: 1.0.2 3279 | tinyrainbow: 1.2.0 3280 | vite: 5.4.11(@types/node@22.13.13) 3281 | vite-node: 2.1.5(@types/node@22.13.13) 3282 | why-is-node-running: 2.3.0 3283 | optionalDependencies: 3284 | '@types/node': 22.13.13 3285 | transitivePeerDependencies: 3286 | - less 3287 | - lightningcss 3288 | - msw 3289 | - sass 3290 | - sass-embedded 3291 | - stylus 3292 | - sugarss 3293 | - supports-color 3294 | - terser 3295 | 3296 | web-namespaces@2.0.1: {} 3297 | 3298 | webidl-conversions@3.0.1: {} 3299 | 3300 | whatwg-url@5.0.0: 3301 | dependencies: 3302 | tr46: 0.0.3 3303 | webidl-conversions: 3.0.1 3304 | 3305 | which@2.0.2: 3306 | dependencies: 3307 | isexe: 2.0.0 3308 | 3309 | why-is-node-running@2.3.0: 3310 | dependencies: 3311 | siginfo: 2.0.0 3312 | stackback: 0.0.2 3313 | 3314 | wrap-ansi@7.0.0: 3315 | dependencies: 3316 | ansi-styles: 4.3.0 3317 | string-width: 4.2.3 3318 | strip-ansi: 6.0.1 3319 | 3320 | wrap-ansi@8.1.0: 3321 | dependencies: 3322 | ansi-styles: 6.2.1 3323 | string-width: 5.1.2 3324 | strip-ansi: 7.1.0 3325 | 3326 | wrap-ansi@9.0.0: 3327 | dependencies: 3328 | ansi-styles: 6.2.1 3329 | string-width: 7.2.0 3330 | strip-ansi: 7.1.0 3331 | 3332 | yaml@2.7.0: {} 3333 | 3334 | yn@3.1.1: {} 3335 | 3336 | zwitch@2.0.4: {} 3337 | -------------------------------------------------------------------------------- /scripts/generateFixtures.ts: -------------------------------------------------------------------------------- 1 | import fs from "node:fs/promises"; 2 | import path from "node:path"; 3 | import { fileURLToPath } from "node:url"; 4 | import { processHtml } from "./processHtml"; 5 | import { processMarkdown } from "./processMarkdown"; 6 | 7 | const __filename = fileURLToPath(import.meta.url); 8 | const __dirname = path.dirname(__filename); 9 | 10 | const fixturesDir = path.join(__dirname, "../test/fixtures"); 11 | 12 | const generateFixture = async (testCase: string) => { 13 | const isHtml = testCase.split("-")[1] === "html"; 14 | 15 | const inputHtmlPath = path.join(fixturesDir, testCase, "input.html"); 16 | const inputMdPath = path.join(fixturesDir, testCase, "input.md"); 17 | const outputPath = path.join(fixturesDir, testCase, "output.html"); 18 | 19 | let output: string | null = null; 20 | 21 | try { 22 | if (isHtml) { 23 | const input = await fs.readFile(inputHtmlPath, "utf8"); 24 | output = await processHtml(input, {}); 25 | } else { 26 | const input = await fs.readFile(inputMdPath, "utf8"); 27 | output = await processMarkdown(input, {}); 28 | } 29 | } catch (err) { 30 | output = null; 31 | } 32 | 33 | if (output) { 34 | await fs.writeFile(outputPath, output, "utf8"); 35 | console.log(`Generated output for ${testCase}`); 36 | } else { 37 | console.error(`No input found for ${testCase}`); 38 | } 39 | }; 40 | 41 | const main = async () => { 42 | try { 43 | const testCases = await fs.readdir(fixturesDir, { withFileTypes: true }); 44 | const directories = testCases 45 | .filter((dirent) => dirent.isDirectory()) 46 | .map((dirent) => dirent.name); 47 | 48 | for (const testCase of directories) { 49 | await generateFixture(testCase); 50 | } 51 | } catch (err) { 52 | console.error("Error reading fixtures directory:", err); 53 | process.exit(1); 54 | } 55 | }; 56 | 57 | main(); 58 | -------------------------------------------------------------------------------- /scripts/processHtml.ts: -------------------------------------------------------------------------------- 1 | import { rehype } from "rehype"; 2 | import rehypeMinifyWhitespace from "rehype-minify-whitespace"; 3 | import rehypeParse from "rehype-parse"; 4 | import rehypeStringify from "rehype-stringify"; 5 | import rehypeCodeGroup from "../src/index.js"; 6 | import type { RehypeCodeGroupOptions } from "../src/options.js"; 7 | 8 | export const processHtml = async ( 9 | input: string, 10 | options: RehypeCodeGroupOptions, 11 | ) => { 12 | const file = await rehype() 13 | .use(rehypeParse, { fragment: true }) 14 | .use(rehypeCodeGroup, options) 15 | .use(rehypeMinifyWhitespace) 16 | .use(rehypeStringify) 17 | .process(input); 18 | return String(file); 19 | }; 20 | -------------------------------------------------------------------------------- /scripts/processMarkdown.ts: -------------------------------------------------------------------------------- 1 | import { rehype } from "rehype"; 2 | import rehypeMinifyWhitespace from "rehype-minify-whitespace"; 3 | import rehypeStringify from "rehype-stringify"; 4 | import remarkParse from "remark-parse"; 5 | import remarkRehype from "remark-rehype"; 6 | import rehypeCodeGroup from "../src/index.js"; 7 | import type { RehypeCodeGroupOptions } from "../src/options.js"; 8 | 9 | export const processMarkdown = async ( 10 | input: string, 11 | options: RehypeCodeGroupOptions, 12 | ) => { 13 | const file = await rehype() 14 | .use(remarkParse) 15 | .use(remarkRehype) 16 | .use(rehypeCodeGroup, options) 17 | .use(rehypeMinifyWhitespace) 18 | .use(rehypeStringify) 19 | .process(input); 20 | return String(file); 21 | }; 22 | -------------------------------------------------------------------------------- /src/elements/index.ts: -------------------------------------------------------------------------------- 1 | import type { Element, Root } from "hast"; 2 | import type { ClassNames } from "../options.js"; 3 | import { getScript } from "./script.js"; 4 | import { styles } from "./styles.js"; 5 | 6 | export type CodeGroup = { 7 | parentNode: Element | Root; 8 | startIndex: number; 9 | tabLabels: string[]; 10 | }; 11 | 12 | let idCounter = 0; 13 | const generateUniqueId = (): string => { 14 | return `rcg-${idCounter++}`; 15 | }; 16 | 17 | const createRcgTabsElement = ( 18 | tabLabels: string[], 19 | classNames: ClassNames, 20 | uniqueId: string, 21 | ): Element => { 22 | return { 23 | type: "element", 24 | tagName: "div", 25 | properties: { className: classNames.tabContainerClass, role: "tablist" }, 26 | children: tabLabels.map((label, i) => ({ 27 | type: "element", 28 | tagName: "button", 29 | properties: { 30 | className: `${classNames.tabClass}${i === 0 ? ` ${classNames.activeTabClass}` : ""}`, 31 | role: "tab", 32 | "aria-selected": i === 0 ? "true" : "false", 33 | "aria-controls": `${uniqueId}-block-${i}`, 34 | id: `${uniqueId}-tab-${i}`, 35 | }, 36 | children: [{ type: "text", value: label }], 37 | })), 38 | }; 39 | }; 40 | 41 | const createCodeBlockWrapper = ( 42 | codeBlock: Element, 43 | classNames: ClassNames, 44 | uniqueId: string, 45 | idx: number, 46 | ): Element => { 47 | const isActive = idx === 0; 48 | return { 49 | type: "element", 50 | tagName: "div", 51 | properties: { 52 | className: `${classNames.blockContainerClass}${isActive ? ` ${classNames.activeBlockClass}` : ""}`, 53 | role: "tabpanel", 54 | "aria-labelledby": `${uniqueId}-tab-${idx}`, 55 | id: `${uniqueId}-block-${idx}`, 56 | hidden: !isActive, 57 | }, 58 | children: [codeBlock], 59 | }; 60 | }; 61 | 62 | export const createRehypeCodeGroupElement = ( 63 | codeGroup: CodeGroup, 64 | endIndex: number, 65 | classNames: ClassNames, 66 | ): Element => { 67 | const { parentNode, startIndex, tabLabels } = codeGroup; 68 | const codeBlocks: Element[] = []; 69 | const uniqueId = generateUniqueId(); 70 | 71 | const rcgTabsElement: Element = createRcgTabsElement( 72 | tabLabels, 73 | classNames, 74 | uniqueId, 75 | ); 76 | 77 | for (let i = startIndex + 1; i < endIndex; i++) { 78 | const codeBlock = parentNode.children[i] as Element; 79 | 80 | if (codeBlock.type === "element") { 81 | codeBlocks.push( 82 | createCodeBlockWrapper( 83 | codeBlock, 84 | classNames, 85 | uniqueId, 86 | codeBlocks.length, 87 | ), 88 | ); 89 | } 90 | } 91 | 92 | return { 93 | type: "element", 94 | tagName: "div", 95 | properties: { className: classNames.codeGroupClass }, 96 | children: [rcgTabsElement, ...codeBlocks], 97 | }; 98 | }; 99 | 100 | export const createStyleElement = (): Element => { 101 | return { 102 | type: "element", 103 | tagName: "style", 104 | properties: {}, 105 | children: [{ type: "text", value: styles }], 106 | }; 107 | }; 108 | 109 | export const createScriptElement = (classNames: ClassNames): Element => { 110 | return { 111 | type: "element", 112 | tagName: "script", 113 | properties: { type: "text/javascript" }, 114 | children: [{ type: "text", value: getScript(classNames) }], 115 | }; 116 | }; 117 | -------------------------------------------------------------------------------- /src/elements/script.ts: -------------------------------------------------------------------------------- 1 | import type { ClassNames } from "../options.js"; 2 | import { defaultClassNames } from "./styles.js"; 3 | 4 | export const getScript = (classNames: ClassNames) => { 5 | const activeTabClassNames = classNames.activeTabClass.split(" "); 6 | const activeBlockClassNames = classNames.activeBlockClass.split(" "); 7 | 8 | return ` 9 | document.addEventListener("DOMContentLoaded", function () { 10 | const codeGroups = document.querySelectorAll(".${defaultClassNames.codeGroupClass}"); 11 | 12 | codeGroups.forEach((group) => { 13 | const tabs = group.querySelectorAll(".${defaultClassNames.tabClass}"); 14 | const blocks = group.querySelectorAll(".${defaultClassNames.blockContainerClass}"); 15 | let activeTab = group.querySelector(".${defaultClassNames.tabClass}.${activeTabClassNames.join(".")}"); 16 | let activeBlock = group.querySelector(".${defaultClassNames.blockContainerClass}.${activeBlockClassNames.join(".")}"); 17 | 18 | group.addEventListener("click", (event) => { 19 | const tab = event.target.closest(".${defaultClassNames.tabClass}"); 20 | if (!tab) return; 21 | 22 | const index = Array.from(tabs).indexOf(tab); 23 | if (index === -1) return; 24 | 25 | if (activeTab) { 26 | activeTab.classList.remove(${activeTabClassNames 27 | .map((c) => `"${c}"`) 28 | .join(", ")}); 29 | activeTab.setAttribute("aria-selected", "false"); 30 | } 31 | if (activeBlock) { 32 | activeBlock.classList.remove(${activeBlockClassNames 33 | .map((c) => `"${c}"`) 34 | .join(", ")}); 35 | activeBlock.setAttribute("hidden", "true"); 36 | } 37 | 38 | tab.classList.add(${activeTabClassNames.map((c) => `"${c}"`).join(", ")}); 39 | tab.setAttribute("aria-selected", "true"); 40 | blocks[index].classList.add(${activeBlockClassNames 41 | .map((c) => `"${c}"`) 42 | .join(", ")}); 43 | blocks[index].removeAttribute("hidden"); 44 | 45 | activeTab = tab; 46 | activeBlock = blocks[index]; 47 | }); 48 | }); 49 | }); 50 | `; 51 | }; 52 | -------------------------------------------------------------------------------- /src/elements/styles.ts: -------------------------------------------------------------------------------- 1 | import type { ClassNames } from "../options.js"; 2 | 3 | export const defaultClassNames: ClassNames = { 4 | activeTabClass: "active", 5 | activeBlockClass: "active", 6 | tabClass: "rcg-tab", 7 | tabContainerClass: "rcg-tab-container", 8 | blockContainerClass: "rcg-block", 9 | codeGroupClass: "rehype-code-group", 10 | }; 11 | 12 | const mergeClassNames = (defaultClass: string, customClass?: string) => 13 | customClass ? `${defaultClass} ${customClass}` : defaultClass; 14 | 15 | export const getClassNames = ( 16 | customClassNames?: Partial, 17 | ): ClassNames => { 18 | return { 19 | activeTabClass: mergeClassNames( 20 | defaultClassNames.activeTabClass, 21 | customClassNames?.activeTabClass, 22 | ), 23 | activeBlockClass: mergeClassNames( 24 | defaultClassNames.activeBlockClass, 25 | customClassNames?.activeBlockClass, 26 | ), 27 | tabClass: mergeClassNames( 28 | defaultClassNames.tabClass, 29 | customClassNames?.tabClass, 30 | ), 31 | tabContainerClass: mergeClassNames( 32 | defaultClassNames.tabContainerClass, 33 | customClassNames?.tabContainerClass, 34 | ), 35 | blockContainerClass: mergeClassNames( 36 | defaultClassNames.blockContainerClass, 37 | customClassNames?.blockContainerClass, 38 | ), 39 | codeGroupClass: mergeClassNames( 40 | defaultClassNames.codeGroupClass, 41 | customClassNames?.codeGroupClass, 42 | ), 43 | }; 44 | }; 45 | 46 | export const styles = ` 47 | .${defaultClassNames.codeGroupClass} { 48 | display: grid; 49 | gap: 0.6rem; 50 | } 51 | .${defaultClassNames.tabContainerClass} { 52 | display: flex; 53 | border-bottom: 1px solid #ddd; 54 | } 55 | .${defaultClassNames.tabClass} { 56 | padding: 0.5rem 1rem; 57 | cursor: pointer; 58 | border: none; 59 | background: none; 60 | &.${defaultClassNames.activeTabClass} { 61 | border-bottom: 2px solid; 62 | font-weight: bold; 63 | } 64 | } 65 | .${defaultClassNames.blockContainerClass} { 66 | display: none; 67 | overflow-x: auto; 68 | &.${defaultClassNames.activeBlockClass} { 69 | display: block; 70 | } 71 | } 72 | `; 73 | -------------------------------------------------------------------------------- /src/handlers/delimiters.ts: -------------------------------------------------------------------------------- 1 | import type { Element, Root } from "hast"; 2 | import { toString as hastToString } from "hast-util-to-string"; 3 | import { 4 | type CodeGroup, 5 | createRehypeCodeGroupElement, 6 | } from "../elements/index.js"; 7 | import type { ClassNames } from "../options.js"; 8 | 9 | const START_DELIMITER_REGEX = /::: code-group labels=\[([^\]]+)\]/; 10 | const END_DELIMITER = ":::"; 11 | 12 | export const isStartDelimiterNode = (node: Element): boolean => { 13 | const match = hastToString(node).trim().match(START_DELIMITER_REGEX); 14 | return node.tagName === "p" && match !== null; 15 | }; 16 | 17 | export const isEndDelimiterNode = (node: Element): boolean => { 18 | return node.tagName === "p" && hastToString(node).trim() === END_DELIMITER; 19 | }; 20 | 21 | /** 22 | * Handle the start delimiter node. 23 | * If the node is a start delimiter, 24 | * - create a code group object 25 | * - push it to the code groups stack. 26 | * 27 | * @param {Element} node - The current node being visited. 28 | * @param {number} index - The index of the current node in its parent's children. 29 | * @param {Element | Root} parent - The parent of the current node. 30 | * @param {CodeGroup[]} codeGroups - The stack to keep track of the last found start delimiter. 31 | */ 32 | export const handleStartDelimiter = ( 33 | node: Element, 34 | index: number, 35 | parent: Element | Root, 36 | codeGroups: CodeGroup[], 37 | ) => { 38 | const startMatch = hastToString(node).trim().match(START_DELIMITER_REGEX); 39 | 40 | if (startMatch) { 41 | const tabLabels = startMatch[1].split(",").map((label) => label.trim()); 42 | codeGroups.push({ parentNode: parent, startIndex: index, tabLabels }); 43 | } 44 | }; 45 | 46 | /** 47 | * Handle the end delimiter node. 48 | * If the node is an end delimiter, 49 | * - pop the last code group from the stack 50 | * - create a rehype-code-group element 51 | * - replace the code group nodes with the rehype-code-group element. 52 | * - return the skip index to skip the replaced nodes. 53 | * - return the found status. 54 | * If the node is not an end delimiter, return the not found status. 55 | * 56 | * @param {number} index - The index of the current node in its parent's children. 57 | * @param {Element | Root} parent - The parent of the current node. 58 | * @param {CodeGroup[]} codeGroups - The stack to keep track of the last found start delimiter. 59 | * @param {ClassNames} classNames - The class names for styling code group elements. 60 | * @returns {Object} An object containing the found status and the skip index. 61 | */ 62 | export const handleEndDelimiter = ( 63 | index: number, 64 | parent: Element | Root, 65 | codeGroups: CodeGroup[], 66 | classNames: ClassNames, 67 | ) => { 68 | const codeGroup = codeGroups.pop(); 69 | const endIndex = index; 70 | 71 | if (codeGroup && codeGroup.parentNode === parent) { 72 | const { parentNode, startIndex } = codeGroup; 73 | 74 | const rehypeCodeGroupElement: Element = createRehypeCodeGroupElement( 75 | codeGroup, 76 | endIndex, 77 | classNames, 78 | ); 79 | 80 | parentNode.children.splice( 81 | startIndex, 82 | endIndex - startIndex + 1, 83 | rehypeCodeGroupElement, 84 | ); 85 | return { 86 | found: true, 87 | skipIndex: startIndex + 1, 88 | }; 89 | } 90 | return { found: false, skipIndex: -1 }; 91 | }; 92 | -------------------------------------------------------------------------------- /src/handlers/stylesAndScript.ts: -------------------------------------------------------------------------------- 1 | import type { Element, Root } from "hast"; 2 | import { createScriptElement, createStyleElement } from "../elements/index.js"; 3 | import type { ClassNames } from "../options.js"; 4 | 5 | export const addStylesAndScript = ( 6 | tree: Root, 7 | classNames: ClassNames, 8 | headElement?: Element, 9 | htmlElement?: Element, 10 | firstStyleIndex = -1, 11 | ) => { 12 | let head = headElement; 13 | const html = htmlElement; 14 | 15 | const styleElement: Element = createStyleElement(); 16 | const scriptElement: Element = createScriptElement(classNames); 17 | 18 | if (head) { 19 | if (firstStyleIndex !== -1) { 20 | head.children.splice(firstStyleIndex, 0, styleElement); 21 | } else { 22 | head.children.push(styleElement); 23 | } 24 | head.children.push(scriptElement); 25 | } else if (html) { 26 | head = { 27 | type: "element", 28 | tagName: "head", 29 | properties: {}, 30 | children: [styleElement, scriptElement], 31 | }; 32 | html.children.unshift(head); 33 | } else { 34 | tree.children.unshift({ 35 | type: "element", 36 | tagName: "head", 37 | properties: {}, 38 | children: [styleElement, scriptElement], 39 | }); 40 | } 41 | }; 42 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import type { Element, Root } from "hast"; 2 | import type { Plugin } from "unified"; 3 | import { SKIP, visit } from "unist-util-visit"; 4 | import type { CodeGroup } from "./elements/index.js"; 5 | import { getClassNames } from "./elements/styles.js"; 6 | import { 7 | handleEndDelimiter, 8 | handleStartDelimiter, 9 | isEndDelimiterNode, 10 | isStartDelimiterNode, 11 | } from "./handlers/delimiters.js"; 12 | import { addStylesAndScript } from "./handlers/stylesAndScript.js"; 13 | import type { RehypeCodeGroupOptions } from "./options.js"; 14 | 15 | /** 16 | * ## Rehype Code Group 17 | * A Rehype plugin for grouping code blocks with tabs, 18 | * allowing you to switch between different code snippets easily. 19 | * Perfect for documentation and tutorials where you want to show 20 | * the same code in different languages or configurations. 21 | * 22 | * Works with all Code Syntax Highlighters 23 | * 24 | * @param options {@link RehypeCodeGroupOptions} - Options to customize the plugin. 25 | * @returns Transformer function to process the AST. 26 | * 27 | * @example 28 | * // With rehype 29 | * import fs from "node:fs/promises"; 30 | * import { rehype } from "rehype"; 31 | * import rehypeCodeGroup from "rehype-code-group"; 32 | * 33 | * const document = await fs.readFile("example/input.html", "utf8"); 34 | * 35 | * const file = await rehype() 36 | * .use(rehypeCodeGroup, { 37 | * customClassNames: { 38 | * activeTabClass: "my-active-tab", 39 | * }, 40 | * }) 41 | * .process(document); 42 | * 43 | * await fs.writeFile("example/output.html", String(file)); 44 | * 45 | * @example 46 | * // With Astro (https://astro.build) 47 | * import { defineConfig } from 'astro/config'; 48 | * import rehypeCodeGroup from 'rehype-code-group'; 49 | * 50 | * // https://docs.astro.build/en/reference/configuration-reference/ 51 | * export default defineConfig({ 52 | * // ... 53 | * markdown: { 54 | * // ... 55 | * rehypePlugins: [ 56 | * // ... 57 | * rehypeCodeGroup, 58 | * ], 59 | * }, 60 | * // ... 61 | * }); 62 | */ 63 | const rehypeCodeGroup: Plugin<[RehypeCodeGroupOptions], Root> = ( 64 | options = {}, 65 | ) => { 66 | const { customClassNames } = options; 67 | const classNames = getClassNames(customClassNames); 68 | 69 | return (tree: Root) => { 70 | let headElement: Element | undefined; 71 | let htmlElement: Element | undefined; 72 | let firstStyleIndex = -1; 73 | const codeGroups: CodeGroup[] = []; 74 | let codeGroupFound = false; 75 | 76 | /** 77 | * Visit each element node in the tree to 78 | * - find code groups and wrap them in a rehype-code-group element. 79 | * - find the head and html elements to add styles and script. 80 | * 81 | * @param {Element} node - The current node being visited. 82 | * @param {number} index - The index of the current node in its parent's children. 83 | * @param {Element} parent - The parent of the current node. 84 | */ 85 | visit(tree, "element", (node, index, parent) => { 86 | if (node.type !== "element" || index === undefined) { 87 | return; 88 | } 89 | 90 | if (node.tagName === "head") { 91 | headElement = node; 92 | } 93 | 94 | if (node.tagName === "html") { 95 | htmlElement = node; 96 | } 97 | 98 | // Identify the first style element index 99 | if (node.tagName === "style" && firstStyleIndex === -1) { 100 | firstStyleIndex = index ?? -1; 101 | } 102 | 103 | if (!parent) { 104 | return; 105 | } 106 | 107 | if (isStartDelimiterNode(node)) { 108 | handleStartDelimiter(node, index, parent, codeGroups); 109 | return [SKIP]; 110 | } 111 | 112 | if (isEndDelimiterNode(node)) { 113 | const { found, skipIndex } = handleEndDelimiter( 114 | index, 115 | parent, 116 | codeGroups, 117 | classNames, 118 | ); 119 | 120 | if (found) { 121 | codeGroupFound = found; 122 | return [SKIP, skipIndex]; 123 | } 124 | } 125 | }); 126 | 127 | if (codeGroupFound) { 128 | addStylesAndScript( 129 | tree, 130 | classNames, 131 | headElement, 132 | htmlElement, 133 | firstStyleIndex, 134 | ); 135 | } 136 | }; 137 | }; 138 | 139 | export default rehypeCodeGroup; 140 | -------------------------------------------------------------------------------- /src/options.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Class names used for styling the code group elements. 3 | */ 4 | export type ClassNames = { 5 | /** 6 | * The class name for the active tab. 7 | * This class will be applied to the currently active tab to highlight it. 8 | * Default: "active" 9 | */ 10 | activeTabClass: string; 11 | 12 | /** 13 | * The class name for the active code block. 14 | * This class will be applied to the currently active code block to make it visible. 15 | * Default: "active" 16 | */ 17 | activeBlockClass: string; 18 | 19 | /** 20 | * The class name for the tab elements. 21 | * This class will be applied to each tab button. 22 | * Default: "rcg-tab" 23 | */ 24 | tabClass: string; 25 | 26 | /** 27 | * The class name for the container of the tabs. 28 | * This class will be applied to the container element that holds all the tab buttons. 29 | * Default: "rcg-tab-container" 30 | */ 31 | tabContainerClass: string; 32 | 33 | /** 34 | * The class name for the container of the code blocks. 35 | * This class will be applied to the container element that holds all the code blocks. 36 | * Default: "rcg-blocks" 37 | */ 38 | blockContainerClass: string; 39 | 40 | /** 41 | * The class name for the entire code group. 42 | * This class will be applied to the main container element that wraps the tabs and code blocks. 43 | * Default: "rehype-code-group" 44 | */ 45 | codeGroupClass: string; 46 | }; 47 | 48 | /** 49 | * Options to customize the Rehype Code Group plugin. 50 | */ 51 | export type RehypeCodeGroupOptions = { 52 | /** 53 | * An object to override the default class names. 54 | * This allows you to provide custom class names for the various elements of the code group. 55 | * Example: 56 | * { 57 | * activeTabClass: "my-active-tab", 58 | * tabClass: "my-tab", 59 | * tabContainerClass: "my-tab-container", 60 | * blockContainerClass: "my-block-container", 61 | * codeGroupClass: "my-code-group", 62 | * } 63 | */ 64 | customClassNames?: Partial; 65 | }; 66 | -------------------------------------------------------------------------------- /test/fixtures/multiple-html/input.html: -------------------------------------------------------------------------------- 1 |

::: code-group labels=[npm, pnpm]

2 |
 3 |   npm install rehype-code-group
 4 | 
5 |
 6 |   pnpm add rehype-code-group
 7 | 
8 |

:::

9 |
10 |

Another code group

11 |

::: code-group labels=[npm, pnpm, yarn]

12 |
13 |     npm install rehype-code-group
14 |   
15 |
16 |     pnpm add rehype-code-group
17 |   
18 |
19 |     yarn add rehype-code-group
20 |   
21 |

:::

22 |
23 | -------------------------------------------------------------------------------- /test/fixtures/multiple-html/output.html: -------------------------------------------------------------------------------- 1 |
  npm install rehype-code-group
64 | 

Another code group

    npm install rehype-code-group
66 |   
-------------------------------------------------------------------------------- /test/fixtures/multiple-md/input.md: -------------------------------------------------------------------------------- 1 | ::: code-group labels=[npm, pnpm] 2 | 3 | ```bash 4 | npm install rehype-code-group 5 | ``` 6 | 7 | ```bash 8 | pnpm add rehype-code-group 9 | ``` 10 | 11 | ::: 12 | 13 | ::: code-group labels=[npm, pnpm, yarn] 14 | 15 | ```bash 16 | npm install rehype-code-group 17 | ``` 18 | 19 | ```bash 20 | pnpm add rehype-code-group 21 | ``` 22 | 23 | ```bash 24 | yarn add rehype-code-group 25 | ``` 26 | 27 | ::: -------------------------------------------------------------------------------- /test/fixtures/multiple-md/output.html: -------------------------------------------------------------------------------- 1 |
npm install rehype-code-group
64 | 
npm install rehype-code-group
66 | 
-------------------------------------------------------------------------------- /test/fixtures/single-html/input.html: -------------------------------------------------------------------------------- 1 |

::: code-group labels=[npm, pnpm]

2 |
3 |     npm install rehype-code-group
4 | 
5 |
6 |     pnpm add rehype-code-group
7 | 
8 |

:::

9 | -------------------------------------------------------------------------------- /test/fixtures/single-html/output.html: -------------------------------------------------------------------------------- 1 |
    npm install rehype-code-group
64 | 
-------------------------------------------------------------------------------- /test/fixtures/single-md/input.md: -------------------------------------------------------------------------------- 1 | ::: code-group labels=[npm, pnpm, yarn] 2 | 3 | ```bash 4 | npm install rehype-code-group 5 | ``` 6 | 7 | ```bash 8 | pnpm add rehype-code-group 9 | ``` 10 | 11 | ```bash 12 | yarn add rehype-code-group 13 | ``` 14 | 15 | ::: -------------------------------------------------------------------------------- /test/fixtures/single-md/output.html: -------------------------------------------------------------------------------- 1 |
npm install rehype-code-group
64 | 
-------------------------------------------------------------------------------- /test/index.test.ts: -------------------------------------------------------------------------------- 1 | import fs from "node:fs"; 2 | import path from "node:path"; 3 | import { describe, expect, it } from "vitest"; 4 | import { processHtml } from "../scripts/processHtml"; 5 | import { processMarkdown } from "../scripts/processMarkdown"; 6 | 7 | const fixturesDir = path.join(__dirname, "fixtures"); 8 | 9 | const readFixture = async ( 10 | testCase: string, 11 | fileName: string, 12 | ): string | null => { 13 | try { 14 | const filePath = path.join(fixturesDir, testCase, fileName); 15 | return fs.readFileSync(filePath, "utf8"); 16 | } catch (err) { 17 | return null; 18 | } 19 | }; 20 | 21 | describe("rehypeCodeGroup", async () => { 22 | const testCases = await fs.readdirSync(fixturesDir, { withFileTypes: true }); 23 | const directories = testCases 24 | .filter((dirent) => dirent.isDirectory()) 25 | .map((dirent) => dirent.name); 26 | 27 | for (const testCase of directories) { 28 | it(`should process ${testCase} correctly`, async () => { 29 | const isHtml = testCase.split("-")[1] === "html"; 30 | 31 | const expectedOutput = await readFixture(testCase, "output.html"); 32 | 33 | if (expectedOutput === null) { 34 | throw new Error(`No output found for ${testCase}`); 35 | } 36 | 37 | let output: string; 38 | if (isHtml) { 39 | const inputHtml = await readFixture(testCase, "input.html"); 40 | output = await processHtml(inputHtml, {}); 41 | } else { 42 | const inputMd = await readFixture(testCase, "input.md"); 43 | output = await processMarkdown(inputMd, {}); 44 | } 45 | 46 | expect(output).toBe(expectedOutput); 47 | }); 48 | } 49 | }); 50 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | // Enable latest features 4 | "lib": ["ESNext", "DOM"], 5 | "target": "ESNext", 6 | "module": "NodeNext", 7 | "moduleDetection": "force", 8 | "verbatimModuleSyntax": true, 9 | // Best practices 10 | "strict": true, 11 | "skipLibCheck": true, 12 | "noFallthroughCasesInSwitch": true, 13 | "esModuleInterop": true, 14 | // Some stricter flags (disabled by default) 15 | "noUnusedLocals": true, 16 | "noUnusedParameters": true, 17 | "noPropertyAccessFromIndexSignature": true, 18 | 19 | "rootDir": "./src", 20 | "outDir": "./dist", 21 | "forceConsistentCasingInFileNames": true, 22 | 23 | "declaration": true, 24 | "declarationMap": true, 25 | "types": ["vitest/globals"] 26 | }, 27 | "include": ["src"], 28 | "exclude": ["node_modules", "dist"] 29 | } 30 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vitest/config"; 2 | 3 | export default defineConfig({ 4 | test: { 5 | include: ["test/**/*.test.ts"], 6 | coverage: { 7 | provider: "v8", 8 | include: ["src/**/*.ts"], 9 | exclude: ["src/options.ts"], 10 | reporter: ["text", "json"], 11 | }, 12 | }, 13 | }); 14 | --------------------------------------------------------------------------------