├── .editorconfig
├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── config.yml
│ ├── documentation.md
│ └── feature_request.md
└── workflows
│ ├── build.yml
│ ├── pr-build.yml
│ └── release.yml
├── .gitignore
├── .husky
├── commit-msg
└── pre-commit
├── .nvmrc
├── .prettierignore
├── .prettierrc
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── README_zh.md
├── SECURITY.md
├── commitlint.config.js
├── eslint.config.js
├── lint-staged.config.js
├── package.json
├── packages
├── chrome-extension
│ ├── config
│ │ ├── pack.js
│ │ ├── paths.js
│ │ ├── webpack.common.js
│ │ └── webpack.config.js
│ ├── package.json
│ ├── src
│ │ ├── background.ts
│ │ ├── contentScript.ts
│ │ ├── injectedScript.ts
│ │ ├── options.scss
│ │ ├── options.ts
│ │ ├── popup.scss
│ │ ├── popup.ts
│ │ └── types
│ │ │ └── global.d.ts
│ └── tsconfig.json
├── firefox-extension
│ ├── config
│ │ ├── pack.js
│ │ ├── paths.js
│ │ ├── webpack.common.js
│ │ └── webpack.config.js
│ ├── package.json
│ ├── src
│ │ ├── background.ts
│ │ ├── contentScript.ts
│ │ ├── injectedScript.ts
│ │ ├── options.scss
│ │ ├── options.ts
│ │ ├── popup.scss
│ │ ├── popup.ts
│ │ └── types
│ │ │ └── global.d.ts
│ └── tsconfig.json
└── shared
│ ├── config
│ ├── paths.js
│ ├── webpack.common.js
│ └── webpack.config.js
│ ├── package.json
│ ├── src
│ ├── main.ts
│ ├── types
│ │ └── index.ts
│ └── utils
│ │ └── index.ts
│ └── tsconfig.json
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── public
├── chrome-manifest.json
├── firefox-manifest.json
├── icons
│ ├── icon_128.png
│ ├── icon_16.png
│ ├── icon_32.png
│ └── icon_48.png
├── options.html
└── popup.html
├── renovate.json
└── tsconfig.root.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | # See https://editorconfig.org for more about editor config.
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | # Match all files
7 | [*]
8 | charset = utf-8
9 | end_of_line = lf
10 | indent_size = 2
11 | indent_style = space
12 | insert_final_newline = true
13 | max_line_length = 80
14 | trim_trailing_whitespace = true
15 |
16 | # Markdown files
17 | [*.md]
18 | max_line_length = 0
19 | trim_trailing_whitespace = false
20 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
12 | polar: # Replace with a single Polar username
13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
14 | custom: [https://zhensherlock.github.io/img/微信打赏.jpg]
15 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: "🐛 Bug Report (缺陷反馈)"
3 | about: 'Report errors to help us improve(报告错误以帮助我们改进)'
4 | labels: '🐛 Bug'
5 | ---
6 |
7 |
12 |
13 | ### 以前的Issues
14 |
15 |
16 |
17 | ### 问题描述
18 |
19 |
20 |
21 | ### 复现步骤
22 |
23 |
26 |
27 | ### 环境详情
28 |
29 | - **`vue-devtools-unlocker` version:**
30 | - **`vue` version:**
31 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: true
2 | contact_links:
3 | - name: 🤔 Ask a question(提问和讨论)
4 | url: https://github.com/zhensherlock/vue-devtools-unlocker/discussions
5 | about: Ask questions and discuss with other community members(提出问题并与其他社区成员讨论)
6 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/documentation.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: "📝 Documentation (文档相关)"
3 | about: 'Repair or supplement documentation(修复或补充文档)'
4 | labels: '📝 Documentation'
5 | ---
6 |
7 |
10 |
11 | ## 哪些文档页面需要修复
12 |
13 | ## 需要修改什么来解决问题
14 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: '✨ Feature request(新需求)'
3 | about: 'Propose new functional requirements(提出新的功能需求)'
4 | labels: '✨ Feature Request'
5 | ---
6 |
7 |
10 |
11 | ## 新功能
12 |
13 | ### 您建议的新功能或更新功能是什么?
14 |
15 | ### 为什么要包含此功能?
16 |
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: build
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 |
8 | jobs:
9 | build:
10 | if: github.repository == 'zhensherlock/vue-devtools-unlocker'
11 | runs-on: ubuntu-latest
12 | steps:
13 | - name: Checkout
14 | uses: actions/checkout@v4
15 | with:
16 | fetch-depth: 0
17 |
18 | - name: Install Node
19 | uses: actions/setup-node@v4
20 | with:
21 | node-version: 22
22 |
23 | - name: Install PNPM
24 | run: npm i pnpm@latest -g
25 |
26 | - name: Setup npmrc
27 | run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc
28 |
29 | - name: setup pnpm config
30 | run: pnpm config set store-dir $PNPM_CACHE_FOLDER
31 |
32 | - name: Install Package
33 | run: pnpm install
34 |
35 | - name: Build Package
36 | run: pnpm build
37 |
38 | # - name: Test Package
39 | # run: pnpm run test
40 |
41 | # - name: Upload coverage reports to Codecov
42 | # uses: codecov/codecov-action@v5
43 | # with:
44 | # verbose: true
45 | # env:
46 | # CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
47 |
--------------------------------------------------------------------------------
/.github/workflows/pr-build.yml:
--------------------------------------------------------------------------------
1 | name: PR Build
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - main
7 | - dev
8 |
9 | jobs:
10 | build:
11 | if: github.repository == 'zhensherlock/vue-devtools-unlocker'
12 | runs-on: ubuntu-latest
13 | steps:
14 | - name: Checkout
15 | uses: actions/checkout@v4
16 | with:
17 | fetch-depth: 0
18 |
19 | - name: Install Node
20 | uses: actions/setup-node@v4
21 | with:
22 | node-version: 22
23 |
24 | - name: Install PNPM
25 | run: npm i pnpm@latest -g
26 |
27 | - name: Setup npmrc
28 | run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc
29 |
30 | - name: setup pnpm config
31 | run: pnpm config set store-dir $PNPM_CACHE_FOLDER
32 |
33 | - name: Install Package
34 | run: pnpm install
35 |
36 | - name: Build Package
37 | run: pnpm build
38 |
39 | # - name: Test Package
40 | # run: pnpm run test
41 |
42 | - name: Pack Extension
43 | run: pnpm run pack
44 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | on:
4 | release:
5 | types: [created]
6 |
7 | jobs:
8 | build:
9 | if: github.repository == 'zhensherlock/vue-devtools-unlocker'
10 | runs-on: ubuntu-latest
11 | permissions:
12 | contents: write
13 | steps:
14 | - name: Set Version from Release Tag
15 | run: echo "VERSION=${{ github.event.release.tag_name }}" >> $GITHUB_ENV
16 |
17 | - name: Checkout
18 | uses: actions/checkout@v4
19 | with:
20 | fetch-depth: 0
21 |
22 | - name: Install Node
23 | uses: actions/setup-node@v4
24 | with:
25 | node-version: 22
26 |
27 | - name: Install PNPM
28 | run: npm i pnpm@latest -g
29 |
30 | - name: Setup npmrc
31 | run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > .npmrc
32 |
33 | - name: setup pnpm config
34 | run: pnpm config set store-dir $PNPM_CACHE_FOLDER
35 |
36 | - name: Install Package
37 | run: pnpm install
38 |
39 | - name: Build Package
40 | run: pnpm build
41 |
42 | - name: Pack Extension
43 | run: pnpm run pack
44 |
45 | - name: Install GitHub CLI
46 | run: sudo apt-get install gh
47 |
48 | - name: Upload Chrome Extension
49 | env:
50 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
51 | VERSION: ${{ env.VERSION }}
52 | run: gh release upload ${{ github.event.release.tag_name }} "packages/chrome-extension/release/Vue Devtools Unlocker-chrome-${{ env.VERSION }}.zip" --repo ${{ github.repository }}
53 |
54 | - name: Upload Firefox Extension
55 | env:
56 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
57 | VERSION: ${{ env.VERSION }}
58 | run: gh release upload ${{ github.event.release.tag_name }} "packages/firefox-extension/release/Vue Devtools Unlocker-firefox-${{ env.VERSION }}.zip" --repo ${{ github.repository }}
59 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | node_modules/
5 |
6 | # production
7 | build/
8 |
9 | # misc
10 | .DS_Store
11 |
12 | npm-debug.log*
13 |
14 | # packed files
15 | release/
16 |
17 | .idea
18 |
--------------------------------------------------------------------------------
/.husky/commit-msg:
--------------------------------------------------------------------------------
1 | npx --no-install commitlint --edit $1
2 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | npx lint-staged
2 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | v22
2 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | # See https://prettier.io/docs/en/ignore.html for more about ignoring files from Prettier.
2 |
3 | # Ignore artifacts:
4 | build
5 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 120,
3 | "singleQuote": true,
4 | "trailingComma": "es5",
5 | "bracketSpacing": true,
6 | "bracketSameLine": false,
7 | "arrowParens": "always",
8 | "htmlWhitespaceSensitivity": "css",
9 | "insertPragma": false,
10 | "semi": true
11 | }
12 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
6 |
7 | We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
8 |
9 | ## Our Standards
10 |
11 | Examples of behavior that contributes to a positive environment for our community include:
12 |
13 | - Demonstrating empathy and kindness toward other people
14 | - Being respectful of differing opinions, viewpoints, and experiences
15 | - Giving and gracefully accepting constructive feedback
16 | - Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
17 | - Focusing on what is best not just for us as individuals, but for the overall community
18 |
19 | Examples of unacceptable behavior include:
20 |
21 | - The use of sexualized language or imagery, and sexual attention or advances of any kind
22 | - Trolling, insulting or derogatory comments, and personal or political attacks
23 | - Public or private harassment
24 | - Publishing others' private information, such as a physical or email address, without their explicit permission
25 | - Other conduct which could reasonably be considered inappropriate in a professional setting
26 |
27 | ## Enforcement Responsibilities
28 |
29 | Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
30 |
31 | Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
32 |
33 | ## Scope
34 |
35 | This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
36 |
37 | ## Enforcement
38 |
39 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [zhensherlock@126.com](mailto:zhensherlock@126.com). All complaints will be reviewed and investigated promptly and fairly.
40 |
41 | All community leaders are obligated to respect the privacy and security of the reporter of any incident.
42 |
43 | ## Enforcement Guidelines
44 |
45 | Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
46 |
47 | ### 1. Correction
48 |
49 | **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
50 |
51 | **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
52 |
53 | ### 2. Warning
54 |
55 | **Community Impact**: A violation through a single incident or series of actions.
56 |
57 | **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
58 |
59 | ### 3. Temporary Ban
60 |
61 | **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
62 |
63 | **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
64 |
65 | ### 4. Permanent Ban
66 |
67 | **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
68 |
69 | **Consequence**: A permanent ban from any sort of public interaction within the community.
70 |
71 | ## Attribution
72 |
73 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
74 |
75 | Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
76 |
77 | For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations].
78 |
79 | [homepage]: https://www.contributor-covenant.org
80 | [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
81 | [Mozilla CoC]: https://github.com/mozilla/diversity
82 | [FAQ]: https://www.contributor-covenant.org/faq
83 | [translations]: https://www.contributor-covenant.org/translations
84 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 MichaelSun
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 |
2 |
3 |
4 |
5 |
6 |
7 | [![][chrome-web-store-version]][chrome-web-store-link]
8 | [![][chrome-web-store-size]][chrome-web-store-link]
9 | [![][chrome-web-store-last-updated]][chrome-web-store-link]
10 | [![][github-action-build-shield]][github-action-build-link]
11 | [![][github-license-shield]][github-license-link]
12 |
13 |
14 |
15 | # Vue DevTools Unlocker
16 | > A Chrome Extension that enables Vue DevTools in production environments.
17 |
18 | # Translations
19 |
20 | * [中文文档](README_zh.md)
21 |
22 | ## Features
23 |
24 | - 🔑 Unlocks Vue DevTools in production environments
25 | - 🌐 Works with both Vue 2 and Vue 3
26 | - 📦 Shows Vue version information
27 |
28 | ## Install
29 |
30 | [**Chrome** extension](https://chromewebstore.google.com/detail/vue-devtools-unlocker/fbihgkimpchlnlcnbffhbpcghafemopa)
31 |
32 | [**Edge** extension](https://microsoftedge.microsoft.com/addons/detail/vue-devtools-unlocker/lehadmjlbmlapdkapjoapbhhbcpcoepd)
33 |
34 | [**Firefox** extension](https://addons.mozilla.org/zh-CN/firefox/addon/vue-devtools-unlocker/)
35 |
36 | ## Usage
37 |
38 | 1. Install the extension from the Chrome Web Store
39 | 2. Visit any website using Vue.js in production
40 | 3. Open Chrome DevTools (F12 or right-click "Inspect")
41 | 4. Access the Vue panel in DevTools
42 |
43 | ## How It Works
44 |
45 | This extension modifies the Vue instance configuration to enable developer tools at runtime, even in production environments.
46 |
47 | ## Compatibility
48 |
49 | - Chrome 88+
50 | - Vue.js 2.x and 3.x
51 |
52 | ## Maintainers
53 |
54 | [@zhensherlock](https://github.com/zhensherlock).
55 |
56 | ## Contributing
57 |
58 | Feel free to dive in! [Open an issue](https://github.com/zhensherlock/vue-devtools-unlocker/issues/new/choose) or submit PRs.
59 |
60 | Standard Readme follows the [Contributor Covenant](http://contributor-covenant.org/version/1/3/0/) Code of Conduct.
61 |
62 | ### Contributors
63 |
64 | This project exists thanks to all the people who contribute.
65 |
66 |
67 |
68 |
69 |
70 | ## License
71 |
72 | [MIT](LICENSE) © MichaelSun
73 |
74 | [chrome-web-store-link]: https://chromewebstore.google.com/detail/vue-devtools-unlocker/fbihgkimpchlnlcnbffhbpcghafemopa
75 | [chrome-web-store-version]: https://img.shields.io/chrome-web-store/v/fbihgkimpchlnlcnbffhbpcghafemopa?color=1677FF&labelColor=black&logo=chromewebstore&logoColor=white&style=flat-square
76 | [chrome-web-store-size]: https://img.shields.io/chrome-web-store/size/fbihgkimpchlnlcnbffhbpcghafemopa?color=1677FF&labelColor=black&logo=chromewebstore&logoColor=white&style=flat-square
77 | [chrome-web-store-last-updated]: https://img.shields.io/chrome-web-store/last-updated/fbihgkimpchlnlcnbffhbpcghafemopa?color=1677FF&labelColor=black&logo=chromewebstore&logoColor=white&style=flat-square
78 | [github-action-build-link]: https://github.com/zhensherlock/vue-devtools-unlocker/actions/workflows/build.yml
79 | [github-action-build-shield]: https://img.shields.io/github/actions/workflow/status/zhensherlock/vue-devtools-unlocker/build.yml?branch=main&color=1677FF&label=build&labelColor=black&logo=githubactions&logoColor=white&style=flat-square
80 | [github-license-link]: https://github.com/zhensherlock/vue-devtools-unlocker/blob/main/LICENSE
81 | [github-license-shield]: https://img.shields.io/github/license/zhensherlock/vue-devtools-unlocker?color=1677FF&labelColor=black&style=flat-square
82 |
--------------------------------------------------------------------------------
/README_zh.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | [![][chrome-web-store-version]][chrome-web-store-link]
8 | [![][chrome-web-store-size]][chrome-web-store-link]
9 | [![][chrome-web-store-last-updated]][chrome-web-store-link]
10 | [![][github-action-build-shield]][github-action-build-link]
11 | [![][github-license-shield]][github-license-link]
12 |
13 |
14 |
15 | # Vue DevTools Unlocker
16 | > 一个能够在生产环境中启用 Vue DevTools 的 Chrome 扩展。
17 |
18 | ## 功能特性
19 |
20 | - 🔑 在生产环境中解锁 Vue DevTools
21 | - 🌐 同时支持 Vue 2 和 Vue 3
22 | - 📦 显示 Vue 版本信息
23 |
24 | ## 安装
25 |
26 | [**Chrome** 扩展商店](https://chromewebstore.google.com/detail/vue-devtools-unlocker/fbihgkimpchlnlcnbffhbpcghafemopa)
27 |
28 | [**Edge** 扩展商店](https://microsoftedge.microsoft.com/addons/detail/vue-devtools-unlocker/lehadmjlbmlapdkapjoapbhhbcpcoepd)
29 |
30 | [**Firefox** 扩展商店](https://addons.mozilla.org/zh-CN/firefox/addon/vue-devtools-unlocker/)
31 |
32 | ## 使用方法
33 |
34 | 1. 从 Chrome 网上应用店安装扩展
35 | 2. 访问任何使用 Vue.js 的生产环境网站
36 | 3. 打开 Chrome DevTools (F12 或右键点击 "检查")
37 | 4. 在 DevTools 中查看 Vue 面板
38 |
39 | ## 工作原理
40 |
41 | 该扩展通过修改 Vue 实例的配置,在运行时启用开发者工具,即使在生产环境中也能正常工作。
42 |
43 | ## 兼容性
44 |
45 | - Chrome 88+
46 | - Vue.js 2.x 和 3.x
47 |
48 | ## 维护者
49 |
50 | [@zhensherlock](https://github.com/zhensherlock)。
51 |
52 | ## 如何贡献
53 |
54 | 非常欢迎你的加入 或者提交一个 Pull Request。
55 |
56 | 标准 Readme 遵循 [Contributor Covenant](http://contributor-covenant.org/version/1/3/0/) 行为规范。
57 |
58 | ### 贡献者
59 |
60 | 感谢以下参与项目的人:
61 |
62 |
63 |
64 |
65 |
66 | ## 使用许可
67 |
68 | [MIT](LICENSE) © MichaelSun
69 |
70 | [chrome-web-store-link]: https://chromewebstore.google.com/detail/vue-devtools-unlocker/fbihgkimpchlnlcnbffhbpcghafemopa
71 | [chrome-web-store-version]: https://img.shields.io/chrome-web-store/v/fbihgkimpchlnlcnbffhbpcghafemopa?color=1677FF&labelColor=black&logo=chromewebstore&logoColor=white&style=flat-square
72 | [chrome-web-store-size]: https://img.shields.io/chrome-web-store/size/fbihgkimpchlnlcnbffhbpcghafemopa?color=1677FF&labelColor=black&logo=chromewebstore&logoColor=white&style=flat-square
73 | [chrome-web-store-last-updated]: https://img.shields.io/chrome-web-store/last-updated/fbihgkimpchlnlcnbffhbpcghafemopa?color=1677FF&labelColor=black&logo=chromewebstore&logoColor=white&style=flat-square
74 | [github-action-build-link]: https://github.com/zhensherlock/vue-devtools-unlocker/actions/workflows/build.yml
75 | [github-action-build-shield]: https://img.shields.io/github/actions/workflow/status/zhensherlock/vue-devtools-unlocker/build.yml?branch=main&color=1677FF&label=build&labelColor=black&logo=githubactions&logoColor=white&style=flat-square
76 | [github-license-link]: https://github.com/zhensherlock/vue-devtools-unlocker/blob/main/LICENSE
77 | [github-license-shield]: https://img.shields.io/github/license/zhensherlock/vue-devtools-unlocker?color=1677FF&labelColor=black&style=flat-square
78 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | Have you found a security vulnerability? Please report it here: [zhensherlock@126.com](mailto:zhensherlock@126.com).
4 |
5 | Please provide as much details as possible: reproduction steps, screenshots, GIFs, etc.
6 |
7 | Thanks for keeping everyone safe!
8 |
--------------------------------------------------------------------------------
/commitlint.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: ['@commitlint/config-conventional'],
3 | rules: {
4 | // type 类型定义,表示 git 提交的 type 必须在以下类型范围内
5 | 'type-enum': [
6 | 2,
7 | 'always',
8 | [
9 | 'feat', // 新功能
10 | 'fix', // 修复
11 | 'docs', // 文档变更
12 | 'style', // 代码格式
13 | 'refactor', // 重构
14 | 'perf', // 性能优化
15 | 'test', // 增加测试
16 | 'build', // 构建
17 | 'ci', // CI配置
18 | 'chore', // 构建过程或辅助工具的变动
19 | 'revert', // 回退
20 | 'build', // 打包
21 | 'release', // 发版
22 | ],
23 | ],
24 | // subject 大小写不做校验
25 | 'subject-case': [0],
26 | },
27 | }
28 |
--------------------------------------------------------------------------------
/eslint.config.js:
--------------------------------------------------------------------------------
1 | // import tseslint from 'typescript-eslint';
2 | // import prettierPlugin from 'eslint-plugin-prettier';
3 | const tseslint = require('typescript-eslint');
4 | const prettierPlugin = require('eslint-plugin-prettier');
5 |
6 | module.exports = [
7 | // 应用 TypeScript ESLint 推荐配置
8 | ...tseslint.configs.recommended,
9 |
10 | {
11 | ignores: ['node_modules/**', 'build/**', 'release/**', '**/*.json', '**/*.html', '**/*.css', '**/*.js'],
12 | },
13 |
14 | {
15 | files: ['packages/shared/**/*.{js,ts}'],
16 | ignores: ['config/**/*.{js,ts}'],
17 | },
18 |
19 | // 全局配置
20 | {
21 | files: ['packages/**/*.{js,ts}'],
22 |
23 | languageOptions: {
24 | ecmaVersion: 2020,
25 | sourceType: 'module',
26 | parserOptions: {
27 | ecmaVersion: 2020,
28 | sourceType: 'module',
29 | },
30 | globals: {
31 | // 浏览器环境
32 | window: 'readonly',
33 | document: 'readonly',
34 | navigator: 'readonly',
35 | // Chrome 扩展 API
36 | chrome: 'readonly',
37 | },
38 | },
39 |
40 | rules: {
41 | 'prettier/prettier': 'error',
42 | '@typescript-eslint/explicit-function-return-type': 'off',
43 | '@typescript-eslint/no-explicit-any': 'warn',
44 | '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
45 | 'no-console': ['warn', { allow: ['warn', 'error'] }],
46 | },
47 |
48 | plugins: {
49 | prettier: prettierPlugin,
50 | },
51 | },
52 | ];
53 |
--------------------------------------------------------------------------------
/lint-staged.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | 'packages/**/*.{ts,js}': ['npx eslint'],
3 | }
4 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-devtools-unlocker",
3 | "version": "1.0.0",
4 | "description": "Enable Vue DevTools in production environments",
5 | "author": "zhensherlock",
6 | "license": "MIT",
7 | "scripts": {
8 | "dev": "pnpm -r --aggregate-output --filter=./packages/* watch",
9 | "dev:shared": "pnpm -r --aggregate-output --filter=./packages/shared watch",
10 | "dev:chrome": "pnpm -r --aggregate-output --filter=./packages/chrome-extension watch",
11 | "dev:firefox": "pnpm -r --aggregate-output --filter=./packages/firefox-extension watch",
12 | "build": "pnpm -r --aggregate-output --filter=./packages/* build",
13 | "build:shared": "pnpm -r --aggregate-output --filter=./packages/shared build",
14 | "build:chrome": "pnpm -r --aggregate-output --filter=./packages/chrome-extension build",
15 | "build:firefox": "pnpm -r --aggregate-output --filter=./packages/firefox-extension build",
16 | "pack": "pnpm -r --aggregate-output --filter=./packages/* build:zip",
17 | "pack:chrome": "pnpm -r --aggregate-output --filter=./packages/chrome-extension build:zip",
18 | "pack:firefox": "pnpm -r --aggregate-output --filter=./packages/firefox-extension build:zip",
19 | "prepare": "husky"
20 | },
21 | "repository": {
22 | "type": "git",
23 | "url": "git+https://github.com/zhensherlock/vue-devtools-unlocker.git"
24 | },
25 | "bugs": {
26 | "url": "https://github.com/zhensherlock/vue-devtools-unlocker/issues"
27 | },
28 | "devDependencies": {
29 | "@commitlint/cli": "^19.8.1",
30 | "@commitlint/config-conventional": "^19.8.1",
31 | "@types/chrome": "^0.0.326",
32 | "@typescript-eslint/parser": "^8.32.1",
33 | "adm-zip": "^0.5.16",
34 | "copy-webpack-plugin": "^13.0.0",
35 | "css-loader": "^7.1.2",
36 | "eslint": "^9.26.0",
37 | "eslint-plugin-prettier": "^5.4.0",
38 | "file-loader": "^6.2.0",
39 | "husky": "^9.1.7",
40 | "mini-css-extract-plugin": "^2.9.2",
41 | "prettier": "^3.5.3",
42 | "rimraf": "^6.0.1",
43 | "sass": "^1.88.0",
44 | "sass-loader": "^16.0.5",
45 | "terser-webpack-plugin": "^5.3.14",
46 | "ts-loader": "^9.5.2",
47 | "typescript": "^5.8.3",
48 | "typescript-eslint": "^8.32.1",
49 | "webpack": "^5.99.8",
50 | "webpack-cli": "^6.0.1",
51 | "webpack-merge": "^6.0.1"
52 | },
53 | "engines": {
54 | "node": ">=22.0.0"
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/packages/chrome-extension/config/pack.js:
--------------------------------------------------------------------------------
1 | import { readFileSync, existsSync, mkdirSync } from 'fs';
2 | import { dirname, resolve } from 'path';
3 | import AdmZip from 'adm-zip';
4 | import { fileURLToPath } from 'url';
5 |
6 | const __filename = fileURLToPath(import.meta.url);
7 | const __dirname = dirname(__filename);
8 |
9 | try {
10 | const { version, name } = JSON.parse(readFileSync(resolve(__dirname, '../build', 'manifest.json'), 'utf8'));
11 |
12 | const outdir = 'release';
13 | const filename = `${name}-chrome-v${version}.zip`;
14 | const zip = new AdmZip();
15 | zip.addLocalFolder('build');
16 | if (!existsSync(outdir)) {
17 | mkdirSync(outdir);
18 | }
19 | zip.writeZip(`${outdir}/${filename}`);
20 |
21 | console.log(`Success! Created a ${filename} file under ${outdir} directory. You can upload this file to web store.`);
22 | } catch (e) {
23 | console.error('Error! Failed to generate a zip file.', e);
24 | }
25 |
--------------------------------------------------------------------------------
/packages/chrome-extension/config/paths.js:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { fileURLToPath } from 'url';
3 | import { dirname } from 'path';
4 |
5 | const __filename = fileURLToPath(import.meta.url);
6 | const __dirname = dirname(__filename);
7 |
8 | const PATHS = {
9 | src: path.resolve(__dirname, '../src'),
10 | build: path.resolve(__dirname, '../build'),
11 | };
12 |
13 | export default PATHS;
14 |
--------------------------------------------------------------------------------
/packages/chrome-extension/config/webpack.common.js:
--------------------------------------------------------------------------------
1 | import CopyWebpackPlugin from 'copy-webpack-plugin';
2 | import MiniCssExtractPlugin from 'mini-css-extract-plugin';
3 |
4 | import PATHS from './paths.js';
5 |
6 | // used in the module rules and in the stats exlude list
7 | const IMAGE_TYPES = /\.(png|jpe?g|gif|svg)$/i;
8 |
9 | // To re-use webpack configuration across templates,
10 | // CLI maintains a common webpack configuration file - `webpack.common.js`.
11 | // Whenever user creates an extension, CLI adds `webpack.common.js` file
12 | // in template's `config` folder
13 | const common = {
14 | output: {
15 | // the build folder to output bundles and assets in.
16 | path: PATHS.build,
17 | // the filename template for entry chunks
18 | filename: '[name].js',
19 | clean: true,
20 | },
21 | stats: {
22 | all: false,
23 | errors: true,
24 | builtAt: true,
25 | assets: true,
26 | excludeAssets: [IMAGE_TYPES],
27 | },
28 | module: {
29 | rules: [
30 | // Check for TypeScript files
31 | {
32 | test: /\.ts$/,
33 | use: ['ts-loader'],
34 | },
35 | // Help webpack in understanding CSS files imported in .js files
36 | {
37 | test: /\.(css|scss|sass)$/,
38 | use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
39 | },
40 | // Check for images imported in .js files and
41 | {
42 | test: IMAGE_TYPES,
43 | use: [
44 | {
45 | loader: 'file-loader',
46 | options: {
47 | outputPath: 'images',
48 | name: '[name].[ext]',
49 | },
50 | },
51 | ],
52 | },
53 | ],
54 | },
55 | resolve: {
56 | alias: {
57 | '@': PATHS.src,
58 | },
59 | // Help webpack resolve these extensions in order
60 | extensions: ['.ts', '.js'],
61 | },
62 | plugins: [
63 | // Copy static assets from `public` folder to `build` folder
64 | new CopyWebpackPlugin({
65 | patterns: [
66 | {
67 | from: 'chrome-manifest.json',
68 | to: 'manifest.json',
69 | context: '../../public',
70 | },
71 | {
72 | from: '**/*',
73 | context: '../../public',
74 | globOptions: {
75 | ignore: ['**/firefox-manifest.json', '**/chrome-manifest.json'],
76 | },
77 | },
78 | ],
79 | }),
80 | // Extract CSS into separate files
81 | new MiniCssExtractPlugin({
82 | filename: '[name].css',
83 | }),
84 | ],
85 | };
86 |
87 | export default common;
88 |
--------------------------------------------------------------------------------
/packages/chrome-extension/config/webpack.config.js:
--------------------------------------------------------------------------------
1 | import TerserPlugin from 'terser-webpack-plugin';
2 | import { merge } from 'webpack-merge';
3 | import common from './webpack.common.js';
4 | import PATHS from './paths.js';
5 |
6 | // Merge webpack configuration files
7 | const config = (env, argv) => {
8 | const isProduction = argv.mode === 'production';
9 | return merge(common, {
10 | entry: {
11 | popup: PATHS.src + '/popup.ts',
12 | contentScript: PATHS.src + '/contentScript.ts',
13 | background: PATHS.src + '/background.ts',
14 | injectedScript: PATHS.src + '/injectedScript.ts',
15 | options: PATHS.src + '/options.ts',
16 | },
17 | devtool: isProduction ? false : 'source-map',
18 | optimization: {
19 | minimize: isProduction,
20 | minimizer: [
21 | new TerserPlugin({
22 | terserOptions: {
23 | compress: {
24 | drop_console: true,
25 | },
26 | },
27 | }),
28 | ],
29 | },
30 | });
31 | };
32 |
33 | export default config;
34 |
--------------------------------------------------------------------------------
/packages/chrome-extension/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@vue-devtools-unlocker/chrome-extension",
3 | "version": "1.1.0",
4 | "description": "Enable Vue DevTools in production environments in Chrome browser",
5 | "type": "module",
6 | "scripts": {
7 | "clean": "rimraf build",
8 | "watch": "webpack --mode=development --watch --config config/webpack.config.js",
9 | "build": "npm run clean && webpack --mode=production --config config/webpack.config.js",
10 | "build:zip": "npm run build && node ./config/pack.js",
11 | "format": "prettier --write --ignore-unknown \"{config,public,src}/**/*.{html,css,js,ts,json}\"",
12 | "lint": "eslint --ext .ts,.js src/",
13 | "lint:fix": "eslint --ext .ts,.js src/ --fix"
14 | },
15 | "repository": {
16 | "type": "git",
17 | "url": "git+https://github.com/zhensherlock/vue-devtools-unlocker.git"
18 | },
19 | "bugs": {
20 | "url": "https://github.com/zhensherlock/vue-devtools-unlocker/issues"
21 | },
22 | "dependencies": {
23 | "@vue-devtools-unlocker/shared": "workspace:^"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/packages/chrome-extension/src/background.ts:
--------------------------------------------------------------------------------
1 | import { checkAllowedStatus } from '@vue-devtools-unlocker/shared';
2 |
3 | // Store Vue DevTools unlock status for each tab
4 | const tabStatus: Record = {};
5 |
6 | // Listen for messages from content script
7 | chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
8 | if (message.type === 'VueDevtoolsStatus' && sender.tab?.id) {
9 | // Store unlock status for current tab
10 | tabStatus[sender.tab.id] = message.payload;
11 | console.log(tabStatus);
12 | sendResponse({ success: true });
13 | }
14 | });
15 |
16 | // Listen for popup open event
17 | chrome.runtime.onConnect.addListener((port) => {
18 | if (port.name === 'popup') {
19 | port.postMessage({
20 | type: 'VueDevtoolsStatus',
21 | payload: {
22 | loading: true,
23 | },
24 | });
25 | // When popup connects, query the current active tab
26 | chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
27 | if (tabs[0] && tabs[0].id) {
28 | const tabId = tabs[0].id;
29 | let retryCount = 0;
30 | const MAX_RETRIES = 5; // (5 * 500ms = 2500ms)
31 |
32 | const checkStatus = () => {
33 | if (tabStatus[tabId]) {
34 | port.postMessage({
35 | type: 'VueDevtoolsStatus',
36 | payload: tabStatus[tabId],
37 | });
38 | } else if (retryCount < MAX_RETRIES) {
39 | retryCount++;
40 | setTimeout(checkStatus, 500);
41 | } else {
42 | // 超时后发送错误状态
43 | port.postMessage({
44 | type: 'VueDevtoolsStatus',
45 | payload: {
46 | success: false,
47 | message: 'Unable to detect Vue application status. Please refresh the page and try again.',
48 | },
49 | });
50 | }
51 | };
52 |
53 | checkStatus();
54 | }
55 | });
56 | }
57 | });
58 |
59 | chrome.tabs.onRemoved.addListener((tabId) => {
60 | delete tabStatus[tabId];
61 | });
62 |
63 | chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
64 | delete tabStatus[tabId];
65 | if (changeInfo.status === 'complete' && tab.url) {
66 | checkAllowedStatus(tabId, tab.url);
67 | }
68 | });
69 |
--------------------------------------------------------------------------------
/packages/chrome-extension/src/contentScript.ts:
--------------------------------------------------------------------------------
1 | import { injectScriptFile } from '@vue-devtools-unlocker/shared';
2 |
3 | chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
4 | if (message.type === 'CheckIsAllowed' && message.isAllowed) {
5 | injectScriptFile('injectedScript.js');
6 | window.addEventListener('message', (event) => {
7 | if (event.data?.source === 'vue-devtools-unlocker') {
8 | chrome.runtime.sendMessage(event.data);
9 | }
10 | });
11 |
12 | sendResponse({ success: true });
13 | } else {
14 | chrome.runtime.sendMessage({
15 | source: 'vue-devtools-unlocker',
16 | type: 'VueDevtoolsStatus',
17 | payload: {
18 | success: false,
19 | isNotAllowed: true,
20 | message: 'This page is not allowed to use Vue DevTools.',
21 | },
22 | });
23 | }
24 | });
25 |
--------------------------------------------------------------------------------
/packages/chrome-extension/src/injectedScript.ts:
--------------------------------------------------------------------------------
1 | import { getVueInstanceWithRetry, unlockVueDevTools } from '@vue-devtools-unlocker/shared';
2 |
3 | const devtools = window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
4 |
5 | const postMessageToExtension = (type: string = 'VueDevtoolsMessage', payload: unknown) => {
6 | window.postMessage(
7 | {
8 | source: 'vue-devtools-unlocker',
9 | type,
10 | payload,
11 | },
12 | '*'
13 | );
14 | };
15 |
16 | if (devtools) {
17 | const version = window.__VUE__ ? 3 : 2;
18 |
19 | getVueInstanceWithRetry(version).then((instance) => {
20 | if (instance) {
21 | const { vueVersion } = unlockVueDevTools(devtools, version, instance);
22 | postMessageToExtension('VueDevtoolsStatus', {
23 | success: true,
24 | message: 'Vue DevTools unlocked successfully.',
25 | vueVersion,
26 | });
27 | } else {
28 | postMessageToExtension('VueDevtoolsStatus', {
29 | success: false,
30 | message: 'Vue instance not found.',
31 | });
32 | }
33 | });
34 | } else {
35 | postMessageToExtension('VueDevtoolsStatus', {
36 | success: false,
37 | message: 'Vue DevTools not found.',
38 | });
39 | }
40 |
--------------------------------------------------------------------------------
/packages/chrome-extension/src/options.scss:
--------------------------------------------------------------------------------
1 | *,
2 | *::before,
3 | *::after {
4 | margin: 0;
5 | padding: 0;
6 | box-sizing: border-box;
7 | }
8 |
9 | :root {
10 | --primary-color: #42b883;
11 | --secondary-color: #35495e;
12 | --background-color: #f8f8f8;
13 | --text-color: #2c3e50;
14 | --border-color: #e0e0e0;
15 | --success-color: #42b883;
16 | --error-color: #ff5252;
17 | }
18 |
19 | html {
20 | font-family:
21 | -apple-system,
22 | BlinkMacSystemFont,
23 | Segoe UI,
24 | Helvetica,
25 | Arial,
26 | sans-serif;
27 | }
28 |
29 | body {
30 | width: 400px;
31 | color: var(--text-color);
32 | }
33 |
34 | .container {
35 | background: #fff;
36 | padding: 20px;
37 | border-radius: 8px;
38 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
39 | }
40 |
41 | h1 {
42 | color: var(--secondary-color);
43 | margin-bottom: 20px;
44 | }
45 |
46 | main {
47 | margin-bottom: 20px;
48 |
49 | label {
50 | display: block;
51 | margin-bottom: 10px;
52 | color: var(--text-color);
53 | }
54 |
55 | textarea {
56 | width: 100%;
57 | height: 150px;
58 | padding: 10px;
59 | border: 1px solid var(--border-color);
60 | border-radius: 4px;
61 | font-family: monospace;
62 | resize: none;
63 | }
64 |
65 | .help-text {
66 | font-size: 12px;
67 | color: #666;
68 | margin-top: 5px;
69 | }
70 | }
71 |
72 | button {
73 | background: var(--primary-color);
74 | color: #fff;
75 | border: none;
76 | padding: 8px 16px;
77 | border-radius: 4px;
78 | cursor: pointer;
79 |
80 | &:hover {
81 | background: #3aa876;
82 | }
83 | }
84 |
85 |
--------------------------------------------------------------------------------
/packages/chrome-extension/src/options.ts:
--------------------------------------------------------------------------------
1 | import { getAllowedSites, setAllowedSites } from '@vue-devtools-unlocker/shared';
2 | import '@/options.scss';
3 |
4 | document.addEventListener('DOMContentLoaded', () => {
5 | const textarea = document.getElementById('allowedSites') as HTMLTextAreaElement;
6 | const saveButton = document.getElementById('save') as HTMLButtonElement;
7 |
8 | // Load saved settings
9 | getAllowedSites((text) => {
10 | textarea.value = text;
11 | });
12 |
13 | // Save settings
14 | saveButton.addEventListener('click', () => {
15 | const sites = textarea.value
16 | .split('\n')
17 | .map((site) => site.trim())
18 | .filter((site) => site.length > 0);
19 |
20 | setAllowedSites(sites, () => {
21 | saveButton.textContent = 'Saved!';
22 | setTimeout(() => {
23 | saveButton.textContent = 'Save Settings';
24 | }, 2000);
25 | });
26 | });
27 | });
28 |
--------------------------------------------------------------------------------
/packages/chrome-extension/src/popup.scss:
--------------------------------------------------------------------------------
1 | *,
2 | *::before,
3 | *::after {
4 | margin: 0;
5 | padding: 0;
6 | box-sizing: border-box;
7 | }
8 |
9 | :root {
10 | --primary-color: #42b883;
11 | --secondary-color: #35495e;
12 | --background-color: #f8f8f8;
13 | --text-color: #2c3e50;
14 | --border-color: #e0e0e0;
15 | --success-color: #42b883;
16 | --error-color: #ff5252;
17 | }
18 |
19 | html {
20 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif;
21 | }
22 |
23 | body {
24 | width: 300px;
25 | color: var(--text-color);
26 | }
27 |
28 | .container {
29 | display: flex;
30 | flex-direction: column;
31 | background-color: var(--background-color);
32 | overflow: hidden;
33 | }
34 |
35 | header {
36 | display: flex;
37 | align-items: center;
38 | padding: 12px 16px;
39 | background-color: white;
40 | color: var(--secondary-color);
41 | border-bottom: 1px solid var(--border-color);
42 |
43 | h1 {
44 | font-size: 16px;
45 | font-weight: 600;
46 | }
47 |
48 | .logo {
49 | width: 24px;
50 | height: 24px;
51 | margin-right: 10px;
52 | }
53 | }
54 |
55 | main {
56 | flex: 1;
57 | padding: 16px;
58 |
59 | .status-container {
60 | padding: 12px;
61 | border-radius: 6px;
62 | font-size: 14px;
63 | line-height: 1.5;
64 | background-color: white;
65 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
66 | border: 1px solid var(--border-color);
67 |
68 | h3 {
69 | margin-bottom: 8px;
70 | }
71 | }
72 |
73 | .status-success {
74 | border-left: 4px solid var(--success-color);
75 |
76 | h3 {
77 | color: var(--success-color);
78 | }
79 | }
80 |
81 | .status-error {
82 | border-left: 4px solid var(--error-color);
83 |
84 | h3 {
85 | color: var(--error-color);
86 | }
87 | }
88 |
89 | .loading {
90 | display: flex;
91 | align-items: center;
92 | gap: 10px;
93 | }
94 |
95 | .version-info {
96 | margin-top: 8px;
97 |
98 | .version-tag {
99 | display: inline-block;
100 | padding: 2px 6px;
101 | background-color: var(--primary-color);
102 | color: white;
103 | border-radius: 4px;
104 | font-size: 12px;
105 | margin-left: 6px;
106 | }
107 | }
108 |
109 | .guide-text {
110 | margin-top: 8px;
111 | font-size: 12px;
112 | color: #666;
113 | }
114 |
115 | .guide-steps {
116 | margin-top: 4px;
117 | padding-left: 20px;
118 | }
119 |
120 | .spinner {
121 | width: 16px;
122 | height: 16px;
123 | border: 2px solid rgba(66, 184, 131, 0.2);
124 | border-top-color: var(--primary-color);
125 | border-radius: 50%;
126 | animation: spin 1s linear infinite;
127 | }
128 |
129 | @keyframes spin {
130 | to {
131 | transform: rotate(360deg);
132 | }
133 | }
134 | }
135 |
136 | footer {
137 | padding: 10px 16px;
138 | text-align: center;
139 | font-size: 12px;
140 | border-top: 1px solid var(--border-color);
141 | display: flex;
142 | justify-content: center;
143 | gap: 16px;
144 |
145 | .github-link, .settings-link {
146 | color: var(--secondary-color);
147 | text-decoration: none;
148 | display: inline-flex;
149 | align-items: center;
150 | gap: 4px;
151 | }
152 |
153 | .github-link:hover, .settings-link:hover {
154 | text-decoration: underline;
155 | }
156 | }
157 |
--------------------------------------------------------------------------------
/packages/chrome-extension/src/popup.ts:
--------------------------------------------------------------------------------
1 | import '@/popup.scss';
2 |
3 | (function () {
4 | // Connect to background script
5 | const port = chrome.runtime.connect({ name: 'popup' });
6 |
7 | // Connect to background script
8 | port.onMessage.addListener((message) => {
9 | if (message.type === 'VueDevtoolsStatus') {
10 | const data = message.payload;
11 |
12 | const statusElement = document.getElementById('status');
13 | if (!statusElement) {
14 | return;
15 | }
16 | if (data.loading) {
17 | statusElement.className = 'status-container';
18 | statusElement.innerHTML = `
19 |
20 |
21 |
Checking Vue DevTools status...
22 |
`;
23 | return;
24 | }
25 | if (data.success) {
26 | statusElement.className = 'status-container status-success';
27 | statusElement.innerHTML = `
28 |
29 |
✅ Unlocked Successfully
30 |
Vue DevTools has been successfully unlocked!
31 |
32 | Vue Version: ${data.vueVersion || 'Unknown'}
33 |
34 |
`;
35 | } else {
36 | statusElement.className = 'status-container status-error';
37 | statusElement.innerHTML = `
38 |
39 |
❌ Unlock Failed
40 |
${data.message || 'Unknown error'}
41 | ${
42 | data.isNotAllowed
43 | ? `
44 |
45 | To enable Vue DevTools on this page:
46 |
47 | - Click the "Settings" button below
48 | - Add this website to the allowed sites list
49 | - Refresh this page
50 |
51 | `
52 | : ''
53 | }
54 |
55 | `;
56 | }
57 | }
58 | });
59 | })();
60 |
61 | document.addEventListener('DOMContentLoaded', () => {
62 | const settingsButton = document.getElementById('openSettings');
63 | if (settingsButton) {
64 | settingsButton.addEventListener('click', (e) => {
65 | e.preventDefault();
66 | chrome.runtime.openOptionsPage();
67 | });
68 | }
69 | });
70 |
--------------------------------------------------------------------------------
/packages/chrome-extension/src/types/global.d.ts:
--------------------------------------------------------------------------------
1 | import type { VueDevtoolsHook } from '@vue-devtools-unlocker/shared';
2 |
3 | declare global {
4 | interface Window {
5 | __VUE_DEVTOOLS_GLOBAL_HOOK__: VueDevtoolsHook;
6 | __VUE__: boolean;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/packages/chrome-extension/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.root.json",
3 | "compilerOptions": {
4 | "baseUrl": ".",
5 | "rootDir": "."
6 | },
7 | "include": ["src"]
8 | }
9 |
--------------------------------------------------------------------------------
/packages/firefox-extension/config/pack.js:
--------------------------------------------------------------------------------
1 | import { readFileSync, existsSync, mkdirSync } from 'fs';
2 | import { dirname, resolve } from 'path';
3 | import AdmZip from 'adm-zip';
4 | import { fileURLToPath } from 'url';
5 |
6 | const __filename = fileURLToPath(import.meta.url);
7 | const __dirname = dirname(__filename);
8 |
9 | try {
10 | const { version, name } = JSON.parse(readFileSync(resolve(__dirname, '../build', 'manifest.json'), 'utf8'));
11 |
12 | const outdir = 'release';
13 | const filename = `${name}-firefox-v${version}.zip`;
14 | const zip = new AdmZip();
15 | zip.addLocalFolder('build');
16 | if (!existsSync(outdir)) {
17 | mkdirSync(outdir);
18 | }
19 | zip.writeZip(`${outdir}/${filename}`);
20 |
21 | console.log(`Success! Created a ${filename} file under ${outdir} directory. You can upload this file to web store.`);
22 | } catch (e) {
23 | console.error('Error! Failed to generate a zip file.', e);
24 | }
25 |
--------------------------------------------------------------------------------
/packages/firefox-extension/config/paths.js:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { fileURLToPath } from 'url';
3 | import { dirname } from 'path';
4 |
5 | const __filename = fileURLToPath(import.meta.url);
6 | const __dirname = dirname(__filename);
7 |
8 | const PATHS = {
9 | src: path.resolve(__dirname, '../src'),
10 | build: path.resolve(__dirname, '../build'),
11 | };
12 |
13 | export default PATHS;
14 |
--------------------------------------------------------------------------------
/packages/firefox-extension/config/webpack.common.js:
--------------------------------------------------------------------------------
1 | import CopyWebpackPlugin from 'copy-webpack-plugin';
2 | import MiniCssExtractPlugin from 'mini-css-extract-plugin';
3 |
4 | import PATHS from './paths.js';
5 |
6 | // used in the module rules and in the stats exlude list
7 | const IMAGE_TYPES = /\.(png|jpe?g|gif|svg)$/i;
8 |
9 | // To re-use webpack configuration across templates,
10 | // CLI maintains a common webpack configuration file - `webpack.common.js`.
11 | // Whenever user creates an extension, CLI adds `webpack.common.js` file
12 | // in template's `config` folder
13 | const common = {
14 | output: {
15 | // the build folder to output bundles and assets in.
16 | path: PATHS.build,
17 | // the filename template for entry chunks
18 | filename: '[name].js',
19 | clean: true,
20 | },
21 | stats: {
22 | all: false,
23 | errors: true,
24 | builtAt: true,
25 | assets: true,
26 | excludeAssets: [IMAGE_TYPES],
27 | },
28 | module: {
29 | rules: [
30 | // Check for TypeScript files
31 | {
32 | test: /\.ts$/,
33 | use: ['ts-loader'],
34 | },
35 | // Help webpack in understanding CSS files imported in .js files
36 | {
37 | test: /\.(css|scss|sass)$/,
38 | use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
39 | },
40 | // Check for images imported in .js files and
41 | {
42 | test: IMAGE_TYPES,
43 | use: [
44 | {
45 | loader: 'file-loader',
46 | options: {
47 | outputPath: 'images',
48 | name: '[name].[ext]',
49 | },
50 | },
51 | ],
52 | },
53 | ],
54 | },
55 | resolve: {
56 | alias: {
57 | '@': PATHS.src,
58 | },
59 | // Help webpack resolve these extensions in order
60 | extensions: ['.ts', '.js'],
61 | },
62 | plugins: [
63 | // Copy static assets from `public` folder to `build` folder
64 | new CopyWebpackPlugin({
65 | patterns: [
66 | {
67 | from: 'firefox-manifest.json',
68 | to: 'manifest.json',
69 | context: '../../public',
70 | },
71 | {
72 | from: '**/*',
73 | context: '../../public',
74 | globOptions: {
75 | ignore: ['**/firefox-manifest.json', '**/chrome-manifest.json'],
76 | },
77 | },
78 | ],
79 | }),
80 | // Extract CSS into separate files
81 | new MiniCssExtractPlugin({
82 | filename: '[name].css',
83 | }),
84 | ],
85 | };
86 |
87 | export default common;
88 |
--------------------------------------------------------------------------------
/packages/firefox-extension/config/webpack.config.js:
--------------------------------------------------------------------------------
1 | import TerserPlugin from 'terser-webpack-plugin';
2 | import { merge } from 'webpack-merge';
3 | import common from './webpack.common.js';
4 | import PATHS from './paths.js';
5 |
6 | // Merge webpack configuration files
7 | const config = (env, argv) => {
8 | const isProduction = argv.mode === 'production';
9 | return merge(common, {
10 | entry: {
11 | popup: PATHS.src + '/popup.ts',
12 | contentScript: PATHS.src + '/contentScript.ts',
13 | background: PATHS.src + '/background.ts',
14 | injectedScript: PATHS.src + '/injectedScript.ts',
15 | options: PATHS.src + '/options.ts',
16 | },
17 | devtool: isProduction ? false : 'source-map',
18 | optimization: {
19 | minimize: isProduction,
20 | minimizer: [
21 | new TerserPlugin({
22 | terserOptions: {
23 | compress: {
24 | drop_console: true,
25 | },
26 | },
27 | }),
28 | ],
29 | },
30 | });
31 | };
32 |
33 | export default config;
34 |
--------------------------------------------------------------------------------
/packages/firefox-extension/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@vue-devtools-unlocker/firefox-extension",
3 | "version": "1.1.0",
4 | "description": "Enable Vue DevTools in production environments in Firefox browser",
5 | "type": "module",
6 | "scripts": {
7 | "clean": "rimraf build",
8 | "watch": "webpack --mode=development --watch --config config/webpack.config.js",
9 | "build": "npm run clean && webpack --mode=production --config config/webpack.config.js",
10 | "build:zip": "npm run build && node ./config/pack.js",
11 | "format": "prettier --write --ignore-unknown \"{config,public,src}/**/*.{html,css,js,ts,json}\"",
12 | "lint": "eslint --ext .ts,.js src/",
13 | "lint:fix": "eslint --ext .ts,.js src/ --fix"
14 | },
15 | "repository": {
16 | "type": "git",
17 | "url": "git+https://github.com/zhensherlock/vue-devtools-unlocker.git"
18 | },
19 | "bugs": {
20 | "url": "https://github.com/zhensherlock/vue-devtools-unlocker/issues"
21 | },
22 | "dependencies": {
23 | "@vue-devtools-unlocker/shared": "workspace:^"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/packages/firefox-extension/src/background.ts:
--------------------------------------------------------------------------------
1 | import { checkAllowedStatus } from '@vue-devtools-unlocker/shared';
2 |
3 | // Store Vue DevTools unlock status for each tab
4 | const tabStatus: Record = {};
5 |
6 | // Listen for messages from content script
7 | chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
8 | if (message.type === 'VueDevtoolsStatus' && sender.tab?.id) {
9 | // Store unlock status for current tab
10 | tabStatus[sender.tab.id] = message.payload;
11 | console.log(tabStatus);
12 | sendResponse({ success: true });
13 | }
14 | });
15 |
16 | // Listen for popup open event
17 | chrome.runtime.onConnect.addListener((port) => {
18 | if (port.name === 'popup') {
19 | port.postMessage({
20 | type: 'VueDevtoolsStatus',
21 | payload: {
22 | loading: true,
23 | },
24 | });
25 | // When popup connects, query the current active tab
26 | chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
27 | if (tabs[0] && tabs[0].id) {
28 | const tabId = tabs[0].id;
29 | let retryCount = 0;
30 | const MAX_RETRIES = 5; // (5 * 500ms = 2500ms)
31 |
32 | const checkStatus = () => {
33 | if (tabStatus[tabId]) {
34 | port.postMessage({
35 | type: 'VueDevtoolsStatus',
36 | payload: tabStatus[tabId],
37 | });
38 | } else if (retryCount < MAX_RETRIES) {
39 | retryCount++;
40 | setTimeout(checkStatus, 500);
41 | } else {
42 | // 超时后发送错误状态
43 | port.postMessage({
44 | type: 'VueDevtoolsStatus',
45 | payload: {
46 | success: false,
47 | message: 'Unable to detect Vue application status. Please refresh the page and try again.',
48 | },
49 | });
50 | }
51 | };
52 |
53 | checkStatus();
54 | }
55 | });
56 | }
57 | });
58 |
59 | chrome.tabs.onRemoved.addListener((tabId) => {
60 | delete tabStatus[tabId];
61 | });
62 |
63 | chrome.tabs.onUpdated.addListener((tabId, _changeInfo, tab) => {
64 | delete tabStatus[tabId];
65 | if (tab.url) {
66 | checkAllowedStatus(tabId, tab.url);
67 | }
68 | });
69 |
--------------------------------------------------------------------------------
/packages/firefox-extension/src/contentScript.ts:
--------------------------------------------------------------------------------
1 | import { injectScriptFile } from '@vue-devtools-unlocker/shared';
2 |
3 | chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
4 | if (message.type === 'CheckIsAllowed' && message.isAllowed) {
5 | injectScriptFile('injectedScript.js');
6 | window.addEventListener('message', (event) => {
7 | if (event.data?.source === 'vue-devtools-unlocker') {
8 | chrome.runtime.sendMessage(event.data);
9 | }
10 | });
11 |
12 | sendResponse({ success: true });
13 | } else {
14 | chrome.runtime.sendMessage({
15 | source: 'vue-devtools-unlocker',
16 | type: 'VueDevtoolsStatus',
17 | payload: {
18 | success: false,
19 | isNotAllowed: true,
20 | message: 'This page is not allowed to use Vue DevTools.',
21 | },
22 | });
23 | }
24 | });
25 |
--------------------------------------------------------------------------------
/packages/firefox-extension/src/injectedScript.ts:
--------------------------------------------------------------------------------
1 | import { getVueInstanceWithRetry, unlockVueDevTools } from '@vue-devtools-unlocker/shared';
2 |
3 | const devtools = window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
4 |
5 | const postMessageToExtension = (type: string = 'VueDevtoolsMessage', payload: unknown) => {
6 | window.postMessage(
7 | {
8 | source: 'vue-devtools-unlocker',
9 | type,
10 | payload,
11 | },
12 | '*'
13 | );
14 | };
15 |
16 | if (devtools) {
17 | const version = window.__VUE__ ? 3 : 2;
18 |
19 | getVueInstanceWithRetry(version).then((instance) => {
20 | if (instance) {
21 | const { vueVersion } = unlockVueDevTools(devtools, version, instance);
22 | postMessageToExtension('VueDevtoolsStatus', {
23 | success: true,
24 | message: 'Vue DevTools unlocked successfully.',
25 | vueVersion,
26 | });
27 | } else {
28 | postMessageToExtension('VueDevtoolsStatus', {
29 | success: false,
30 | message: 'Vue instance not found.',
31 | });
32 | }
33 | });
34 | } else {
35 | postMessageToExtension('VueDevtoolsStatus', {
36 | success: false,
37 | message: 'Vue DevTools not found.',
38 | });
39 | }
40 |
--------------------------------------------------------------------------------
/packages/firefox-extension/src/options.scss:
--------------------------------------------------------------------------------
1 | *,
2 | *::before,
3 | *::after {
4 | margin: 0;
5 | padding: 0;
6 | box-sizing: border-box;
7 | }
8 |
9 | :root {
10 | --primary-color: #42b883;
11 | --secondary-color: #35495e;
12 | --background-color: #f8f8f8;
13 | --text-color: #2c3e50;
14 | --border-color: #e0e0e0;
15 | --success-color: #42b883;
16 | --error-color: #ff5252;
17 | }
18 |
19 | html {
20 | font-family:
21 | -apple-system,
22 | BlinkMacSystemFont,
23 | Segoe UI,
24 | Helvetica,
25 | Arial,
26 | sans-serif;
27 | }
28 |
29 | body {
30 | width: 400px;
31 | color: var(--text-color);
32 | }
33 |
34 | .container {
35 | background: #fff;
36 | padding: 20px;
37 | border-radius: 8px;
38 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
39 | }
40 |
41 | h1 {
42 | color: var(--secondary-color);
43 | margin-bottom: 20px;
44 | }
45 |
46 | main {
47 | margin-bottom: 20px;
48 |
49 | label {
50 | display: block;
51 | margin-bottom: 10px;
52 | color: var(--text-color);
53 | }
54 |
55 | textarea {
56 | width: 100%;
57 | height: 150px;
58 | padding: 10px;
59 | border: 1px solid var(--border-color);
60 | border-radius: 4px;
61 | font-family: monospace;
62 | resize: none;
63 | }
64 |
65 | .help-text {
66 | font-size: 12px;
67 | color: #666;
68 | margin-top: 5px;
69 | }
70 | }
71 |
72 | button {
73 | background: var(--primary-color);
74 | color: #fff;
75 | border: none;
76 | padding: 8px 16px;
77 | border-radius: 4px;
78 | cursor: pointer;
79 |
80 | &:hover {
81 | background: #3aa876;
82 | }
83 | }
84 |
85 |
--------------------------------------------------------------------------------
/packages/firefox-extension/src/options.ts:
--------------------------------------------------------------------------------
1 | import { getAllowedSites, setAllowedSites } from '@vue-devtools-unlocker/shared';
2 | import '@/options.scss';
3 |
4 | document.addEventListener('DOMContentLoaded', () => {
5 | const textarea = document.getElementById('allowedSites') as HTMLTextAreaElement;
6 | const saveButton = document.getElementById('save') as HTMLButtonElement;
7 |
8 | // Load saved settings
9 | getAllowedSites((text) => {
10 | textarea.value = text;
11 | });
12 |
13 | // Save settings
14 | saveButton.addEventListener('click', () => {
15 | const sites = textarea.value
16 | .split('\n')
17 | .map((site) => site.trim())
18 | .filter((site) => site.length > 0);
19 |
20 | setAllowedSites(sites, () => {
21 | saveButton.textContent = 'Saved!';
22 | setTimeout(() => {
23 | saveButton.textContent = 'Save Settings';
24 | }, 2000);
25 | });
26 | });
27 | });
28 |
--------------------------------------------------------------------------------
/packages/firefox-extension/src/popup.scss:
--------------------------------------------------------------------------------
1 | *,
2 | *::before,
3 | *::after {
4 | margin: 0;
5 | padding: 0;
6 | box-sizing: border-box;
7 | }
8 |
9 | :root {
10 | --primary-color: #42b883;
11 | --secondary-color: #35495e;
12 | --background-color: #f8f8f8;
13 | --text-color: #2c3e50;
14 | --border-color: #e0e0e0;
15 | --success-color: #42b883;
16 | --error-color: #ff5252;
17 | }
18 |
19 | html {
20 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif;
21 | }
22 |
23 | body {
24 | width: 300px;
25 | color: var(--text-color);
26 | }
27 |
28 | .container {
29 | display: flex;
30 | flex-direction: column;
31 | background-color: var(--background-color);
32 | overflow: hidden;
33 | }
34 |
35 | header {
36 | display: flex;
37 | align-items: center;
38 | padding: 12px 16px;
39 | background-color: white;
40 | color: var(--secondary-color);
41 | border-bottom: 1px solid var(--border-color);
42 |
43 | h1 {
44 | font-size: 16px;
45 | font-weight: 600;
46 | }
47 |
48 | .logo {
49 | width: 24px;
50 | height: 24px;
51 | margin-right: 10px;
52 | }
53 | }
54 |
55 | main {
56 | flex: 1;
57 | padding: 16px;
58 |
59 | .status-container {
60 | padding: 12px;
61 | border-radius: 6px;
62 | font-size: 14px;
63 | line-height: 1.5;
64 | background-color: white;
65 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
66 | border: 1px solid var(--border-color);
67 |
68 | h3 {
69 | margin-bottom: 8px;
70 | }
71 | }
72 |
73 | .status-success {
74 | border-left: 4px solid var(--success-color);
75 |
76 | h3 {
77 | color: var(--success-color);
78 | }
79 | }
80 |
81 | .status-error {
82 | border-left: 4px solid var(--error-color);
83 |
84 | h3 {
85 | color: var(--error-color);
86 | }
87 | }
88 |
89 | .loading {
90 | display: flex;
91 | align-items: center;
92 | gap: 10px;
93 | }
94 |
95 | .version-info {
96 | margin-top: 8px;
97 |
98 | .version-tag {
99 | display: inline-block;
100 | padding: 2px 6px;
101 | background-color: var(--primary-color);
102 | color: white;
103 | border-radius: 4px;
104 | font-size: 12px;
105 | margin-left: 6px;
106 | }
107 | }
108 |
109 | .guide-text {
110 | margin-top: 8px;
111 | font-size: 12px;
112 | color: #666;
113 | }
114 |
115 | .guide-steps {
116 | margin-top: 4px;
117 | padding-left: 20px;
118 | }
119 |
120 | .spinner {
121 | width: 16px;
122 | height: 16px;
123 | border: 2px solid rgba(66, 184, 131, 0.2);
124 | border-top-color: var(--primary-color);
125 | border-radius: 50%;
126 | animation: spin 1s linear infinite;
127 | }
128 |
129 | @keyframes spin {
130 | to {
131 | transform: rotate(360deg);
132 | }
133 | }
134 | }
135 |
136 | footer {
137 | padding: 10px 16px;
138 | text-align: center;
139 | font-size: 12px;
140 | border-top: 1px solid var(--border-color);
141 | display: flex;
142 | justify-content: center;
143 | gap: 16px;
144 |
145 | .github-link, .settings-link {
146 | color: var(--secondary-color);
147 | text-decoration: none;
148 | display: inline-flex;
149 | align-items: center;
150 | gap: 4px;
151 | }
152 |
153 | .github-link:hover, .settings-link:hover {
154 | text-decoration: underline;
155 | }
156 | }
157 |
--------------------------------------------------------------------------------
/packages/firefox-extension/src/popup.ts:
--------------------------------------------------------------------------------
1 | import '@/popup.scss';
2 |
3 | (function () {
4 | // Connect to background script
5 | const port = chrome.runtime.connect({ name: 'popup' });
6 |
7 | // Connect to background script
8 | port.onMessage.addListener((message) => {
9 | if (message.type === 'VueDevtoolsStatus') {
10 | const data = message.payload;
11 |
12 | const statusElement = document.getElementById('status');
13 | if (!statusElement) {
14 | return;
15 | }
16 | if (data.loading) {
17 | statusElement.className = 'status-container';
18 | statusElement.innerHTML = `
19 |
20 |
21 |
Checking Vue DevTools status...
22 |
`;
23 | return;
24 | }
25 | if (data.success) {
26 | statusElement.className = 'status-container status-success';
27 | statusElement.innerHTML = `
28 |
29 |
✅ Unlocked Successfully
30 |
Vue DevTools has been successfully unlocked!
31 |
32 | Vue Version: ${data.vueVersion || 'Unknown'}
33 |
34 |
`;
35 | } else {
36 | statusElement.className = 'status-container status-error';
37 | statusElement.innerHTML = `
38 |
39 |
❌ Unlock Failed
40 |
${data.message || 'Unknown error'}
41 | ${
42 | data.isNotAllowed
43 | ? `
44 |
45 | To enable Vue DevTools on this page:
46 |
47 | - Click the "Settings" button below
48 | - Add this website to the allowed sites list
49 | - Refresh this page
50 |
51 | `
52 | : ''
53 | }
54 |
55 | `;
56 | }
57 | }
58 | });
59 | })();
60 |
61 | document.addEventListener('DOMContentLoaded', () => {
62 | const settingsButton = document.getElementById('openSettings');
63 | if (settingsButton) {
64 | settingsButton.addEventListener('click', (e) => {
65 | e.preventDefault();
66 | chrome.runtime.openOptionsPage();
67 | });
68 | }
69 | });
70 |
--------------------------------------------------------------------------------
/packages/firefox-extension/src/types/global.d.ts:
--------------------------------------------------------------------------------
1 | import type { VueDevtoolsHook } from '@vue-devtools-unlocker/shared';
2 |
3 | declare global {
4 | interface Window {
5 | __VUE_DEVTOOLS_GLOBAL_HOOK__: VueDevtoolsHook;
6 | __VUE__: boolean;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/packages/firefox-extension/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.root.json",
3 | "compilerOptions": {
4 | "baseUrl": ".",
5 | "rootDir": "."
6 | },
7 | "include": ["src"]
8 | }
9 |
--------------------------------------------------------------------------------
/packages/shared/config/paths.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | const PATHS = {
4 | src: path.resolve(__dirname, '../src'),
5 | build: path.resolve(__dirname, '../build'),
6 | };
7 |
8 | module.exports = PATHS;
9 |
--------------------------------------------------------------------------------
/packages/shared/config/webpack.common.js:
--------------------------------------------------------------------------------
1 | const MiniCssExtractPlugin = require('mini-css-extract-plugin');
2 |
3 | const PATHS = require('./paths');
4 |
5 | // used in the module rules and in the stats exlude list
6 | const IMAGE_TYPES = /\.(png|jpe?g|gif|svg)$/i;
7 |
8 | // To re-use webpack configuration across templates,
9 | // CLI maintains a common webpack configuration file - `webpack.common.js`.
10 | // Whenever user creates an extension, CLI adds `webpack.common.js` file
11 | // in template's `config` folder
12 | const common = {
13 | output: {
14 | // the build folder to output bundles and assets in.
15 | path: PATHS.build,
16 | // the filename template for entry chunks
17 | filename: '[name].js',
18 | clean: true,
19 | library: {
20 | type: 'commonjs2',
21 | },
22 | },
23 | stats: {
24 | all: false,
25 | errors: true,
26 | builtAt: true,
27 | assets: true,
28 | excludeAssets: [IMAGE_TYPES],
29 | },
30 | module: {
31 | rules: [
32 | // Check for TypeScript files
33 | {
34 | test: /\.ts$/,
35 | use: ['ts-loader'],
36 | },
37 | // Help webpack in understanding CSS files imported in .js files
38 | {
39 | test: /\.css$/,
40 | use: [MiniCssExtractPlugin.loader, 'css-loader'],
41 | },
42 | // Check for images imported in .js files and
43 | {
44 | test: IMAGE_TYPES,
45 | use: [
46 | {
47 | loader: 'file-loader',
48 | options: {
49 | outputPath: 'images',
50 | name: '[name].[ext]',
51 | },
52 | },
53 | ],
54 | },
55 | ],
56 | },
57 | resolve: {
58 | alias: {
59 | '@': PATHS.src,
60 | },
61 | // Help webpack resolve these extensions in order
62 | extensions: ['.ts', '.js'],
63 | },
64 | plugins: [
65 | // Extract CSS into separate files
66 | new MiniCssExtractPlugin({
67 | filename: '[name].css',
68 | }),
69 | ],
70 | };
71 |
72 | module.exports = common;
73 |
--------------------------------------------------------------------------------
/packages/shared/config/webpack.config.js:
--------------------------------------------------------------------------------
1 | const TerserPlugin = require('terser-webpack-plugin');
2 | const { merge } = require('webpack-merge');
3 |
4 | const common = require('./webpack.common.js');
5 | const PATHS = require('./paths');
6 |
7 | // Merge webpack configuration files
8 | const config = (env, argv) => {
9 | const isProduction = argv.mode === 'production';
10 | return merge(common, {
11 | entry: {
12 | main: PATHS.src + '/main.ts',
13 | },
14 | devtool: isProduction ? false : 'source-map',
15 | optimization: {
16 | minimize: isProduction,
17 | minimizer: [
18 | new TerserPlugin({
19 | terserOptions: {
20 | compress: {
21 | drop_console: true,
22 | },
23 | },
24 | }),
25 | ],
26 | },
27 | });
28 | };
29 |
30 | module.exports = config;
31 |
--------------------------------------------------------------------------------
/packages/shared/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@vue-devtools-unlocker/shared",
3 | "version": "1.1.0",
4 | "description": "Enable Vue DevTools in production environments",
5 | "author": "zhensherlock",
6 | "license": "MIT",
7 | "main": "build/main.js",
8 | "types": "build/types/main.d.ts",
9 | "scripts": {
10 | "watch": "webpack --mode=development --watch --config config/webpack.config.js",
11 | "build": "webpack --mode=production --config config/webpack.config.js",
12 | "format": "prettier --write --ignore-unknown \"{config,public,src}/**/*.{html,css,js,ts,json}\"",
13 | "lint": "eslint --ext .ts,.js src/",
14 | "lint:fix": "eslint --ext .ts,.js src/ --fix"
15 | },
16 | "repository": {
17 | "type": "git",
18 | "url": "git+https://github.com/zhensherlock/vue-devtools-unlocker.git"
19 | },
20 | "bugs": {
21 | "url": "https://github.com/zhensherlock/vue-devtools-unlocker/issues"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/packages/shared/src/main.ts:
--------------------------------------------------------------------------------
1 | export * from './utils';
2 | export * from './types';
3 |
--------------------------------------------------------------------------------
/packages/shared/src/types/index.ts:
--------------------------------------------------------------------------------
1 | export interface VueDevtoolsHook {
2 | enabled?: boolean;
3 | emit: (event: string, ...args: unknown[]) => void;
4 | }
5 |
6 | export interface Vue2Instance {
7 | super?: Vue2Instance;
8 | version: string;
9 | config: {
10 | devtools: boolean;
11 | globalProperties: {
12 | $pinia?: {
13 | use: () => void;
14 | };
15 | $router?: {
16 | use: () => void;
17 | };
18 | };
19 | };
20 | }
21 |
22 | export interface Vue3Instance {
23 | version: string;
24 | }
25 |
26 | export interface VueInstance extends Vue2Instance, Vue3Instance {}
27 |
--------------------------------------------------------------------------------
/packages/shared/src/utils/index.ts:
--------------------------------------------------------------------------------
1 | import type { Vue2Instance, VueDevtoolsHook, VueInstance } from '@/types';
2 |
3 | const getVueInstance = (version: number): VueInstance | undefined => {
4 | const vueKey = version === 2 ? '__vue__' : '__vue_app__';
5 | const elements = Array.from(document.querySelectorAll>('*'));
6 | return elements.find((element) => element[vueKey])?.[vueKey] as VueInstance | undefined;
7 | };
8 |
9 | export const injectScriptFile = (filePath: string) => {
10 | const script = document.createElement('script');
11 | script.src = chrome.runtime.getURL(filePath);
12 | (document.head || document.documentElement).appendChild(script);
13 | script.onload = () => script.remove();
14 | };
15 |
16 | export const getVueInstanceWithRetry = async (
17 | version: number,
18 | maxRetries: number = 2,
19 | interval: number = 1000
20 | ): Promise => {
21 | for (let attempt = 0; attempt <= maxRetries; attempt++) {
22 | const vueInstance = getVueInstance(version);
23 |
24 | if (vueInstance !== undefined) {
25 | return vueInstance;
26 | }
27 |
28 | if (attempt < maxRetries) {
29 | await new Promise((resolve) => setTimeout(resolve, interval));
30 | }
31 | }
32 |
33 | return undefined;
34 | };
35 |
36 | export const getAllowedSites = (callback: (text: string) => void) => {
37 | chrome.storage.sync.get('allowedSites', (result) => {
38 | if (result.allowedSites) {
39 | const text = (result.allowedSites?.join('\n') || '') as string;
40 | callback(text);
41 | }
42 | });
43 | };
44 |
45 | export const setAllowedSites = (allowedSites: string[], callback: () => void) => {
46 | chrome.storage.sync.set({ allowedSites }, () => {
47 | callback();
48 | });
49 | };
50 |
51 | export const checkAllowedStatus = (tabId: number, url: string) => {
52 | chrome.storage.sync.get({ allowedSites: [] }, (data) => {
53 | const allowedSites = data.allowedSites as string[];
54 | console.log(allowedSites);
55 | const isAllowed = isUrlAllowed(url, allowedSites);
56 | console.log(isAllowed);
57 |
58 | chrome.tabs.sendMessage(tabId, { type: 'CheckIsAllowed', isAllowed }).catch(() => {});
59 | });
60 | };
61 |
62 | export const isUrlAllowed = (url: string, allowedDomains: string[]) => {
63 | if (!allowedDomains || allowedDomains.length === 0) {
64 | return true;
65 | }
66 |
67 | try {
68 | const hostname = new URL(url).hostname;
69 |
70 | return allowedDomains.some((domainPattern) => {
71 | if (domainPattern.startsWith('*.')) {
72 | const baseDomain = domainPattern.substring(2);
73 | return hostname === baseDomain || hostname.endsWith('.' + baseDomain);
74 | }
75 | return hostname === domainPattern;
76 | });
77 | } catch {
78 | console.error('Invalid URL:', url);
79 | return false;
80 | }
81 | };
82 |
83 | export const unlockPinia = (vueInstance: VueInstance) => {
84 | if (!vueInstance?.config?.globalProperties?.$pinia) {
85 | return;
86 | }
87 | const pinia = vueInstance?.config?.globalProperties?.$pinia;
88 | console.log(pinia);
89 | // pinia.use(devtoolsPlugin);
90 | // registerPiniaDevtools(vueInstance, pinia);
91 | };
92 |
93 | export const unlockRouter = (vueInstance: VueInstance) => {
94 | if (!vueInstance?.config?.globalProperties?.$router) {
95 | return;
96 | }
97 | const router = vueInstance?.config?.globalProperties?.$router;
98 | // addDevtools(router);
99 | // console.log(router);
100 | };
101 |
102 | export const unlockVueDevTools = (devtools: VueDevtoolsHook, version: number, vueInstance: VueInstance) => {
103 | let vueVersion: string;
104 | if (version === 3) {
105 | // Vue 3
106 | vueVersion = vueInstance.version;
107 | devtools.enabled = true;
108 | devtools.emit('app:init', vueInstance, vueVersion, {
109 | Fragment: Symbol.for('v-fgt'),
110 | Text: Symbol.for('v-txt'),
111 | Comment: Symbol.for('v-cmt'),
112 | Static: Symbol.for('v-stc'),
113 | });
114 | // unlockPinia(vueInstance);
115 | // unlockRouter(vueInstance);
116 | } else {
117 | // Vue 2
118 | let vue2Constructor = Object.getPrototypeOf(vueInstance).constructor as Vue2Instance;
119 | while (vue2Constructor.super) {
120 | vue2Constructor = vue2Constructor.super;
121 | }
122 | vueVersion = vue2Constructor.version;
123 | vue2Constructor.config.devtools = true;
124 | devtools.emit('init', vue2Constructor);
125 | }
126 | return {
127 | vueVersion,
128 | };
129 | };
130 |
--------------------------------------------------------------------------------
/packages/shared/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.root.json",
3 | "compilerOptions": {
4 | "baseUrl": ".",
5 | "rootDir": "./src",
6 | "outDir": "build/types",
7 | "declaration": true,
8 | "sourceMap": true
9 | },
10 | "include": ["src"]
11 | }
12 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | devDependencies:
11 | '@commitlint/cli':
12 | specifier: ^19.8.1
13 | version: 19.8.1(@types/node@22.13.10)(typescript@5.8.3)
14 | '@commitlint/config-conventional':
15 | specifier: ^19.8.1
16 | version: 19.8.1
17 | '@types/chrome':
18 | specifier: ^0.0.326
19 | version: 0.0.326
20 | '@typescript-eslint/parser':
21 | specifier: ^8.32.1
22 | version: 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
23 | adm-zip:
24 | specifier: ^0.5.16
25 | version: 0.5.16
26 | copy-webpack-plugin:
27 | specifier: ^13.0.0
28 | version: 13.0.0(webpack@5.99.9)
29 | css-loader:
30 | specifier: ^7.1.2
31 | version: 7.1.2(webpack@5.99.9)
32 | eslint:
33 | specifier: ^9.26.0
34 | version: 9.28.0(jiti@2.4.2)
35 | eslint-plugin-prettier:
36 | specifier: ^5.4.0
37 | version: 5.4.1(@types/eslint@9.6.1)(eslint@9.28.0(jiti@2.4.2))(prettier@3.5.3)
38 | file-loader:
39 | specifier: ^6.2.0
40 | version: 6.2.0(webpack@5.99.9)
41 | husky:
42 | specifier: ^9.1.7
43 | version: 9.1.7
44 | mini-css-extract-plugin:
45 | specifier: ^2.9.2
46 | version: 2.9.2(webpack@5.99.9)
47 | prettier:
48 | specifier: ^3.5.3
49 | version: 3.5.3
50 | rimraf:
51 | specifier: ^6.0.1
52 | version: 6.0.1
53 | sass:
54 | specifier: ^1.88.0
55 | version: 1.89.2
56 | sass-loader:
57 | specifier: ^16.0.5
58 | version: 16.0.5(sass@1.89.2)(webpack@5.99.9)
59 | terser-webpack-plugin:
60 | specifier: ^5.3.14
61 | version: 5.3.14(webpack@5.99.9)
62 | ts-loader:
63 | specifier: ^9.5.2
64 | version: 9.5.2(typescript@5.8.3)(webpack@5.99.9)
65 | typescript:
66 | specifier: ^5.8.3
67 | version: 5.8.3
68 | typescript-eslint:
69 | specifier: ^8.32.1
70 | version: 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
71 | webpack:
72 | specifier: ^5.99.8
73 | version: 5.99.9(webpack-cli@6.0.1)
74 | webpack-cli:
75 | specifier: ^6.0.1
76 | version: 6.0.1(webpack@5.99.9)
77 | webpack-merge:
78 | specifier: ^6.0.1
79 | version: 6.0.1
80 |
81 | packages/chrome-extension:
82 | dependencies:
83 | '@vue-devtools-unlocker/shared':
84 | specifier: workspace:^
85 | version: link:../shared
86 |
87 | packages/firefox-extension:
88 | dependencies:
89 | '@vue-devtools-unlocker/shared':
90 | specifier: workspace:^
91 | version: link:../shared
92 |
93 | packages/shared: {}
94 |
95 | packages:
96 |
97 | '@babel/code-frame@7.27.1':
98 | resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
99 | engines: {node: '>=6.9.0'}
100 |
101 | '@babel/helper-validator-identifier@7.27.1':
102 | resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
103 | engines: {node: '>=6.9.0'}
104 |
105 | '@commitlint/cli@19.8.1':
106 | resolution: {integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==}
107 | engines: {node: '>=v18'}
108 | hasBin: true
109 |
110 | '@commitlint/config-conventional@19.8.1':
111 | resolution: {integrity: sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==}
112 | engines: {node: '>=v18'}
113 |
114 | '@commitlint/config-validator@19.8.1':
115 | resolution: {integrity: sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==}
116 | engines: {node: '>=v18'}
117 |
118 | '@commitlint/ensure@19.8.1':
119 | resolution: {integrity: sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==}
120 | engines: {node: '>=v18'}
121 |
122 | '@commitlint/execute-rule@19.8.1':
123 | resolution: {integrity: sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==}
124 | engines: {node: '>=v18'}
125 |
126 | '@commitlint/format@19.8.1':
127 | resolution: {integrity: sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==}
128 | engines: {node: '>=v18'}
129 |
130 | '@commitlint/is-ignored@19.8.1':
131 | resolution: {integrity: sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==}
132 | engines: {node: '>=v18'}
133 |
134 | '@commitlint/lint@19.8.1':
135 | resolution: {integrity: sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==}
136 | engines: {node: '>=v18'}
137 |
138 | '@commitlint/load@19.8.1':
139 | resolution: {integrity: sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==}
140 | engines: {node: '>=v18'}
141 |
142 | '@commitlint/message@19.8.1':
143 | resolution: {integrity: sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==}
144 | engines: {node: '>=v18'}
145 |
146 | '@commitlint/parse@19.8.1':
147 | resolution: {integrity: sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==}
148 | engines: {node: '>=v18'}
149 |
150 | '@commitlint/read@19.8.1':
151 | resolution: {integrity: sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==}
152 | engines: {node: '>=v18'}
153 |
154 | '@commitlint/resolve-extends@19.8.1':
155 | resolution: {integrity: sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==}
156 | engines: {node: '>=v18'}
157 |
158 | '@commitlint/rules@19.8.1':
159 | resolution: {integrity: sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==}
160 | engines: {node: '>=v18'}
161 |
162 | '@commitlint/to-lines@19.8.1':
163 | resolution: {integrity: sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==}
164 | engines: {node: '>=v18'}
165 |
166 | '@commitlint/top-level@19.8.1':
167 | resolution: {integrity: sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==}
168 | engines: {node: '>=v18'}
169 |
170 | '@commitlint/types@19.8.1':
171 | resolution: {integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==}
172 | engines: {node: '>=v18'}
173 |
174 | '@discoveryjs/json-ext@0.6.3':
175 | resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==}
176 | engines: {node: '>=14.17.0'}
177 |
178 | '@eslint-community/eslint-utils@4.7.0':
179 | resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
180 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
181 | peerDependencies:
182 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
183 |
184 | '@eslint-community/regexpp@4.12.1':
185 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
186 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
187 |
188 | '@eslint/config-array@0.20.0':
189 | resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
190 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
191 |
192 | '@eslint/config-helpers@0.2.2':
193 | resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==}
194 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
195 |
196 | '@eslint/core@0.14.0':
197 | resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
198 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
199 |
200 | '@eslint/eslintrc@3.3.1':
201 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
202 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
203 |
204 | '@eslint/js@9.28.0':
205 | resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==}
206 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
207 |
208 | '@eslint/object-schema@2.1.6':
209 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
210 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
211 |
212 | '@eslint/plugin-kit@0.3.1':
213 | resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==}
214 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
215 |
216 | '@humanfs/core@0.19.1':
217 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
218 | engines: {node: '>=18.18.0'}
219 |
220 | '@humanfs/node@0.16.6':
221 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
222 | engines: {node: '>=18.18.0'}
223 |
224 | '@humanwhocodes/module-importer@1.0.1':
225 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
226 | engines: {node: '>=12.22'}
227 |
228 | '@humanwhocodes/retry@0.3.1':
229 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
230 | engines: {node: '>=18.18'}
231 |
232 | '@humanwhocodes/retry@0.4.3':
233 | resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
234 | engines: {node: '>=18.18'}
235 |
236 | '@isaacs/cliui@8.0.2':
237 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
238 | engines: {node: '>=12'}
239 |
240 | '@jridgewell/gen-mapping@0.3.8':
241 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
242 | engines: {node: '>=6.0.0'}
243 |
244 | '@jridgewell/resolve-uri@3.1.2':
245 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
246 | engines: {node: '>=6.0.0'}
247 |
248 | '@jridgewell/set-array@1.2.1':
249 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
250 | engines: {node: '>=6.0.0'}
251 |
252 | '@jridgewell/source-map@0.3.6':
253 | resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
254 |
255 | '@jridgewell/sourcemap-codec@1.5.0':
256 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
257 |
258 | '@jridgewell/trace-mapping@0.3.25':
259 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
260 |
261 | '@nodelib/fs.scandir@2.1.5':
262 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
263 | engines: {node: '>= 8'}
264 |
265 | '@nodelib/fs.stat@2.0.5':
266 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
267 | engines: {node: '>= 8'}
268 |
269 | '@nodelib/fs.walk@1.2.8':
270 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
271 | engines: {node: '>= 8'}
272 |
273 | '@parcel/watcher-android-arm64@2.5.1':
274 | resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
275 | engines: {node: '>= 10.0.0'}
276 | cpu: [arm64]
277 | os: [android]
278 |
279 | '@parcel/watcher-darwin-arm64@2.5.1':
280 | resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
281 | engines: {node: '>= 10.0.0'}
282 | cpu: [arm64]
283 | os: [darwin]
284 |
285 | '@parcel/watcher-darwin-x64@2.5.1':
286 | resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
287 | engines: {node: '>= 10.0.0'}
288 | cpu: [x64]
289 | os: [darwin]
290 |
291 | '@parcel/watcher-freebsd-x64@2.5.1':
292 | resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
293 | engines: {node: '>= 10.0.0'}
294 | cpu: [x64]
295 | os: [freebsd]
296 |
297 | '@parcel/watcher-linux-arm-glibc@2.5.1':
298 | resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
299 | engines: {node: '>= 10.0.0'}
300 | cpu: [arm]
301 | os: [linux]
302 |
303 | '@parcel/watcher-linux-arm-musl@2.5.1':
304 | resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
305 | engines: {node: '>= 10.0.0'}
306 | cpu: [arm]
307 | os: [linux]
308 |
309 | '@parcel/watcher-linux-arm64-glibc@2.5.1':
310 | resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
311 | engines: {node: '>= 10.0.0'}
312 | cpu: [arm64]
313 | os: [linux]
314 |
315 | '@parcel/watcher-linux-arm64-musl@2.5.1':
316 | resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
317 | engines: {node: '>= 10.0.0'}
318 | cpu: [arm64]
319 | os: [linux]
320 |
321 | '@parcel/watcher-linux-x64-glibc@2.5.1':
322 | resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
323 | engines: {node: '>= 10.0.0'}
324 | cpu: [x64]
325 | os: [linux]
326 |
327 | '@parcel/watcher-linux-x64-musl@2.5.1':
328 | resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
329 | engines: {node: '>= 10.0.0'}
330 | cpu: [x64]
331 | os: [linux]
332 |
333 | '@parcel/watcher-win32-arm64@2.5.1':
334 | resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
335 | engines: {node: '>= 10.0.0'}
336 | cpu: [arm64]
337 | os: [win32]
338 |
339 | '@parcel/watcher-win32-ia32@2.5.1':
340 | resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
341 | engines: {node: '>= 10.0.0'}
342 | cpu: [ia32]
343 | os: [win32]
344 |
345 | '@parcel/watcher-win32-x64@2.5.1':
346 | resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
347 | engines: {node: '>= 10.0.0'}
348 | cpu: [x64]
349 | os: [win32]
350 |
351 | '@parcel/watcher@2.5.1':
352 | resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
353 | engines: {node: '>= 10.0.0'}
354 |
355 | '@pkgr/core@0.2.4':
356 | resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==}
357 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
358 |
359 | '@types/chrome@0.0.326':
360 | resolution: {integrity: sha512-WS7jKf3ZRZFHOX7dATCZwqNJgdfiSF0qBRFxaO0LhIOvTNBrfkab26bsZwp6EBpYtqp8loMHJTnD6vDTLWPKYw==}
361 |
362 | '@types/conventional-commits-parser@5.0.1':
363 | resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==}
364 |
365 | '@types/eslint-scope@3.7.7':
366 | resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
367 |
368 | '@types/eslint@9.6.1':
369 | resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
370 |
371 | '@types/estree@1.0.7':
372 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
373 |
374 | '@types/filesystem@0.0.36':
375 | resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==}
376 |
377 | '@types/filewriter@0.0.33':
378 | resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==}
379 |
380 | '@types/har-format@1.2.16':
381 | resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==}
382 |
383 | '@types/json-schema@7.0.15':
384 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
385 |
386 | '@types/node@22.13.10':
387 | resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==}
388 |
389 | '@typescript-eslint/eslint-plugin@8.34.0':
390 | resolution: {integrity: sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==}
391 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
392 | peerDependencies:
393 | '@typescript-eslint/parser': ^8.34.0
394 | eslint: ^8.57.0 || ^9.0.0
395 | typescript: '>=4.8.4 <5.9.0'
396 |
397 | '@typescript-eslint/parser@8.34.0':
398 | resolution: {integrity: sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==}
399 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
400 | peerDependencies:
401 | eslint: ^8.57.0 || ^9.0.0
402 | typescript: '>=4.8.4 <5.9.0'
403 |
404 | '@typescript-eslint/project-service@8.34.0':
405 | resolution: {integrity: sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==}
406 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
407 | peerDependencies:
408 | typescript: '>=4.8.4 <5.9.0'
409 |
410 | '@typescript-eslint/scope-manager@8.34.0':
411 | resolution: {integrity: sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==}
412 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
413 |
414 | '@typescript-eslint/tsconfig-utils@8.34.0':
415 | resolution: {integrity: sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==}
416 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
417 | peerDependencies:
418 | typescript: '>=4.8.4 <5.9.0'
419 |
420 | '@typescript-eslint/type-utils@8.34.0':
421 | resolution: {integrity: sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==}
422 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
423 | peerDependencies:
424 | eslint: ^8.57.0 || ^9.0.0
425 | typescript: '>=4.8.4 <5.9.0'
426 |
427 | '@typescript-eslint/types@8.34.0':
428 | resolution: {integrity: sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==}
429 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
430 |
431 | '@typescript-eslint/typescript-estree@8.34.0':
432 | resolution: {integrity: sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==}
433 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
434 | peerDependencies:
435 | typescript: '>=4.8.4 <5.9.0'
436 |
437 | '@typescript-eslint/utils@8.34.0':
438 | resolution: {integrity: sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==}
439 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
440 | peerDependencies:
441 | eslint: ^8.57.0 || ^9.0.0
442 | typescript: '>=4.8.4 <5.9.0'
443 |
444 | '@typescript-eslint/visitor-keys@8.34.0':
445 | resolution: {integrity: sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==}
446 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
447 |
448 | '@webassemblyjs/ast@1.14.1':
449 | resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
450 |
451 | '@webassemblyjs/floating-point-hex-parser@1.13.2':
452 | resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
453 |
454 | '@webassemblyjs/helper-api-error@1.13.2':
455 | resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
456 |
457 | '@webassemblyjs/helper-buffer@1.14.1':
458 | resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
459 |
460 | '@webassemblyjs/helper-numbers@1.13.2':
461 | resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
462 |
463 | '@webassemblyjs/helper-wasm-bytecode@1.13.2':
464 | resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
465 |
466 | '@webassemblyjs/helper-wasm-section@1.14.1':
467 | resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
468 |
469 | '@webassemblyjs/ieee754@1.13.2':
470 | resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
471 |
472 | '@webassemblyjs/leb128@1.13.2':
473 | resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
474 |
475 | '@webassemblyjs/utf8@1.13.2':
476 | resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
477 |
478 | '@webassemblyjs/wasm-edit@1.14.1':
479 | resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
480 |
481 | '@webassemblyjs/wasm-gen@1.14.1':
482 | resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
483 |
484 | '@webassemblyjs/wasm-opt@1.14.1':
485 | resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
486 |
487 | '@webassemblyjs/wasm-parser@1.14.1':
488 | resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
489 |
490 | '@webassemblyjs/wast-printer@1.14.1':
491 | resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
492 |
493 | '@webpack-cli/configtest@3.0.1':
494 | resolution: {integrity: sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==}
495 | engines: {node: '>=18.12.0'}
496 | peerDependencies:
497 | webpack: ^5.82.0
498 | webpack-cli: 6.x.x
499 |
500 | '@webpack-cli/info@3.0.1':
501 | resolution: {integrity: sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==}
502 | engines: {node: '>=18.12.0'}
503 | peerDependencies:
504 | webpack: ^5.82.0
505 | webpack-cli: 6.x.x
506 |
507 | '@webpack-cli/serve@3.0.1':
508 | resolution: {integrity: sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==}
509 | engines: {node: '>=18.12.0'}
510 | peerDependencies:
511 | webpack: ^5.82.0
512 | webpack-cli: 6.x.x
513 | webpack-dev-server: '*'
514 | peerDependenciesMeta:
515 | webpack-dev-server:
516 | optional: true
517 |
518 | '@xtuc/ieee754@1.2.0':
519 | resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
520 |
521 | '@xtuc/long@4.2.2':
522 | resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
523 |
524 | JSONStream@1.3.5:
525 | resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
526 | hasBin: true
527 |
528 | acorn-jsx@5.3.2:
529 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
530 | peerDependencies:
531 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
532 |
533 | acorn@8.14.1:
534 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
535 | engines: {node: '>=0.4.0'}
536 | hasBin: true
537 |
538 | adm-zip@0.5.16:
539 | resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
540 | engines: {node: '>=12.0'}
541 |
542 | ajv-formats@2.1.1:
543 | resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
544 | peerDependencies:
545 | ajv: ^8.0.0
546 | peerDependenciesMeta:
547 | ajv:
548 | optional: true
549 |
550 | ajv-keywords@3.5.2:
551 | resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
552 | peerDependencies:
553 | ajv: ^6.9.1
554 |
555 | ajv-keywords@5.1.0:
556 | resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
557 | peerDependencies:
558 | ajv: ^8.8.2
559 |
560 | ajv@6.12.6:
561 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
562 |
563 | ajv@8.17.1:
564 | resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
565 |
566 | ansi-regex@5.0.1:
567 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
568 | engines: {node: '>=8'}
569 |
570 | ansi-regex@6.1.0:
571 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
572 | engines: {node: '>=12'}
573 |
574 | ansi-styles@4.3.0:
575 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
576 | engines: {node: '>=8'}
577 |
578 | ansi-styles@6.2.1:
579 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
580 | engines: {node: '>=12'}
581 |
582 | argparse@2.0.1:
583 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
584 |
585 | array-ify@1.0.0:
586 | resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
587 |
588 | balanced-match@1.0.2:
589 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
590 |
591 | big.js@5.2.2:
592 | resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
593 |
594 | brace-expansion@1.1.11:
595 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
596 |
597 | brace-expansion@2.0.1:
598 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
599 |
600 | braces@3.0.3:
601 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
602 | engines: {node: '>=8'}
603 |
604 | browserslist@4.24.5:
605 | resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==}
606 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
607 | hasBin: true
608 |
609 | buffer-from@1.1.2:
610 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
611 |
612 | callsites@3.1.0:
613 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
614 | engines: {node: '>=6'}
615 |
616 | caniuse-lite@1.0.30001718:
617 | resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==}
618 |
619 | chalk@4.1.2:
620 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
621 | engines: {node: '>=10'}
622 |
623 | chalk@5.4.1:
624 | resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
625 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
626 |
627 | chokidar@4.0.3:
628 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
629 | engines: {node: '>= 14.16.0'}
630 |
631 | chrome-trace-event@1.0.4:
632 | resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
633 | engines: {node: '>=6.0'}
634 |
635 | cliui@8.0.1:
636 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
637 | engines: {node: '>=12'}
638 |
639 | clone-deep@4.0.1:
640 | resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
641 | engines: {node: '>=6'}
642 |
643 | color-convert@2.0.1:
644 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
645 | engines: {node: '>=7.0.0'}
646 |
647 | color-name@1.1.4:
648 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
649 |
650 | colorette@2.0.20:
651 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
652 |
653 | commander@12.1.0:
654 | resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
655 | engines: {node: '>=18'}
656 |
657 | commander@2.20.3:
658 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
659 |
660 | compare-func@2.0.0:
661 | resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
662 |
663 | concat-map@0.0.1:
664 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
665 |
666 | conventional-changelog-angular@7.0.0:
667 | resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
668 | engines: {node: '>=16'}
669 |
670 | conventional-changelog-conventionalcommits@7.0.2:
671 | resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==}
672 | engines: {node: '>=16'}
673 |
674 | conventional-commits-parser@5.0.0:
675 | resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==}
676 | engines: {node: '>=16'}
677 | hasBin: true
678 |
679 | copy-webpack-plugin@13.0.0:
680 | resolution: {integrity: sha512-FgR/h5a6hzJqATDGd9YG41SeDViH+0bkHn6WNXCi5zKAZkeESeSxLySSsFLHqLEVCh0E+rITmCf0dusXWYukeQ==}
681 | engines: {node: '>= 18.12.0'}
682 | peerDependencies:
683 | webpack: ^5.1.0
684 |
685 | cosmiconfig-typescript-loader@6.1.0:
686 | resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==}
687 | engines: {node: '>=v18'}
688 | peerDependencies:
689 | '@types/node': '*'
690 | cosmiconfig: '>=9'
691 | typescript: '>=5'
692 |
693 | cosmiconfig@9.0.0:
694 | resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
695 | engines: {node: '>=14'}
696 | peerDependencies:
697 | typescript: '>=4.9.5'
698 | peerDependenciesMeta:
699 | typescript:
700 | optional: true
701 |
702 | cross-spawn@7.0.6:
703 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
704 | engines: {node: '>= 8'}
705 |
706 | css-loader@7.1.2:
707 | resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==}
708 | engines: {node: '>= 18.12.0'}
709 | peerDependencies:
710 | '@rspack/core': 0.x || 1.x
711 | webpack: ^5.27.0
712 | peerDependenciesMeta:
713 | '@rspack/core':
714 | optional: true
715 | webpack:
716 | optional: true
717 |
718 | cssesc@3.0.0:
719 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
720 | engines: {node: '>=4'}
721 | hasBin: true
722 |
723 | dargs@8.1.0:
724 | resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
725 | engines: {node: '>=12'}
726 |
727 | debug@4.4.1:
728 | resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
729 | engines: {node: '>=6.0'}
730 | peerDependencies:
731 | supports-color: '*'
732 | peerDependenciesMeta:
733 | supports-color:
734 | optional: true
735 |
736 | deep-is@0.1.4:
737 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
738 |
739 | detect-libc@1.0.3:
740 | resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
741 | engines: {node: '>=0.10'}
742 | hasBin: true
743 |
744 | dot-prop@5.3.0:
745 | resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
746 | engines: {node: '>=8'}
747 |
748 | eastasianwidth@0.2.0:
749 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
750 |
751 | electron-to-chromium@1.5.155:
752 | resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==}
753 |
754 | emoji-regex@8.0.0:
755 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
756 |
757 | emoji-regex@9.2.2:
758 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
759 |
760 | emojis-list@3.0.0:
761 | resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
762 | engines: {node: '>= 4'}
763 |
764 | enhanced-resolve@5.18.1:
765 | resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
766 | engines: {node: '>=10.13.0'}
767 |
768 | env-paths@2.2.1:
769 | resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
770 | engines: {node: '>=6'}
771 |
772 | envinfo@7.14.0:
773 | resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==}
774 | engines: {node: '>=4'}
775 | hasBin: true
776 |
777 | error-ex@1.3.2:
778 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
779 |
780 | es-module-lexer@1.7.0:
781 | resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
782 |
783 | escalade@3.2.0:
784 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
785 | engines: {node: '>=6'}
786 |
787 | escape-string-regexp@4.0.0:
788 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
789 | engines: {node: '>=10'}
790 |
791 | eslint-plugin-prettier@5.4.1:
792 | resolution: {integrity: sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==}
793 | engines: {node: ^14.18.0 || >=16.0.0}
794 | peerDependencies:
795 | '@types/eslint': '>=8.0.0'
796 | eslint: '>=8.0.0'
797 | eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0'
798 | prettier: '>=3.0.0'
799 | peerDependenciesMeta:
800 | '@types/eslint':
801 | optional: true
802 | eslint-config-prettier:
803 | optional: true
804 |
805 | eslint-scope@5.1.1:
806 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
807 | engines: {node: '>=8.0.0'}
808 |
809 | eslint-scope@8.3.0:
810 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
811 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
812 |
813 | eslint-visitor-keys@3.4.3:
814 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
815 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
816 |
817 | eslint-visitor-keys@4.2.0:
818 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
819 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
820 |
821 | eslint-visitor-keys@4.2.1:
822 | resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
823 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
824 |
825 | eslint@9.28.0:
826 | resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==}
827 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
828 | hasBin: true
829 | peerDependencies:
830 | jiti: '*'
831 | peerDependenciesMeta:
832 | jiti:
833 | optional: true
834 |
835 | espree@10.3.0:
836 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
837 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
838 |
839 | esquery@1.6.0:
840 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
841 | engines: {node: '>=0.10'}
842 |
843 | esrecurse@4.3.0:
844 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
845 | engines: {node: '>=4.0'}
846 |
847 | estraverse@4.3.0:
848 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
849 | engines: {node: '>=4.0'}
850 |
851 | estraverse@5.3.0:
852 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
853 | engines: {node: '>=4.0'}
854 |
855 | esutils@2.0.3:
856 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
857 | engines: {node: '>=0.10.0'}
858 |
859 | events@3.3.0:
860 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
861 | engines: {node: '>=0.8.x'}
862 |
863 | fast-deep-equal@3.1.3:
864 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
865 |
866 | fast-diff@1.3.0:
867 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
868 |
869 | fast-glob@3.3.3:
870 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
871 | engines: {node: '>=8.6.0'}
872 |
873 | fast-json-stable-stringify@2.1.0:
874 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
875 |
876 | fast-levenshtein@2.0.6:
877 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
878 |
879 | fast-uri@3.0.6:
880 | resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
881 |
882 | fastest-levenshtein@1.0.16:
883 | resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
884 | engines: {node: '>= 4.9.1'}
885 |
886 | fastq@1.19.1:
887 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
888 |
889 | fdir@6.4.3:
890 | resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
891 | peerDependencies:
892 | picomatch: ^3 || ^4
893 | peerDependenciesMeta:
894 | picomatch:
895 | optional: true
896 |
897 | file-entry-cache@8.0.0:
898 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
899 | engines: {node: '>=16.0.0'}
900 |
901 | file-loader@6.2.0:
902 | resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==}
903 | engines: {node: '>= 10.13.0'}
904 | peerDependencies:
905 | webpack: ^4.0.0 || ^5.0.0
906 |
907 | fill-range@7.1.1:
908 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
909 | engines: {node: '>=8'}
910 |
911 | find-up@4.1.0:
912 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
913 | engines: {node: '>=8'}
914 |
915 | find-up@5.0.0:
916 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
917 | engines: {node: '>=10'}
918 |
919 | find-up@7.0.0:
920 | resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
921 | engines: {node: '>=18'}
922 |
923 | flat-cache@4.0.1:
924 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
925 | engines: {node: '>=16'}
926 |
927 | flat@5.0.2:
928 | resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
929 | hasBin: true
930 |
931 | flatted@3.3.3:
932 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
933 |
934 | foreground-child@3.3.1:
935 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
936 | engines: {node: '>=14'}
937 |
938 | function-bind@1.1.2:
939 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
940 |
941 | get-caller-file@2.0.5:
942 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
943 | engines: {node: 6.* || 8.* || >= 10.*}
944 |
945 | git-raw-commits@4.0.0:
946 | resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==}
947 | engines: {node: '>=16'}
948 | hasBin: true
949 |
950 | glob-parent@5.1.2:
951 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
952 | engines: {node: '>= 6'}
953 |
954 | glob-parent@6.0.2:
955 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
956 | engines: {node: '>=10.13.0'}
957 |
958 | glob-to-regexp@0.4.1:
959 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
960 |
961 | glob@11.0.1:
962 | resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==}
963 | engines: {node: 20 || >=22}
964 | hasBin: true
965 |
966 | global-directory@4.0.1:
967 | resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
968 | engines: {node: '>=18'}
969 |
970 | globals@14.0.0:
971 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
972 | engines: {node: '>=18'}
973 |
974 | graceful-fs@4.2.11:
975 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
976 |
977 | graphemer@1.4.0:
978 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
979 |
980 | has-flag@4.0.0:
981 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
982 | engines: {node: '>=8'}
983 |
984 | hasown@2.0.2:
985 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
986 | engines: {node: '>= 0.4'}
987 |
988 | husky@9.1.7:
989 | resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
990 | engines: {node: '>=18'}
991 | hasBin: true
992 |
993 | icss-utils@5.1.0:
994 | resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
995 | engines: {node: ^10 || ^12 || >= 14}
996 | peerDependencies:
997 | postcss: ^8.1.0
998 |
999 | ignore@5.3.2:
1000 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
1001 | engines: {node: '>= 4'}
1002 |
1003 | ignore@7.0.5:
1004 | resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
1005 | engines: {node: '>= 4'}
1006 |
1007 | immutable@5.1.2:
1008 | resolution: {integrity: sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==}
1009 |
1010 | import-fresh@3.3.1:
1011 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
1012 | engines: {node: '>=6'}
1013 |
1014 | import-local@3.2.0:
1015 | resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
1016 | engines: {node: '>=8'}
1017 | hasBin: true
1018 |
1019 | import-meta-resolve@4.1.0:
1020 | resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
1021 |
1022 | imurmurhash@0.1.4:
1023 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1024 | engines: {node: '>=0.8.19'}
1025 |
1026 | ini@4.1.1:
1027 | resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
1028 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
1029 |
1030 | interpret@3.1.1:
1031 | resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==}
1032 | engines: {node: '>=10.13.0'}
1033 |
1034 | is-arrayish@0.2.1:
1035 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
1036 |
1037 | is-core-module@2.16.1:
1038 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
1039 | engines: {node: '>= 0.4'}
1040 |
1041 | is-extglob@2.1.1:
1042 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1043 | engines: {node: '>=0.10.0'}
1044 |
1045 | is-fullwidth-code-point@3.0.0:
1046 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1047 | engines: {node: '>=8'}
1048 |
1049 | is-glob@4.0.3:
1050 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1051 | engines: {node: '>=0.10.0'}
1052 |
1053 | is-number@7.0.0:
1054 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1055 | engines: {node: '>=0.12.0'}
1056 |
1057 | is-obj@2.0.0:
1058 | resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
1059 | engines: {node: '>=8'}
1060 |
1061 | is-plain-object@2.0.4:
1062 | resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
1063 | engines: {node: '>=0.10.0'}
1064 |
1065 | is-text-path@2.0.0:
1066 | resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==}
1067 | engines: {node: '>=8'}
1068 |
1069 | isexe@2.0.0:
1070 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1071 |
1072 | isobject@3.0.1:
1073 | resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
1074 | engines: {node: '>=0.10.0'}
1075 |
1076 | jackspeak@4.1.0:
1077 | resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==}
1078 | engines: {node: 20 || >=22}
1079 |
1080 | jest-worker@27.5.1:
1081 | resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
1082 | engines: {node: '>= 10.13.0'}
1083 |
1084 | jiti@2.4.2:
1085 | resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
1086 | hasBin: true
1087 |
1088 | js-tokens@4.0.0:
1089 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1090 |
1091 | js-yaml@4.1.0:
1092 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1093 | hasBin: true
1094 |
1095 | json-buffer@3.0.1:
1096 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
1097 |
1098 | json-parse-even-better-errors@2.3.1:
1099 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
1100 |
1101 | json-schema-traverse@0.4.1:
1102 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
1103 |
1104 | json-schema-traverse@1.0.0:
1105 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
1106 |
1107 | json-stable-stringify-without-jsonify@1.0.1:
1108 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
1109 |
1110 | json5@2.2.3:
1111 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1112 | engines: {node: '>=6'}
1113 | hasBin: true
1114 |
1115 | jsonparse@1.3.1:
1116 | resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
1117 | engines: {'0': node >= 0.2.0}
1118 |
1119 | keyv@4.5.4:
1120 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
1121 |
1122 | kind-of@6.0.3:
1123 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
1124 | engines: {node: '>=0.10.0'}
1125 |
1126 | levn@0.4.1:
1127 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
1128 | engines: {node: '>= 0.8.0'}
1129 |
1130 | lines-and-columns@1.2.4:
1131 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
1132 |
1133 | loader-runner@4.3.0:
1134 | resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
1135 | engines: {node: '>=6.11.5'}
1136 |
1137 | loader-utils@2.0.4:
1138 | resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
1139 | engines: {node: '>=8.9.0'}
1140 |
1141 | locate-path@5.0.0:
1142 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
1143 | engines: {node: '>=8'}
1144 |
1145 | locate-path@6.0.0:
1146 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
1147 | engines: {node: '>=10'}
1148 |
1149 | locate-path@7.2.0:
1150 | resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
1151 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1152 |
1153 | lodash.camelcase@4.3.0:
1154 | resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
1155 |
1156 | lodash.isplainobject@4.0.6:
1157 | resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
1158 |
1159 | lodash.kebabcase@4.1.1:
1160 | resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
1161 |
1162 | lodash.merge@4.6.2:
1163 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
1164 |
1165 | lodash.mergewith@4.6.2:
1166 | resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
1167 |
1168 | lodash.snakecase@4.1.1:
1169 | resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
1170 |
1171 | lodash.startcase@4.4.0:
1172 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
1173 |
1174 | lodash.uniq@4.5.0:
1175 | resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
1176 |
1177 | lodash.upperfirst@4.3.1:
1178 | resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
1179 |
1180 | lru-cache@11.0.2:
1181 | resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==}
1182 | engines: {node: 20 || >=22}
1183 |
1184 | meow@12.1.1:
1185 | resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
1186 | engines: {node: '>=16.10'}
1187 |
1188 | merge-stream@2.0.0:
1189 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
1190 |
1191 | merge2@1.4.1:
1192 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1193 | engines: {node: '>= 8'}
1194 |
1195 | micromatch@4.0.8:
1196 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1197 | engines: {node: '>=8.6'}
1198 |
1199 | mime-db@1.52.0:
1200 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1201 | engines: {node: '>= 0.6'}
1202 |
1203 | mime-types@2.1.35:
1204 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1205 | engines: {node: '>= 0.6'}
1206 |
1207 | mini-css-extract-plugin@2.9.2:
1208 | resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==}
1209 | engines: {node: '>= 12.13.0'}
1210 | peerDependencies:
1211 | webpack: ^5.0.0
1212 |
1213 | minimatch@10.0.1:
1214 | resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
1215 | engines: {node: 20 || >=22}
1216 |
1217 | minimatch@3.1.2:
1218 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1219 |
1220 | minimatch@9.0.5:
1221 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
1222 | engines: {node: '>=16 || 14 >=14.17'}
1223 |
1224 | minimist@1.2.8:
1225 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
1226 |
1227 | minipass@7.1.2:
1228 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1229 | engines: {node: '>=16 || 14 >=14.17'}
1230 |
1231 | ms@2.1.3:
1232 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1233 |
1234 | nanoid@3.3.9:
1235 | resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==}
1236 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1237 | hasBin: true
1238 |
1239 | natural-compare@1.4.0:
1240 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
1241 |
1242 | neo-async@2.6.2:
1243 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
1244 |
1245 | node-addon-api@7.1.1:
1246 | resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
1247 |
1248 | node-releases@2.0.19:
1249 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1250 |
1251 | normalize-path@3.0.0:
1252 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
1253 | engines: {node: '>=0.10.0'}
1254 |
1255 | optionator@0.9.4:
1256 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
1257 | engines: {node: '>= 0.8.0'}
1258 |
1259 | p-limit@2.3.0:
1260 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
1261 | engines: {node: '>=6'}
1262 |
1263 | p-limit@3.1.0:
1264 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
1265 | engines: {node: '>=10'}
1266 |
1267 | p-limit@4.0.0:
1268 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
1269 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1270 |
1271 | p-locate@4.1.0:
1272 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
1273 | engines: {node: '>=8'}
1274 |
1275 | p-locate@5.0.0:
1276 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
1277 | engines: {node: '>=10'}
1278 |
1279 | p-locate@6.0.0:
1280 | resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
1281 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1282 |
1283 | p-try@2.2.0:
1284 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
1285 | engines: {node: '>=6'}
1286 |
1287 | package-json-from-dist@1.0.1:
1288 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
1289 |
1290 | parent-module@1.0.1:
1291 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
1292 | engines: {node: '>=6'}
1293 |
1294 | parse-json@5.2.0:
1295 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
1296 | engines: {node: '>=8'}
1297 |
1298 | path-exists@4.0.0:
1299 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1300 | engines: {node: '>=8'}
1301 |
1302 | path-exists@5.0.0:
1303 | resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
1304 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1305 |
1306 | path-key@3.1.1:
1307 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1308 | engines: {node: '>=8'}
1309 |
1310 | path-parse@1.0.7:
1311 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1312 |
1313 | path-scurry@2.0.0:
1314 | resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
1315 | engines: {node: 20 || >=22}
1316 |
1317 | picocolors@1.1.1:
1318 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1319 |
1320 | picomatch@2.3.1:
1321 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1322 | engines: {node: '>=8.6'}
1323 |
1324 | picomatch@4.0.2:
1325 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
1326 | engines: {node: '>=12'}
1327 |
1328 | pkg-dir@4.2.0:
1329 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
1330 | engines: {node: '>=8'}
1331 |
1332 | postcss-modules-extract-imports@3.1.0:
1333 | resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==}
1334 | engines: {node: ^10 || ^12 || >= 14}
1335 | peerDependencies:
1336 | postcss: ^8.1.0
1337 |
1338 | postcss-modules-local-by-default@4.2.0:
1339 | resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==}
1340 | engines: {node: ^10 || ^12 || >= 14}
1341 | peerDependencies:
1342 | postcss: ^8.1.0
1343 |
1344 | postcss-modules-scope@3.2.1:
1345 | resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==}
1346 | engines: {node: ^10 || ^12 || >= 14}
1347 | peerDependencies:
1348 | postcss: ^8.1.0
1349 |
1350 | postcss-modules-values@4.0.0:
1351 | resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
1352 | engines: {node: ^10 || ^12 || >= 14}
1353 | peerDependencies:
1354 | postcss: ^8.1.0
1355 |
1356 | postcss-selector-parser@7.1.0:
1357 | resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
1358 | engines: {node: '>=4'}
1359 |
1360 | postcss-value-parser@4.2.0:
1361 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
1362 |
1363 | postcss@8.5.3:
1364 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
1365 | engines: {node: ^10 || ^12 || >=14}
1366 |
1367 | prelude-ls@1.2.1:
1368 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
1369 | engines: {node: '>= 0.8.0'}
1370 |
1371 | prettier-linter-helpers@1.0.0:
1372 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
1373 | engines: {node: '>=6.0.0'}
1374 |
1375 | prettier@3.5.3:
1376 | resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
1377 | engines: {node: '>=14'}
1378 | hasBin: true
1379 |
1380 | punycode@2.3.1:
1381 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
1382 | engines: {node: '>=6'}
1383 |
1384 | queue-microtask@1.2.3:
1385 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1386 |
1387 | randombytes@2.1.0:
1388 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
1389 |
1390 | readdirp@4.1.2:
1391 | resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
1392 | engines: {node: '>= 14.18.0'}
1393 |
1394 | rechoir@0.8.0:
1395 | resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
1396 | engines: {node: '>= 10.13.0'}
1397 |
1398 | require-directory@2.1.1:
1399 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
1400 | engines: {node: '>=0.10.0'}
1401 |
1402 | require-from-string@2.0.2:
1403 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
1404 | engines: {node: '>=0.10.0'}
1405 |
1406 | resolve-cwd@3.0.0:
1407 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
1408 | engines: {node: '>=8'}
1409 |
1410 | resolve-from@4.0.0:
1411 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
1412 | engines: {node: '>=4'}
1413 |
1414 | resolve-from@5.0.0:
1415 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1416 | engines: {node: '>=8'}
1417 |
1418 | resolve@1.22.10:
1419 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1420 | engines: {node: '>= 0.4'}
1421 | hasBin: true
1422 |
1423 | reusify@1.1.0:
1424 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
1425 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1426 |
1427 | rimraf@6.0.1:
1428 | resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
1429 | engines: {node: 20 || >=22}
1430 | hasBin: true
1431 |
1432 | run-parallel@1.2.0:
1433 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1434 |
1435 | safe-buffer@5.2.1:
1436 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1437 |
1438 | sass-loader@16.0.5:
1439 | resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==}
1440 | engines: {node: '>= 18.12.0'}
1441 | peerDependencies:
1442 | '@rspack/core': 0.x || 1.x
1443 | node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
1444 | sass: ^1.3.0
1445 | sass-embedded: '*'
1446 | webpack: ^5.0.0
1447 | peerDependenciesMeta:
1448 | '@rspack/core':
1449 | optional: true
1450 | node-sass:
1451 | optional: true
1452 | sass:
1453 | optional: true
1454 | sass-embedded:
1455 | optional: true
1456 | webpack:
1457 | optional: true
1458 |
1459 | sass@1.89.2:
1460 | resolution: {integrity: sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==}
1461 | engines: {node: '>=14.0.0'}
1462 | hasBin: true
1463 |
1464 | schema-utils@3.3.0:
1465 | resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
1466 | engines: {node: '>= 10.13.0'}
1467 |
1468 | schema-utils@4.3.0:
1469 | resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==}
1470 | engines: {node: '>= 10.13.0'}
1471 |
1472 | schema-utils@4.3.2:
1473 | resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==}
1474 | engines: {node: '>= 10.13.0'}
1475 |
1476 | semver@7.7.1:
1477 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
1478 | engines: {node: '>=10'}
1479 | hasBin: true
1480 |
1481 | semver@7.7.2:
1482 | resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
1483 | engines: {node: '>=10'}
1484 | hasBin: true
1485 |
1486 | serialize-javascript@6.0.2:
1487 | resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
1488 |
1489 | shallow-clone@3.0.1:
1490 | resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
1491 | engines: {node: '>=8'}
1492 |
1493 | shebang-command@2.0.0:
1494 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1495 | engines: {node: '>=8'}
1496 |
1497 | shebang-regex@3.0.0:
1498 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1499 | engines: {node: '>=8'}
1500 |
1501 | signal-exit@4.1.0:
1502 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1503 | engines: {node: '>=14'}
1504 |
1505 | source-map-js@1.2.1:
1506 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1507 | engines: {node: '>=0.10.0'}
1508 |
1509 | source-map-support@0.5.21:
1510 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
1511 |
1512 | source-map@0.6.1:
1513 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1514 | engines: {node: '>=0.10.0'}
1515 |
1516 | source-map@0.7.4:
1517 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
1518 | engines: {node: '>= 8'}
1519 |
1520 | split2@4.2.0:
1521 | resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
1522 | engines: {node: '>= 10.x'}
1523 |
1524 | string-width@4.2.3:
1525 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1526 | engines: {node: '>=8'}
1527 |
1528 | string-width@5.1.2:
1529 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1530 | engines: {node: '>=12'}
1531 |
1532 | strip-ansi@6.0.1:
1533 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1534 | engines: {node: '>=8'}
1535 |
1536 | strip-ansi@7.1.0:
1537 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1538 | engines: {node: '>=12'}
1539 |
1540 | strip-json-comments@3.1.1:
1541 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
1542 | engines: {node: '>=8'}
1543 |
1544 | supports-color@7.2.0:
1545 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1546 | engines: {node: '>=8'}
1547 |
1548 | supports-color@8.1.1:
1549 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
1550 | engines: {node: '>=10'}
1551 |
1552 | supports-preserve-symlinks-flag@1.0.0:
1553 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1554 | engines: {node: '>= 0.4'}
1555 |
1556 | synckit@0.11.8:
1557 | resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==}
1558 | engines: {node: ^14.18.0 || >=16.0.0}
1559 |
1560 | tapable@2.2.1:
1561 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
1562 | engines: {node: '>=6'}
1563 |
1564 | tapable@2.2.2:
1565 | resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
1566 | engines: {node: '>=6'}
1567 |
1568 | terser-webpack-plugin@5.3.14:
1569 | resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==}
1570 | engines: {node: '>= 10.13.0'}
1571 | peerDependencies:
1572 | '@swc/core': '*'
1573 | esbuild: '*'
1574 | uglify-js: '*'
1575 | webpack: ^5.1.0
1576 | peerDependenciesMeta:
1577 | '@swc/core':
1578 | optional: true
1579 | esbuild:
1580 | optional: true
1581 | uglify-js:
1582 | optional: true
1583 |
1584 | terser@5.39.0:
1585 | resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==}
1586 | engines: {node: '>=10'}
1587 | hasBin: true
1588 |
1589 | text-extensions@2.4.0:
1590 | resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==}
1591 | engines: {node: '>=8'}
1592 |
1593 | through@2.3.8:
1594 | resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
1595 |
1596 | tinyexec@1.0.1:
1597 | resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
1598 |
1599 | tinyglobby@0.2.12:
1600 | resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
1601 | engines: {node: '>=12.0.0'}
1602 |
1603 | to-regex-range@5.0.1:
1604 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1605 | engines: {node: '>=8.0'}
1606 |
1607 | ts-api-utils@2.1.0:
1608 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
1609 | engines: {node: '>=18.12'}
1610 | peerDependencies:
1611 | typescript: '>=4.8.4'
1612 |
1613 | ts-loader@9.5.2:
1614 | resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==}
1615 | engines: {node: '>=12.0.0'}
1616 | peerDependencies:
1617 | typescript: '*'
1618 | webpack: ^5.0.0
1619 |
1620 | type-check@0.4.0:
1621 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1622 | engines: {node: '>= 0.8.0'}
1623 |
1624 | typescript-eslint@8.34.0:
1625 | resolution: {integrity: sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ==}
1626 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1627 | peerDependencies:
1628 | eslint: ^8.57.0 || ^9.0.0
1629 | typescript: '>=4.8.4 <5.9.0'
1630 |
1631 | typescript@5.8.3:
1632 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
1633 | engines: {node: '>=14.17'}
1634 | hasBin: true
1635 |
1636 | undici-types@6.20.0:
1637 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
1638 |
1639 | unicorn-magic@0.1.0:
1640 | resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
1641 | engines: {node: '>=18'}
1642 |
1643 | update-browserslist-db@1.1.3:
1644 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
1645 | hasBin: true
1646 | peerDependencies:
1647 | browserslist: '>= 4.21.0'
1648 |
1649 | uri-js@4.4.1:
1650 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1651 |
1652 | util-deprecate@1.0.2:
1653 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1654 |
1655 | watchpack@2.4.3:
1656 | resolution: {integrity: sha512-adBYQLivcg1jbdKEJeqScJJFvgm4qY9+3tXw+jdG6lkVeqRJEtiQmSWjmth8GKmDZuX7sYM4YFxQsf0AzMfGGw==}
1657 | engines: {node: '>=10.13.0'}
1658 |
1659 | webpack-cli@6.0.1:
1660 | resolution: {integrity: sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==}
1661 | engines: {node: '>=18.12.0'}
1662 | hasBin: true
1663 | peerDependencies:
1664 | webpack: ^5.82.0
1665 | webpack-bundle-analyzer: '*'
1666 | webpack-dev-server: '*'
1667 | peerDependenciesMeta:
1668 | webpack-bundle-analyzer:
1669 | optional: true
1670 | webpack-dev-server:
1671 | optional: true
1672 |
1673 | webpack-merge@6.0.1:
1674 | resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==}
1675 | engines: {node: '>=18.0.0'}
1676 |
1677 | webpack-sources@3.2.3:
1678 | resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
1679 | engines: {node: '>=10.13.0'}
1680 |
1681 | webpack@5.99.9:
1682 | resolution: {integrity: sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==}
1683 | engines: {node: '>=10.13.0'}
1684 | hasBin: true
1685 | peerDependencies:
1686 | webpack-cli: '*'
1687 | peerDependenciesMeta:
1688 | webpack-cli:
1689 | optional: true
1690 |
1691 | which@2.0.2:
1692 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1693 | engines: {node: '>= 8'}
1694 | hasBin: true
1695 |
1696 | wildcard@2.0.1:
1697 | resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
1698 |
1699 | word-wrap@1.2.5:
1700 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1701 | engines: {node: '>=0.10.0'}
1702 |
1703 | wrap-ansi@7.0.0:
1704 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1705 | engines: {node: '>=10'}
1706 |
1707 | wrap-ansi@8.1.0:
1708 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1709 | engines: {node: '>=12'}
1710 |
1711 | y18n@5.0.8:
1712 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
1713 | engines: {node: '>=10'}
1714 |
1715 | yargs-parser@21.1.1:
1716 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
1717 | engines: {node: '>=12'}
1718 |
1719 | yargs@17.7.2:
1720 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
1721 | engines: {node: '>=12'}
1722 |
1723 | yocto-queue@0.1.0:
1724 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1725 | engines: {node: '>=10'}
1726 |
1727 | yocto-queue@1.2.1:
1728 | resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
1729 | engines: {node: '>=12.20'}
1730 |
1731 | snapshots:
1732 |
1733 | '@babel/code-frame@7.27.1':
1734 | dependencies:
1735 | '@babel/helper-validator-identifier': 7.27.1
1736 | js-tokens: 4.0.0
1737 | picocolors: 1.1.1
1738 |
1739 | '@babel/helper-validator-identifier@7.27.1': {}
1740 |
1741 | '@commitlint/cli@19.8.1(@types/node@22.13.10)(typescript@5.8.3)':
1742 | dependencies:
1743 | '@commitlint/format': 19.8.1
1744 | '@commitlint/lint': 19.8.1
1745 | '@commitlint/load': 19.8.1(@types/node@22.13.10)(typescript@5.8.3)
1746 | '@commitlint/read': 19.8.1
1747 | '@commitlint/types': 19.8.1
1748 | tinyexec: 1.0.1
1749 | yargs: 17.7.2
1750 | transitivePeerDependencies:
1751 | - '@types/node'
1752 | - typescript
1753 |
1754 | '@commitlint/config-conventional@19.8.1':
1755 | dependencies:
1756 | '@commitlint/types': 19.8.1
1757 | conventional-changelog-conventionalcommits: 7.0.2
1758 |
1759 | '@commitlint/config-validator@19.8.1':
1760 | dependencies:
1761 | '@commitlint/types': 19.8.1
1762 | ajv: 8.17.1
1763 |
1764 | '@commitlint/ensure@19.8.1':
1765 | dependencies:
1766 | '@commitlint/types': 19.8.1
1767 | lodash.camelcase: 4.3.0
1768 | lodash.kebabcase: 4.1.1
1769 | lodash.snakecase: 4.1.1
1770 | lodash.startcase: 4.4.0
1771 | lodash.upperfirst: 4.3.1
1772 |
1773 | '@commitlint/execute-rule@19.8.1': {}
1774 |
1775 | '@commitlint/format@19.8.1':
1776 | dependencies:
1777 | '@commitlint/types': 19.8.1
1778 | chalk: 5.4.1
1779 |
1780 | '@commitlint/is-ignored@19.8.1':
1781 | dependencies:
1782 | '@commitlint/types': 19.8.1
1783 | semver: 7.7.2
1784 |
1785 | '@commitlint/lint@19.8.1':
1786 | dependencies:
1787 | '@commitlint/is-ignored': 19.8.1
1788 | '@commitlint/parse': 19.8.1
1789 | '@commitlint/rules': 19.8.1
1790 | '@commitlint/types': 19.8.1
1791 |
1792 | '@commitlint/load@19.8.1(@types/node@22.13.10)(typescript@5.8.3)':
1793 | dependencies:
1794 | '@commitlint/config-validator': 19.8.1
1795 | '@commitlint/execute-rule': 19.8.1
1796 | '@commitlint/resolve-extends': 19.8.1
1797 | '@commitlint/types': 19.8.1
1798 | chalk: 5.4.1
1799 | cosmiconfig: 9.0.0(typescript@5.8.3)
1800 | cosmiconfig-typescript-loader: 6.1.0(@types/node@22.13.10)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3)
1801 | lodash.isplainobject: 4.0.6
1802 | lodash.merge: 4.6.2
1803 | lodash.uniq: 4.5.0
1804 | transitivePeerDependencies:
1805 | - '@types/node'
1806 | - typescript
1807 |
1808 | '@commitlint/message@19.8.1': {}
1809 |
1810 | '@commitlint/parse@19.8.1':
1811 | dependencies:
1812 | '@commitlint/types': 19.8.1
1813 | conventional-changelog-angular: 7.0.0
1814 | conventional-commits-parser: 5.0.0
1815 |
1816 | '@commitlint/read@19.8.1':
1817 | dependencies:
1818 | '@commitlint/top-level': 19.8.1
1819 | '@commitlint/types': 19.8.1
1820 | git-raw-commits: 4.0.0
1821 | minimist: 1.2.8
1822 | tinyexec: 1.0.1
1823 |
1824 | '@commitlint/resolve-extends@19.8.1':
1825 | dependencies:
1826 | '@commitlint/config-validator': 19.8.1
1827 | '@commitlint/types': 19.8.1
1828 | global-directory: 4.0.1
1829 | import-meta-resolve: 4.1.0
1830 | lodash.mergewith: 4.6.2
1831 | resolve-from: 5.0.0
1832 |
1833 | '@commitlint/rules@19.8.1':
1834 | dependencies:
1835 | '@commitlint/ensure': 19.8.1
1836 | '@commitlint/message': 19.8.1
1837 | '@commitlint/to-lines': 19.8.1
1838 | '@commitlint/types': 19.8.1
1839 |
1840 | '@commitlint/to-lines@19.8.1': {}
1841 |
1842 | '@commitlint/top-level@19.8.1':
1843 | dependencies:
1844 | find-up: 7.0.0
1845 |
1846 | '@commitlint/types@19.8.1':
1847 | dependencies:
1848 | '@types/conventional-commits-parser': 5.0.1
1849 | chalk: 5.4.1
1850 |
1851 | '@discoveryjs/json-ext@0.6.3': {}
1852 |
1853 | '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@2.4.2))':
1854 | dependencies:
1855 | eslint: 9.28.0(jiti@2.4.2)
1856 | eslint-visitor-keys: 3.4.3
1857 |
1858 | '@eslint-community/regexpp@4.12.1': {}
1859 |
1860 | '@eslint/config-array@0.20.0':
1861 | dependencies:
1862 | '@eslint/object-schema': 2.1.6
1863 | debug: 4.4.1
1864 | minimatch: 3.1.2
1865 | transitivePeerDependencies:
1866 | - supports-color
1867 |
1868 | '@eslint/config-helpers@0.2.2': {}
1869 |
1870 | '@eslint/core@0.14.0':
1871 | dependencies:
1872 | '@types/json-schema': 7.0.15
1873 |
1874 | '@eslint/eslintrc@3.3.1':
1875 | dependencies:
1876 | ajv: 6.12.6
1877 | debug: 4.4.1
1878 | espree: 10.3.0
1879 | globals: 14.0.0
1880 | ignore: 5.3.2
1881 | import-fresh: 3.3.1
1882 | js-yaml: 4.1.0
1883 | minimatch: 3.1.2
1884 | strip-json-comments: 3.1.1
1885 | transitivePeerDependencies:
1886 | - supports-color
1887 |
1888 | '@eslint/js@9.28.0': {}
1889 |
1890 | '@eslint/object-schema@2.1.6': {}
1891 |
1892 | '@eslint/plugin-kit@0.3.1':
1893 | dependencies:
1894 | '@eslint/core': 0.14.0
1895 | levn: 0.4.1
1896 |
1897 | '@humanfs/core@0.19.1': {}
1898 |
1899 | '@humanfs/node@0.16.6':
1900 | dependencies:
1901 | '@humanfs/core': 0.19.1
1902 | '@humanwhocodes/retry': 0.3.1
1903 |
1904 | '@humanwhocodes/module-importer@1.0.1': {}
1905 |
1906 | '@humanwhocodes/retry@0.3.1': {}
1907 |
1908 | '@humanwhocodes/retry@0.4.3': {}
1909 |
1910 | '@isaacs/cliui@8.0.2':
1911 | dependencies:
1912 | string-width: 5.1.2
1913 | string-width-cjs: string-width@4.2.3
1914 | strip-ansi: 7.1.0
1915 | strip-ansi-cjs: strip-ansi@6.0.1
1916 | wrap-ansi: 8.1.0
1917 | wrap-ansi-cjs: wrap-ansi@7.0.0
1918 |
1919 | '@jridgewell/gen-mapping@0.3.8':
1920 | dependencies:
1921 | '@jridgewell/set-array': 1.2.1
1922 | '@jridgewell/sourcemap-codec': 1.5.0
1923 | '@jridgewell/trace-mapping': 0.3.25
1924 |
1925 | '@jridgewell/resolve-uri@3.1.2': {}
1926 |
1927 | '@jridgewell/set-array@1.2.1': {}
1928 |
1929 | '@jridgewell/source-map@0.3.6':
1930 | dependencies:
1931 | '@jridgewell/gen-mapping': 0.3.8
1932 | '@jridgewell/trace-mapping': 0.3.25
1933 |
1934 | '@jridgewell/sourcemap-codec@1.5.0': {}
1935 |
1936 | '@jridgewell/trace-mapping@0.3.25':
1937 | dependencies:
1938 | '@jridgewell/resolve-uri': 3.1.2
1939 | '@jridgewell/sourcemap-codec': 1.5.0
1940 |
1941 | '@nodelib/fs.scandir@2.1.5':
1942 | dependencies:
1943 | '@nodelib/fs.stat': 2.0.5
1944 | run-parallel: 1.2.0
1945 |
1946 | '@nodelib/fs.stat@2.0.5': {}
1947 |
1948 | '@nodelib/fs.walk@1.2.8':
1949 | dependencies:
1950 | '@nodelib/fs.scandir': 2.1.5
1951 | fastq: 1.19.1
1952 |
1953 | '@parcel/watcher-android-arm64@2.5.1':
1954 | optional: true
1955 |
1956 | '@parcel/watcher-darwin-arm64@2.5.1':
1957 | optional: true
1958 |
1959 | '@parcel/watcher-darwin-x64@2.5.1':
1960 | optional: true
1961 |
1962 | '@parcel/watcher-freebsd-x64@2.5.1':
1963 | optional: true
1964 |
1965 | '@parcel/watcher-linux-arm-glibc@2.5.1':
1966 | optional: true
1967 |
1968 | '@parcel/watcher-linux-arm-musl@2.5.1':
1969 | optional: true
1970 |
1971 | '@parcel/watcher-linux-arm64-glibc@2.5.1':
1972 | optional: true
1973 |
1974 | '@parcel/watcher-linux-arm64-musl@2.5.1':
1975 | optional: true
1976 |
1977 | '@parcel/watcher-linux-x64-glibc@2.5.1':
1978 | optional: true
1979 |
1980 | '@parcel/watcher-linux-x64-musl@2.5.1':
1981 | optional: true
1982 |
1983 | '@parcel/watcher-win32-arm64@2.5.1':
1984 | optional: true
1985 |
1986 | '@parcel/watcher-win32-ia32@2.5.1':
1987 | optional: true
1988 |
1989 | '@parcel/watcher-win32-x64@2.5.1':
1990 | optional: true
1991 |
1992 | '@parcel/watcher@2.5.1':
1993 | dependencies:
1994 | detect-libc: 1.0.3
1995 | is-glob: 4.0.3
1996 | micromatch: 4.0.8
1997 | node-addon-api: 7.1.1
1998 | optionalDependencies:
1999 | '@parcel/watcher-android-arm64': 2.5.1
2000 | '@parcel/watcher-darwin-arm64': 2.5.1
2001 | '@parcel/watcher-darwin-x64': 2.5.1
2002 | '@parcel/watcher-freebsd-x64': 2.5.1
2003 | '@parcel/watcher-linux-arm-glibc': 2.5.1
2004 | '@parcel/watcher-linux-arm-musl': 2.5.1
2005 | '@parcel/watcher-linux-arm64-glibc': 2.5.1
2006 | '@parcel/watcher-linux-arm64-musl': 2.5.1
2007 | '@parcel/watcher-linux-x64-glibc': 2.5.1
2008 | '@parcel/watcher-linux-x64-musl': 2.5.1
2009 | '@parcel/watcher-win32-arm64': 2.5.1
2010 | '@parcel/watcher-win32-ia32': 2.5.1
2011 | '@parcel/watcher-win32-x64': 2.5.1
2012 | optional: true
2013 |
2014 | '@pkgr/core@0.2.4': {}
2015 |
2016 | '@types/chrome@0.0.326':
2017 | dependencies:
2018 | '@types/filesystem': 0.0.36
2019 | '@types/har-format': 1.2.16
2020 |
2021 | '@types/conventional-commits-parser@5.0.1':
2022 | dependencies:
2023 | '@types/node': 22.13.10
2024 |
2025 | '@types/eslint-scope@3.7.7':
2026 | dependencies:
2027 | '@types/eslint': 9.6.1
2028 | '@types/estree': 1.0.7
2029 |
2030 | '@types/eslint@9.6.1':
2031 | dependencies:
2032 | '@types/estree': 1.0.7
2033 | '@types/json-schema': 7.0.15
2034 |
2035 | '@types/estree@1.0.7': {}
2036 |
2037 | '@types/filesystem@0.0.36':
2038 | dependencies:
2039 | '@types/filewriter': 0.0.33
2040 |
2041 | '@types/filewriter@0.0.33': {}
2042 |
2043 | '@types/har-format@1.2.16': {}
2044 |
2045 | '@types/json-schema@7.0.15': {}
2046 |
2047 | '@types/node@22.13.10':
2048 | dependencies:
2049 | undici-types: 6.20.0
2050 |
2051 | '@typescript-eslint/eslint-plugin@8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)':
2052 | dependencies:
2053 | '@eslint-community/regexpp': 4.12.1
2054 | '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
2055 | '@typescript-eslint/scope-manager': 8.34.0
2056 | '@typescript-eslint/type-utils': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
2057 | '@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
2058 | '@typescript-eslint/visitor-keys': 8.34.0
2059 | eslint: 9.28.0(jiti@2.4.2)
2060 | graphemer: 1.4.0
2061 | ignore: 7.0.5
2062 | natural-compare: 1.4.0
2063 | ts-api-utils: 2.1.0(typescript@5.8.3)
2064 | typescript: 5.8.3
2065 | transitivePeerDependencies:
2066 | - supports-color
2067 |
2068 | '@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)':
2069 | dependencies:
2070 | '@typescript-eslint/scope-manager': 8.34.0
2071 | '@typescript-eslint/types': 8.34.0
2072 | '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3)
2073 | '@typescript-eslint/visitor-keys': 8.34.0
2074 | debug: 4.4.1
2075 | eslint: 9.28.0(jiti@2.4.2)
2076 | typescript: 5.8.3
2077 | transitivePeerDependencies:
2078 | - supports-color
2079 |
2080 | '@typescript-eslint/project-service@8.34.0(typescript@5.8.3)':
2081 | dependencies:
2082 | '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3)
2083 | '@typescript-eslint/types': 8.34.0
2084 | debug: 4.4.1
2085 | typescript: 5.8.3
2086 | transitivePeerDependencies:
2087 | - supports-color
2088 |
2089 | '@typescript-eslint/scope-manager@8.34.0':
2090 | dependencies:
2091 | '@typescript-eslint/types': 8.34.0
2092 | '@typescript-eslint/visitor-keys': 8.34.0
2093 |
2094 | '@typescript-eslint/tsconfig-utils@8.34.0(typescript@5.8.3)':
2095 | dependencies:
2096 | typescript: 5.8.3
2097 |
2098 | '@typescript-eslint/type-utils@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)':
2099 | dependencies:
2100 | '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3)
2101 | '@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
2102 | debug: 4.4.1
2103 | eslint: 9.28.0(jiti@2.4.2)
2104 | ts-api-utils: 2.1.0(typescript@5.8.3)
2105 | typescript: 5.8.3
2106 | transitivePeerDependencies:
2107 | - supports-color
2108 |
2109 | '@typescript-eslint/types@8.34.0': {}
2110 |
2111 | '@typescript-eslint/typescript-estree@8.34.0(typescript@5.8.3)':
2112 | dependencies:
2113 | '@typescript-eslint/project-service': 8.34.0(typescript@5.8.3)
2114 | '@typescript-eslint/tsconfig-utils': 8.34.0(typescript@5.8.3)
2115 | '@typescript-eslint/types': 8.34.0
2116 | '@typescript-eslint/visitor-keys': 8.34.0
2117 | debug: 4.4.1
2118 | fast-glob: 3.3.3
2119 | is-glob: 4.0.3
2120 | minimatch: 9.0.5
2121 | semver: 7.7.2
2122 | ts-api-utils: 2.1.0(typescript@5.8.3)
2123 | typescript: 5.8.3
2124 | transitivePeerDependencies:
2125 | - supports-color
2126 |
2127 | '@typescript-eslint/utils@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)':
2128 | dependencies:
2129 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2))
2130 | '@typescript-eslint/scope-manager': 8.34.0
2131 | '@typescript-eslint/types': 8.34.0
2132 | '@typescript-eslint/typescript-estree': 8.34.0(typescript@5.8.3)
2133 | eslint: 9.28.0(jiti@2.4.2)
2134 | typescript: 5.8.3
2135 | transitivePeerDependencies:
2136 | - supports-color
2137 |
2138 | '@typescript-eslint/visitor-keys@8.34.0':
2139 | dependencies:
2140 | '@typescript-eslint/types': 8.34.0
2141 | eslint-visitor-keys: 4.2.1
2142 |
2143 | '@webassemblyjs/ast@1.14.1':
2144 | dependencies:
2145 | '@webassemblyjs/helper-numbers': 1.13.2
2146 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2
2147 |
2148 | '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
2149 |
2150 | '@webassemblyjs/helper-api-error@1.13.2': {}
2151 |
2152 | '@webassemblyjs/helper-buffer@1.14.1': {}
2153 |
2154 | '@webassemblyjs/helper-numbers@1.13.2':
2155 | dependencies:
2156 | '@webassemblyjs/floating-point-hex-parser': 1.13.2
2157 | '@webassemblyjs/helper-api-error': 1.13.2
2158 | '@xtuc/long': 4.2.2
2159 |
2160 | '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
2161 |
2162 | '@webassemblyjs/helper-wasm-section@1.14.1':
2163 | dependencies:
2164 | '@webassemblyjs/ast': 1.14.1
2165 | '@webassemblyjs/helper-buffer': 1.14.1
2166 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2
2167 | '@webassemblyjs/wasm-gen': 1.14.1
2168 |
2169 | '@webassemblyjs/ieee754@1.13.2':
2170 | dependencies:
2171 | '@xtuc/ieee754': 1.2.0
2172 |
2173 | '@webassemblyjs/leb128@1.13.2':
2174 | dependencies:
2175 | '@xtuc/long': 4.2.2
2176 |
2177 | '@webassemblyjs/utf8@1.13.2': {}
2178 |
2179 | '@webassemblyjs/wasm-edit@1.14.1':
2180 | dependencies:
2181 | '@webassemblyjs/ast': 1.14.1
2182 | '@webassemblyjs/helper-buffer': 1.14.1
2183 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2
2184 | '@webassemblyjs/helper-wasm-section': 1.14.1
2185 | '@webassemblyjs/wasm-gen': 1.14.1
2186 | '@webassemblyjs/wasm-opt': 1.14.1
2187 | '@webassemblyjs/wasm-parser': 1.14.1
2188 | '@webassemblyjs/wast-printer': 1.14.1
2189 |
2190 | '@webassemblyjs/wasm-gen@1.14.1':
2191 | dependencies:
2192 | '@webassemblyjs/ast': 1.14.1
2193 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2
2194 | '@webassemblyjs/ieee754': 1.13.2
2195 | '@webassemblyjs/leb128': 1.13.2
2196 | '@webassemblyjs/utf8': 1.13.2
2197 |
2198 | '@webassemblyjs/wasm-opt@1.14.1':
2199 | dependencies:
2200 | '@webassemblyjs/ast': 1.14.1
2201 | '@webassemblyjs/helper-buffer': 1.14.1
2202 | '@webassemblyjs/wasm-gen': 1.14.1
2203 | '@webassemblyjs/wasm-parser': 1.14.1
2204 |
2205 | '@webassemblyjs/wasm-parser@1.14.1':
2206 | dependencies:
2207 | '@webassemblyjs/ast': 1.14.1
2208 | '@webassemblyjs/helper-api-error': 1.13.2
2209 | '@webassemblyjs/helper-wasm-bytecode': 1.13.2
2210 | '@webassemblyjs/ieee754': 1.13.2
2211 | '@webassemblyjs/leb128': 1.13.2
2212 | '@webassemblyjs/utf8': 1.13.2
2213 |
2214 | '@webassemblyjs/wast-printer@1.14.1':
2215 | dependencies:
2216 | '@webassemblyjs/ast': 1.14.1
2217 | '@xtuc/long': 4.2.2
2218 |
2219 | '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)':
2220 | dependencies:
2221 | webpack: 5.99.9(webpack-cli@6.0.1)
2222 | webpack-cli: 6.0.1(webpack@5.99.9)
2223 |
2224 | '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)':
2225 | dependencies:
2226 | webpack: 5.99.9(webpack-cli@6.0.1)
2227 | webpack-cli: 6.0.1(webpack@5.99.9)
2228 |
2229 | '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)':
2230 | dependencies:
2231 | webpack: 5.99.9(webpack-cli@6.0.1)
2232 | webpack-cli: 6.0.1(webpack@5.99.9)
2233 |
2234 | '@xtuc/ieee754@1.2.0': {}
2235 |
2236 | '@xtuc/long@4.2.2': {}
2237 |
2238 | JSONStream@1.3.5:
2239 | dependencies:
2240 | jsonparse: 1.3.1
2241 | through: 2.3.8
2242 |
2243 | acorn-jsx@5.3.2(acorn@8.14.1):
2244 | dependencies:
2245 | acorn: 8.14.1
2246 |
2247 | acorn@8.14.1: {}
2248 |
2249 | adm-zip@0.5.16: {}
2250 |
2251 | ajv-formats@2.1.1(ajv@8.17.1):
2252 | optionalDependencies:
2253 | ajv: 8.17.1
2254 |
2255 | ajv-keywords@3.5.2(ajv@6.12.6):
2256 | dependencies:
2257 | ajv: 6.12.6
2258 |
2259 | ajv-keywords@5.1.0(ajv@8.17.1):
2260 | dependencies:
2261 | ajv: 8.17.1
2262 | fast-deep-equal: 3.1.3
2263 |
2264 | ajv@6.12.6:
2265 | dependencies:
2266 | fast-deep-equal: 3.1.3
2267 | fast-json-stable-stringify: 2.1.0
2268 | json-schema-traverse: 0.4.1
2269 | uri-js: 4.4.1
2270 |
2271 | ajv@8.17.1:
2272 | dependencies:
2273 | fast-deep-equal: 3.1.3
2274 | fast-uri: 3.0.6
2275 | json-schema-traverse: 1.0.0
2276 | require-from-string: 2.0.2
2277 |
2278 | ansi-regex@5.0.1: {}
2279 |
2280 | ansi-regex@6.1.0: {}
2281 |
2282 | ansi-styles@4.3.0:
2283 | dependencies:
2284 | color-convert: 2.0.1
2285 |
2286 | ansi-styles@6.2.1: {}
2287 |
2288 | argparse@2.0.1: {}
2289 |
2290 | array-ify@1.0.0: {}
2291 |
2292 | balanced-match@1.0.2: {}
2293 |
2294 | big.js@5.2.2: {}
2295 |
2296 | brace-expansion@1.1.11:
2297 | dependencies:
2298 | balanced-match: 1.0.2
2299 | concat-map: 0.0.1
2300 |
2301 | brace-expansion@2.0.1:
2302 | dependencies:
2303 | balanced-match: 1.0.2
2304 |
2305 | braces@3.0.3:
2306 | dependencies:
2307 | fill-range: 7.1.1
2308 |
2309 | browserslist@4.24.5:
2310 | dependencies:
2311 | caniuse-lite: 1.0.30001718
2312 | electron-to-chromium: 1.5.155
2313 | node-releases: 2.0.19
2314 | update-browserslist-db: 1.1.3(browserslist@4.24.5)
2315 |
2316 | buffer-from@1.1.2: {}
2317 |
2318 | callsites@3.1.0: {}
2319 |
2320 | caniuse-lite@1.0.30001718: {}
2321 |
2322 | chalk@4.1.2:
2323 | dependencies:
2324 | ansi-styles: 4.3.0
2325 | supports-color: 7.2.0
2326 |
2327 | chalk@5.4.1: {}
2328 |
2329 | chokidar@4.0.3:
2330 | dependencies:
2331 | readdirp: 4.1.2
2332 |
2333 | chrome-trace-event@1.0.4: {}
2334 |
2335 | cliui@8.0.1:
2336 | dependencies:
2337 | string-width: 4.2.3
2338 | strip-ansi: 6.0.1
2339 | wrap-ansi: 7.0.0
2340 |
2341 | clone-deep@4.0.1:
2342 | dependencies:
2343 | is-plain-object: 2.0.4
2344 | kind-of: 6.0.3
2345 | shallow-clone: 3.0.1
2346 |
2347 | color-convert@2.0.1:
2348 | dependencies:
2349 | color-name: 1.1.4
2350 |
2351 | color-name@1.1.4: {}
2352 |
2353 | colorette@2.0.20: {}
2354 |
2355 | commander@12.1.0: {}
2356 |
2357 | commander@2.20.3: {}
2358 |
2359 | compare-func@2.0.0:
2360 | dependencies:
2361 | array-ify: 1.0.0
2362 | dot-prop: 5.3.0
2363 |
2364 | concat-map@0.0.1: {}
2365 |
2366 | conventional-changelog-angular@7.0.0:
2367 | dependencies:
2368 | compare-func: 2.0.0
2369 |
2370 | conventional-changelog-conventionalcommits@7.0.2:
2371 | dependencies:
2372 | compare-func: 2.0.0
2373 |
2374 | conventional-commits-parser@5.0.0:
2375 | dependencies:
2376 | JSONStream: 1.3.5
2377 | is-text-path: 2.0.0
2378 | meow: 12.1.1
2379 | split2: 4.2.0
2380 |
2381 | copy-webpack-plugin@13.0.0(webpack@5.99.9):
2382 | dependencies:
2383 | glob-parent: 6.0.2
2384 | normalize-path: 3.0.0
2385 | schema-utils: 4.3.0
2386 | serialize-javascript: 6.0.2
2387 | tinyglobby: 0.2.12
2388 | webpack: 5.99.9(webpack-cli@6.0.1)
2389 |
2390 | cosmiconfig-typescript-loader@6.1.0(@types/node@22.13.10)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3):
2391 | dependencies:
2392 | '@types/node': 22.13.10
2393 | cosmiconfig: 9.0.0(typescript@5.8.3)
2394 | jiti: 2.4.2
2395 | typescript: 5.8.3
2396 |
2397 | cosmiconfig@9.0.0(typescript@5.8.3):
2398 | dependencies:
2399 | env-paths: 2.2.1
2400 | import-fresh: 3.3.1
2401 | js-yaml: 4.1.0
2402 | parse-json: 5.2.0
2403 | optionalDependencies:
2404 | typescript: 5.8.3
2405 |
2406 | cross-spawn@7.0.6:
2407 | dependencies:
2408 | path-key: 3.1.1
2409 | shebang-command: 2.0.0
2410 | which: 2.0.2
2411 |
2412 | css-loader@7.1.2(webpack@5.99.9):
2413 | dependencies:
2414 | icss-utils: 5.1.0(postcss@8.5.3)
2415 | postcss: 8.5.3
2416 | postcss-modules-extract-imports: 3.1.0(postcss@8.5.3)
2417 | postcss-modules-local-by-default: 4.2.0(postcss@8.5.3)
2418 | postcss-modules-scope: 3.2.1(postcss@8.5.3)
2419 | postcss-modules-values: 4.0.0(postcss@8.5.3)
2420 | postcss-value-parser: 4.2.0
2421 | semver: 7.7.1
2422 | optionalDependencies:
2423 | webpack: 5.99.9(webpack-cli@6.0.1)
2424 |
2425 | cssesc@3.0.0: {}
2426 |
2427 | dargs@8.1.0: {}
2428 |
2429 | debug@4.4.1:
2430 | dependencies:
2431 | ms: 2.1.3
2432 |
2433 | deep-is@0.1.4: {}
2434 |
2435 | detect-libc@1.0.3:
2436 | optional: true
2437 |
2438 | dot-prop@5.3.0:
2439 | dependencies:
2440 | is-obj: 2.0.0
2441 |
2442 | eastasianwidth@0.2.0: {}
2443 |
2444 | electron-to-chromium@1.5.155: {}
2445 |
2446 | emoji-regex@8.0.0: {}
2447 |
2448 | emoji-regex@9.2.2: {}
2449 |
2450 | emojis-list@3.0.0: {}
2451 |
2452 | enhanced-resolve@5.18.1:
2453 | dependencies:
2454 | graceful-fs: 4.2.11
2455 | tapable: 2.2.2
2456 |
2457 | env-paths@2.2.1: {}
2458 |
2459 | envinfo@7.14.0: {}
2460 |
2461 | error-ex@1.3.2:
2462 | dependencies:
2463 | is-arrayish: 0.2.1
2464 |
2465 | es-module-lexer@1.7.0: {}
2466 |
2467 | escalade@3.2.0: {}
2468 |
2469 | escape-string-regexp@4.0.0: {}
2470 |
2471 | eslint-plugin-prettier@5.4.1(@types/eslint@9.6.1)(eslint@9.28.0(jiti@2.4.2))(prettier@3.5.3):
2472 | dependencies:
2473 | eslint: 9.28.0(jiti@2.4.2)
2474 | prettier: 3.5.3
2475 | prettier-linter-helpers: 1.0.0
2476 | synckit: 0.11.8
2477 | optionalDependencies:
2478 | '@types/eslint': 9.6.1
2479 |
2480 | eslint-scope@5.1.1:
2481 | dependencies:
2482 | esrecurse: 4.3.0
2483 | estraverse: 4.3.0
2484 |
2485 | eslint-scope@8.3.0:
2486 | dependencies:
2487 | esrecurse: 4.3.0
2488 | estraverse: 5.3.0
2489 |
2490 | eslint-visitor-keys@3.4.3: {}
2491 |
2492 | eslint-visitor-keys@4.2.0: {}
2493 |
2494 | eslint-visitor-keys@4.2.1: {}
2495 |
2496 | eslint@9.28.0(jiti@2.4.2):
2497 | dependencies:
2498 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2))
2499 | '@eslint-community/regexpp': 4.12.1
2500 | '@eslint/config-array': 0.20.0
2501 | '@eslint/config-helpers': 0.2.2
2502 | '@eslint/core': 0.14.0
2503 | '@eslint/eslintrc': 3.3.1
2504 | '@eslint/js': 9.28.0
2505 | '@eslint/plugin-kit': 0.3.1
2506 | '@humanfs/node': 0.16.6
2507 | '@humanwhocodes/module-importer': 1.0.1
2508 | '@humanwhocodes/retry': 0.4.3
2509 | '@types/estree': 1.0.7
2510 | '@types/json-schema': 7.0.15
2511 | ajv: 6.12.6
2512 | chalk: 4.1.2
2513 | cross-spawn: 7.0.6
2514 | debug: 4.4.1
2515 | escape-string-regexp: 4.0.0
2516 | eslint-scope: 8.3.0
2517 | eslint-visitor-keys: 4.2.0
2518 | espree: 10.3.0
2519 | esquery: 1.6.0
2520 | esutils: 2.0.3
2521 | fast-deep-equal: 3.1.3
2522 | file-entry-cache: 8.0.0
2523 | find-up: 5.0.0
2524 | glob-parent: 6.0.2
2525 | ignore: 5.3.2
2526 | imurmurhash: 0.1.4
2527 | is-glob: 4.0.3
2528 | json-stable-stringify-without-jsonify: 1.0.1
2529 | lodash.merge: 4.6.2
2530 | minimatch: 3.1.2
2531 | natural-compare: 1.4.0
2532 | optionator: 0.9.4
2533 | optionalDependencies:
2534 | jiti: 2.4.2
2535 | transitivePeerDependencies:
2536 | - supports-color
2537 |
2538 | espree@10.3.0:
2539 | dependencies:
2540 | acorn: 8.14.1
2541 | acorn-jsx: 5.3.2(acorn@8.14.1)
2542 | eslint-visitor-keys: 4.2.0
2543 |
2544 | esquery@1.6.0:
2545 | dependencies:
2546 | estraverse: 5.3.0
2547 |
2548 | esrecurse@4.3.0:
2549 | dependencies:
2550 | estraverse: 5.3.0
2551 |
2552 | estraverse@4.3.0: {}
2553 |
2554 | estraverse@5.3.0: {}
2555 |
2556 | esutils@2.0.3: {}
2557 |
2558 | events@3.3.0: {}
2559 |
2560 | fast-deep-equal@3.1.3: {}
2561 |
2562 | fast-diff@1.3.0: {}
2563 |
2564 | fast-glob@3.3.3:
2565 | dependencies:
2566 | '@nodelib/fs.stat': 2.0.5
2567 | '@nodelib/fs.walk': 1.2.8
2568 | glob-parent: 5.1.2
2569 | merge2: 1.4.1
2570 | micromatch: 4.0.8
2571 |
2572 | fast-json-stable-stringify@2.1.0: {}
2573 |
2574 | fast-levenshtein@2.0.6: {}
2575 |
2576 | fast-uri@3.0.6: {}
2577 |
2578 | fastest-levenshtein@1.0.16: {}
2579 |
2580 | fastq@1.19.1:
2581 | dependencies:
2582 | reusify: 1.1.0
2583 |
2584 | fdir@6.4.3(picomatch@4.0.2):
2585 | optionalDependencies:
2586 | picomatch: 4.0.2
2587 |
2588 | file-entry-cache@8.0.0:
2589 | dependencies:
2590 | flat-cache: 4.0.1
2591 |
2592 | file-loader@6.2.0(webpack@5.99.9):
2593 | dependencies:
2594 | loader-utils: 2.0.4
2595 | schema-utils: 3.3.0
2596 | webpack: 5.99.9(webpack-cli@6.0.1)
2597 |
2598 | fill-range@7.1.1:
2599 | dependencies:
2600 | to-regex-range: 5.0.1
2601 |
2602 | find-up@4.1.0:
2603 | dependencies:
2604 | locate-path: 5.0.0
2605 | path-exists: 4.0.0
2606 |
2607 | find-up@5.0.0:
2608 | dependencies:
2609 | locate-path: 6.0.0
2610 | path-exists: 4.0.0
2611 |
2612 | find-up@7.0.0:
2613 | dependencies:
2614 | locate-path: 7.2.0
2615 | path-exists: 5.0.0
2616 | unicorn-magic: 0.1.0
2617 |
2618 | flat-cache@4.0.1:
2619 | dependencies:
2620 | flatted: 3.3.3
2621 | keyv: 4.5.4
2622 |
2623 | flat@5.0.2: {}
2624 |
2625 | flatted@3.3.3: {}
2626 |
2627 | foreground-child@3.3.1:
2628 | dependencies:
2629 | cross-spawn: 7.0.6
2630 | signal-exit: 4.1.0
2631 |
2632 | function-bind@1.1.2: {}
2633 |
2634 | get-caller-file@2.0.5: {}
2635 |
2636 | git-raw-commits@4.0.0:
2637 | dependencies:
2638 | dargs: 8.1.0
2639 | meow: 12.1.1
2640 | split2: 4.2.0
2641 |
2642 | glob-parent@5.1.2:
2643 | dependencies:
2644 | is-glob: 4.0.3
2645 |
2646 | glob-parent@6.0.2:
2647 | dependencies:
2648 | is-glob: 4.0.3
2649 |
2650 | glob-to-regexp@0.4.1: {}
2651 |
2652 | glob@11.0.1:
2653 | dependencies:
2654 | foreground-child: 3.3.1
2655 | jackspeak: 4.1.0
2656 | minimatch: 10.0.1
2657 | minipass: 7.1.2
2658 | package-json-from-dist: 1.0.1
2659 | path-scurry: 2.0.0
2660 |
2661 | global-directory@4.0.1:
2662 | dependencies:
2663 | ini: 4.1.1
2664 |
2665 | globals@14.0.0: {}
2666 |
2667 | graceful-fs@4.2.11: {}
2668 |
2669 | graphemer@1.4.0: {}
2670 |
2671 | has-flag@4.0.0: {}
2672 |
2673 | hasown@2.0.2:
2674 | dependencies:
2675 | function-bind: 1.1.2
2676 |
2677 | husky@9.1.7: {}
2678 |
2679 | icss-utils@5.1.0(postcss@8.5.3):
2680 | dependencies:
2681 | postcss: 8.5.3
2682 |
2683 | ignore@5.3.2: {}
2684 |
2685 | ignore@7.0.5: {}
2686 |
2687 | immutable@5.1.2: {}
2688 |
2689 | import-fresh@3.3.1:
2690 | dependencies:
2691 | parent-module: 1.0.1
2692 | resolve-from: 4.0.0
2693 |
2694 | import-local@3.2.0:
2695 | dependencies:
2696 | pkg-dir: 4.2.0
2697 | resolve-cwd: 3.0.0
2698 |
2699 | import-meta-resolve@4.1.0: {}
2700 |
2701 | imurmurhash@0.1.4: {}
2702 |
2703 | ini@4.1.1: {}
2704 |
2705 | interpret@3.1.1: {}
2706 |
2707 | is-arrayish@0.2.1: {}
2708 |
2709 | is-core-module@2.16.1:
2710 | dependencies:
2711 | hasown: 2.0.2
2712 |
2713 | is-extglob@2.1.1: {}
2714 |
2715 | is-fullwidth-code-point@3.0.0: {}
2716 |
2717 | is-glob@4.0.3:
2718 | dependencies:
2719 | is-extglob: 2.1.1
2720 |
2721 | is-number@7.0.0: {}
2722 |
2723 | is-obj@2.0.0: {}
2724 |
2725 | is-plain-object@2.0.4:
2726 | dependencies:
2727 | isobject: 3.0.1
2728 |
2729 | is-text-path@2.0.0:
2730 | dependencies:
2731 | text-extensions: 2.4.0
2732 |
2733 | isexe@2.0.0: {}
2734 |
2735 | isobject@3.0.1: {}
2736 |
2737 | jackspeak@4.1.0:
2738 | dependencies:
2739 | '@isaacs/cliui': 8.0.2
2740 |
2741 | jest-worker@27.5.1:
2742 | dependencies:
2743 | '@types/node': 22.13.10
2744 | merge-stream: 2.0.0
2745 | supports-color: 8.1.1
2746 |
2747 | jiti@2.4.2: {}
2748 |
2749 | js-tokens@4.0.0: {}
2750 |
2751 | js-yaml@4.1.0:
2752 | dependencies:
2753 | argparse: 2.0.1
2754 |
2755 | json-buffer@3.0.1: {}
2756 |
2757 | json-parse-even-better-errors@2.3.1: {}
2758 |
2759 | json-schema-traverse@0.4.1: {}
2760 |
2761 | json-schema-traverse@1.0.0: {}
2762 |
2763 | json-stable-stringify-without-jsonify@1.0.1: {}
2764 |
2765 | json5@2.2.3: {}
2766 |
2767 | jsonparse@1.3.1: {}
2768 |
2769 | keyv@4.5.4:
2770 | dependencies:
2771 | json-buffer: 3.0.1
2772 |
2773 | kind-of@6.0.3: {}
2774 |
2775 | levn@0.4.1:
2776 | dependencies:
2777 | prelude-ls: 1.2.1
2778 | type-check: 0.4.0
2779 |
2780 | lines-and-columns@1.2.4: {}
2781 |
2782 | loader-runner@4.3.0: {}
2783 |
2784 | loader-utils@2.0.4:
2785 | dependencies:
2786 | big.js: 5.2.2
2787 | emojis-list: 3.0.0
2788 | json5: 2.2.3
2789 |
2790 | locate-path@5.0.0:
2791 | dependencies:
2792 | p-locate: 4.1.0
2793 |
2794 | locate-path@6.0.0:
2795 | dependencies:
2796 | p-locate: 5.0.0
2797 |
2798 | locate-path@7.2.0:
2799 | dependencies:
2800 | p-locate: 6.0.0
2801 |
2802 | lodash.camelcase@4.3.0: {}
2803 |
2804 | lodash.isplainobject@4.0.6: {}
2805 |
2806 | lodash.kebabcase@4.1.1: {}
2807 |
2808 | lodash.merge@4.6.2: {}
2809 |
2810 | lodash.mergewith@4.6.2: {}
2811 |
2812 | lodash.snakecase@4.1.1: {}
2813 |
2814 | lodash.startcase@4.4.0: {}
2815 |
2816 | lodash.uniq@4.5.0: {}
2817 |
2818 | lodash.upperfirst@4.3.1: {}
2819 |
2820 | lru-cache@11.0.2: {}
2821 |
2822 | meow@12.1.1: {}
2823 |
2824 | merge-stream@2.0.0: {}
2825 |
2826 | merge2@1.4.1: {}
2827 |
2828 | micromatch@4.0.8:
2829 | dependencies:
2830 | braces: 3.0.3
2831 | picomatch: 2.3.1
2832 |
2833 | mime-db@1.52.0: {}
2834 |
2835 | mime-types@2.1.35:
2836 | dependencies:
2837 | mime-db: 1.52.0
2838 |
2839 | mini-css-extract-plugin@2.9.2(webpack@5.99.9):
2840 | dependencies:
2841 | schema-utils: 4.3.0
2842 | tapable: 2.2.1
2843 | webpack: 5.99.9(webpack-cli@6.0.1)
2844 |
2845 | minimatch@10.0.1:
2846 | dependencies:
2847 | brace-expansion: 2.0.1
2848 |
2849 | minimatch@3.1.2:
2850 | dependencies:
2851 | brace-expansion: 1.1.11
2852 |
2853 | minimatch@9.0.5:
2854 | dependencies:
2855 | brace-expansion: 2.0.1
2856 |
2857 | minimist@1.2.8: {}
2858 |
2859 | minipass@7.1.2: {}
2860 |
2861 | ms@2.1.3: {}
2862 |
2863 | nanoid@3.3.9: {}
2864 |
2865 | natural-compare@1.4.0: {}
2866 |
2867 | neo-async@2.6.2: {}
2868 |
2869 | node-addon-api@7.1.1:
2870 | optional: true
2871 |
2872 | node-releases@2.0.19: {}
2873 |
2874 | normalize-path@3.0.0: {}
2875 |
2876 | optionator@0.9.4:
2877 | dependencies:
2878 | deep-is: 0.1.4
2879 | fast-levenshtein: 2.0.6
2880 | levn: 0.4.1
2881 | prelude-ls: 1.2.1
2882 | type-check: 0.4.0
2883 | word-wrap: 1.2.5
2884 |
2885 | p-limit@2.3.0:
2886 | dependencies:
2887 | p-try: 2.2.0
2888 |
2889 | p-limit@3.1.0:
2890 | dependencies:
2891 | yocto-queue: 0.1.0
2892 |
2893 | p-limit@4.0.0:
2894 | dependencies:
2895 | yocto-queue: 1.2.1
2896 |
2897 | p-locate@4.1.0:
2898 | dependencies:
2899 | p-limit: 2.3.0
2900 |
2901 | p-locate@5.0.0:
2902 | dependencies:
2903 | p-limit: 3.1.0
2904 |
2905 | p-locate@6.0.0:
2906 | dependencies:
2907 | p-limit: 4.0.0
2908 |
2909 | p-try@2.2.0: {}
2910 |
2911 | package-json-from-dist@1.0.1: {}
2912 |
2913 | parent-module@1.0.1:
2914 | dependencies:
2915 | callsites: 3.1.0
2916 |
2917 | parse-json@5.2.0:
2918 | dependencies:
2919 | '@babel/code-frame': 7.27.1
2920 | error-ex: 1.3.2
2921 | json-parse-even-better-errors: 2.3.1
2922 | lines-and-columns: 1.2.4
2923 |
2924 | path-exists@4.0.0: {}
2925 |
2926 | path-exists@5.0.0: {}
2927 |
2928 | path-key@3.1.1: {}
2929 |
2930 | path-parse@1.0.7: {}
2931 |
2932 | path-scurry@2.0.0:
2933 | dependencies:
2934 | lru-cache: 11.0.2
2935 | minipass: 7.1.2
2936 |
2937 | picocolors@1.1.1: {}
2938 |
2939 | picomatch@2.3.1: {}
2940 |
2941 | picomatch@4.0.2: {}
2942 |
2943 | pkg-dir@4.2.0:
2944 | dependencies:
2945 | find-up: 4.1.0
2946 |
2947 | postcss-modules-extract-imports@3.1.0(postcss@8.5.3):
2948 | dependencies:
2949 | postcss: 8.5.3
2950 |
2951 | postcss-modules-local-by-default@4.2.0(postcss@8.5.3):
2952 | dependencies:
2953 | icss-utils: 5.1.0(postcss@8.5.3)
2954 | postcss: 8.5.3
2955 | postcss-selector-parser: 7.1.0
2956 | postcss-value-parser: 4.2.0
2957 |
2958 | postcss-modules-scope@3.2.1(postcss@8.5.3):
2959 | dependencies:
2960 | postcss: 8.5.3
2961 | postcss-selector-parser: 7.1.0
2962 |
2963 | postcss-modules-values@4.0.0(postcss@8.5.3):
2964 | dependencies:
2965 | icss-utils: 5.1.0(postcss@8.5.3)
2966 | postcss: 8.5.3
2967 |
2968 | postcss-selector-parser@7.1.0:
2969 | dependencies:
2970 | cssesc: 3.0.0
2971 | util-deprecate: 1.0.2
2972 |
2973 | postcss-value-parser@4.2.0: {}
2974 |
2975 | postcss@8.5.3:
2976 | dependencies:
2977 | nanoid: 3.3.9
2978 | picocolors: 1.1.1
2979 | source-map-js: 1.2.1
2980 |
2981 | prelude-ls@1.2.1: {}
2982 |
2983 | prettier-linter-helpers@1.0.0:
2984 | dependencies:
2985 | fast-diff: 1.3.0
2986 |
2987 | prettier@3.5.3: {}
2988 |
2989 | punycode@2.3.1: {}
2990 |
2991 | queue-microtask@1.2.3: {}
2992 |
2993 | randombytes@2.1.0:
2994 | dependencies:
2995 | safe-buffer: 5.2.1
2996 |
2997 | readdirp@4.1.2: {}
2998 |
2999 | rechoir@0.8.0:
3000 | dependencies:
3001 | resolve: 1.22.10
3002 |
3003 | require-directory@2.1.1: {}
3004 |
3005 | require-from-string@2.0.2: {}
3006 |
3007 | resolve-cwd@3.0.0:
3008 | dependencies:
3009 | resolve-from: 5.0.0
3010 |
3011 | resolve-from@4.0.0: {}
3012 |
3013 | resolve-from@5.0.0: {}
3014 |
3015 | resolve@1.22.10:
3016 | dependencies:
3017 | is-core-module: 2.16.1
3018 | path-parse: 1.0.7
3019 | supports-preserve-symlinks-flag: 1.0.0
3020 |
3021 | reusify@1.1.0: {}
3022 |
3023 | rimraf@6.0.1:
3024 | dependencies:
3025 | glob: 11.0.1
3026 | package-json-from-dist: 1.0.1
3027 |
3028 | run-parallel@1.2.0:
3029 | dependencies:
3030 | queue-microtask: 1.2.3
3031 |
3032 | safe-buffer@5.2.1: {}
3033 |
3034 | sass-loader@16.0.5(sass@1.89.2)(webpack@5.99.9):
3035 | dependencies:
3036 | neo-async: 2.6.2
3037 | optionalDependencies:
3038 | sass: 1.89.2
3039 | webpack: 5.99.9(webpack-cli@6.0.1)
3040 |
3041 | sass@1.89.2:
3042 | dependencies:
3043 | chokidar: 4.0.3
3044 | immutable: 5.1.2
3045 | source-map-js: 1.2.1
3046 | optionalDependencies:
3047 | '@parcel/watcher': 2.5.1
3048 |
3049 | schema-utils@3.3.0:
3050 | dependencies:
3051 | '@types/json-schema': 7.0.15
3052 | ajv: 6.12.6
3053 | ajv-keywords: 3.5.2(ajv@6.12.6)
3054 |
3055 | schema-utils@4.3.0:
3056 | dependencies:
3057 | '@types/json-schema': 7.0.15
3058 | ajv: 8.17.1
3059 | ajv-formats: 2.1.1(ajv@8.17.1)
3060 | ajv-keywords: 5.1.0(ajv@8.17.1)
3061 |
3062 | schema-utils@4.3.2:
3063 | dependencies:
3064 | '@types/json-schema': 7.0.15
3065 | ajv: 8.17.1
3066 | ajv-formats: 2.1.1(ajv@8.17.1)
3067 | ajv-keywords: 5.1.0(ajv@8.17.1)
3068 |
3069 | semver@7.7.1: {}
3070 |
3071 | semver@7.7.2: {}
3072 |
3073 | serialize-javascript@6.0.2:
3074 | dependencies:
3075 | randombytes: 2.1.0
3076 |
3077 | shallow-clone@3.0.1:
3078 | dependencies:
3079 | kind-of: 6.0.3
3080 |
3081 | shebang-command@2.0.0:
3082 | dependencies:
3083 | shebang-regex: 3.0.0
3084 |
3085 | shebang-regex@3.0.0: {}
3086 |
3087 | signal-exit@4.1.0: {}
3088 |
3089 | source-map-js@1.2.1: {}
3090 |
3091 | source-map-support@0.5.21:
3092 | dependencies:
3093 | buffer-from: 1.1.2
3094 | source-map: 0.6.1
3095 |
3096 | source-map@0.6.1: {}
3097 |
3098 | source-map@0.7.4: {}
3099 |
3100 | split2@4.2.0: {}
3101 |
3102 | string-width@4.2.3:
3103 | dependencies:
3104 | emoji-regex: 8.0.0
3105 | is-fullwidth-code-point: 3.0.0
3106 | strip-ansi: 6.0.1
3107 |
3108 | string-width@5.1.2:
3109 | dependencies:
3110 | eastasianwidth: 0.2.0
3111 | emoji-regex: 9.2.2
3112 | strip-ansi: 7.1.0
3113 |
3114 | strip-ansi@6.0.1:
3115 | dependencies:
3116 | ansi-regex: 5.0.1
3117 |
3118 | strip-ansi@7.1.0:
3119 | dependencies:
3120 | ansi-regex: 6.1.0
3121 |
3122 | strip-json-comments@3.1.1: {}
3123 |
3124 | supports-color@7.2.0:
3125 | dependencies:
3126 | has-flag: 4.0.0
3127 |
3128 | supports-color@8.1.1:
3129 | dependencies:
3130 | has-flag: 4.0.0
3131 |
3132 | supports-preserve-symlinks-flag@1.0.0: {}
3133 |
3134 | synckit@0.11.8:
3135 | dependencies:
3136 | '@pkgr/core': 0.2.4
3137 |
3138 | tapable@2.2.1: {}
3139 |
3140 | tapable@2.2.2: {}
3141 |
3142 | terser-webpack-plugin@5.3.14(webpack@5.99.9):
3143 | dependencies:
3144 | '@jridgewell/trace-mapping': 0.3.25
3145 | jest-worker: 27.5.1
3146 | schema-utils: 4.3.0
3147 | serialize-javascript: 6.0.2
3148 | terser: 5.39.0
3149 | webpack: 5.99.9(webpack-cli@6.0.1)
3150 |
3151 | terser@5.39.0:
3152 | dependencies:
3153 | '@jridgewell/source-map': 0.3.6
3154 | acorn: 8.14.1
3155 | commander: 2.20.3
3156 | source-map-support: 0.5.21
3157 |
3158 | text-extensions@2.4.0: {}
3159 |
3160 | through@2.3.8: {}
3161 |
3162 | tinyexec@1.0.1: {}
3163 |
3164 | tinyglobby@0.2.12:
3165 | dependencies:
3166 | fdir: 6.4.3(picomatch@4.0.2)
3167 | picomatch: 4.0.2
3168 |
3169 | to-regex-range@5.0.1:
3170 | dependencies:
3171 | is-number: 7.0.0
3172 |
3173 | ts-api-utils@2.1.0(typescript@5.8.3):
3174 | dependencies:
3175 | typescript: 5.8.3
3176 |
3177 | ts-loader@9.5.2(typescript@5.8.3)(webpack@5.99.9):
3178 | dependencies:
3179 | chalk: 4.1.2
3180 | enhanced-resolve: 5.18.1
3181 | micromatch: 4.0.8
3182 | semver: 7.7.1
3183 | source-map: 0.7.4
3184 | typescript: 5.8.3
3185 | webpack: 5.99.9(webpack-cli@6.0.1)
3186 |
3187 | type-check@0.4.0:
3188 | dependencies:
3189 | prelude-ls: 1.2.1
3190 |
3191 | typescript-eslint@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3):
3192 | dependencies:
3193 | '@typescript-eslint/eslint-plugin': 8.34.0(@typescript-eslint/parser@8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
3194 | '@typescript-eslint/parser': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
3195 | '@typescript-eslint/utils': 8.34.0(eslint@9.28.0(jiti@2.4.2))(typescript@5.8.3)
3196 | eslint: 9.28.0(jiti@2.4.2)
3197 | typescript: 5.8.3
3198 | transitivePeerDependencies:
3199 | - supports-color
3200 |
3201 | typescript@5.8.3: {}
3202 |
3203 | undici-types@6.20.0: {}
3204 |
3205 | unicorn-magic@0.1.0: {}
3206 |
3207 | update-browserslist-db@1.1.3(browserslist@4.24.5):
3208 | dependencies:
3209 | browserslist: 4.24.5
3210 | escalade: 3.2.0
3211 | picocolors: 1.1.1
3212 |
3213 | uri-js@4.4.1:
3214 | dependencies:
3215 | punycode: 2.3.1
3216 |
3217 | util-deprecate@1.0.2: {}
3218 |
3219 | watchpack@2.4.3:
3220 | dependencies:
3221 | glob-to-regexp: 0.4.1
3222 | graceful-fs: 4.2.11
3223 |
3224 | webpack-cli@6.0.1(webpack@5.99.9):
3225 | dependencies:
3226 | '@discoveryjs/json-ext': 0.6.3
3227 | '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)
3228 | '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)
3229 | '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.99.9)
3230 | colorette: 2.0.20
3231 | commander: 12.1.0
3232 | cross-spawn: 7.0.6
3233 | envinfo: 7.14.0
3234 | fastest-levenshtein: 1.0.16
3235 | import-local: 3.2.0
3236 | interpret: 3.1.1
3237 | rechoir: 0.8.0
3238 | webpack: 5.99.9(webpack-cli@6.0.1)
3239 | webpack-merge: 6.0.1
3240 |
3241 | webpack-merge@6.0.1:
3242 | dependencies:
3243 | clone-deep: 4.0.1
3244 | flat: 5.0.2
3245 | wildcard: 2.0.1
3246 |
3247 | webpack-sources@3.2.3: {}
3248 |
3249 | webpack@5.99.9(webpack-cli@6.0.1):
3250 | dependencies:
3251 | '@types/eslint-scope': 3.7.7
3252 | '@types/estree': 1.0.7
3253 | '@types/json-schema': 7.0.15
3254 | '@webassemblyjs/ast': 1.14.1
3255 | '@webassemblyjs/wasm-edit': 1.14.1
3256 | '@webassemblyjs/wasm-parser': 1.14.1
3257 | acorn: 8.14.1
3258 | browserslist: 4.24.5
3259 | chrome-trace-event: 1.0.4
3260 | enhanced-resolve: 5.18.1
3261 | es-module-lexer: 1.7.0
3262 | eslint-scope: 5.1.1
3263 | events: 3.3.0
3264 | glob-to-regexp: 0.4.1
3265 | graceful-fs: 4.2.11
3266 | json-parse-even-better-errors: 2.3.1
3267 | loader-runner: 4.3.0
3268 | mime-types: 2.1.35
3269 | neo-async: 2.6.2
3270 | schema-utils: 4.3.2
3271 | tapable: 2.2.2
3272 | terser-webpack-plugin: 5.3.14(webpack@5.99.9)
3273 | watchpack: 2.4.3
3274 | webpack-sources: 3.2.3
3275 | optionalDependencies:
3276 | webpack-cli: 6.0.1(webpack@5.99.9)
3277 | transitivePeerDependencies:
3278 | - '@swc/core'
3279 | - esbuild
3280 | - uglify-js
3281 |
3282 | which@2.0.2:
3283 | dependencies:
3284 | isexe: 2.0.0
3285 |
3286 | wildcard@2.0.1: {}
3287 |
3288 | word-wrap@1.2.5: {}
3289 |
3290 | wrap-ansi@7.0.0:
3291 | dependencies:
3292 | ansi-styles: 4.3.0
3293 | string-width: 4.2.3
3294 | strip-ansi: 6.0.1
3295 |
3296 | wrap-ansi@8.1.0:
3297 | dependencies:
3298 | ansi-styles: 6.2.1
3299 | string-width: 5.1.2
3300 | strip-ansi: 7.1.0
3301 |
3302 | y18n@5.0.8: {}
3303 |
3304 | yargs-parser@21.1.1: {}
3305 |
3306 | yargs@17.7.2:
3307 | dependencies:
3308 | cliui: 8.0.1
3309 | escalade: 3.2.0
3310 | get-caller-file: 2.0.5
3311 | require-directory: 2.1.1
3312 | string-width: 4.2.3
3313 | y18n: 5.0.8
3314 | yargs-parser: 21.1.1
3315 |
3316 | yocto-queue@0.1.0: {}
3317 |
3318 | yocto-queue@1.2.1: {}
3319 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - "packages/*"
3 |
--------------------------------------------------------------------------------
/public/chrome-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifest_version": 3,
3 | "name": "Vue Devtools Unlocker",
4 | "version": "1.1.0",
5 | "description": "Enable Vue DevTools in production environments",
6 | "icons": {
7 | "16": "icons/icon_16.png",
8 | "32": "icons/icon_32.png",
9 | "48": "icons/icon_48.png",
10 | "128": "icons/icon_128.png"
11 | },
12 | "web_accessible_resources": [
13 | {
14 | "resources": ["injectedScript.js"],
15 | "matches": [""],
16 | "extension_ids": []
17 | }
18 | ],
19 | "background": {
20 | "service_worker": "background.js"
21 | },
22 | "options_ui": {
23 | "page": "options.html",
24 | "open_in_tab": false
25 | },
26 | "action": {
27 | "default_title": "Vue Devtools Unlocker",
28 | "default_popup": "popup.html"
29 | },
30 | "permissions": [
31 | "tabs",
32 | "storage"
33 | ],
34 | "content_scripts": [
35 | {
36 | "matches": [
37 | ""
38 | ],
39 | "run_at": "document_idle",
40 | "js": [
41 | "contentScript.js"
42 | ]
43 | }
44 | ]
45 | }
46 |
--------------------------------------------------------------------------------
/public/firefox-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifest_version": 3,
3 | "name": "Vue Devtools Unlocker",
4 | "version": "1.1.0",
5 | "description": "Enable Vue DevTools in production environments",
6 | "icons": {
7 | "16": "icons/icon_16.png",
8 | "32": "icons/icon_32.png",
9 | "48": "icons/icon_48.png",
10 | "128": "icons/icon_128.png"
11 | },
12 | "browser_specific_settings": {
13 | "gecko": {
14 | "id": "vue-devtools-unlocker@huayi-data.com",
15 | "strict_min_version": "109.0"
16 | }
17 | },
18 | "web_accessible_resources": [
19 | {
20 | "resources": ["injectedScript.js"],
21 | "matches": [""]
22 | }
23 | ],
24 | "background": {
25 | "scripts": ["background.js"]
26 | },
27 | "options_ui": {
28 | "page": "options.html",
29 | "open_in_tab": false
30 | },
31 | "action": {
32 | "default_title": "Vue Devtools Unlocker",
33 | "default_popup": "popup.html"
34 | },
35 | "permissions": [
36 | "tabs",
37 | "storage"
38 | ],
39 | "content_scripts": [
40 | {
41 | "matches": [
42 | ""
43 | ],
44 | "run_at": "document_idle",
45 | "js": [
46 | "contentScript.js"
47 | ]
48 | }
49 | ]
50 | }
51 |
--------------------------------------------------------------------------------
/public/icons/icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhensherlock/vue-devtools-unlocker/83bbfd3723dd05591a68799ec6d3fb63bd7ad2a7/public/icons/icon_128.png
--------------------------------------------------------------------------------
/public/icons/icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhensherlock/vue-devtools-unlocker/83bbfd3723dd05591a68799ec6d3fb63bd7ad2a7/public/icons/icon_16.png
--------------------------------------------------------------------------------
/public/icons/icon_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhensherlock/vue-devtools-unlocker/83bbfd3723dd05591a68799ec6d3fb63bd7ad2a7/public/icons/icon_32.png
--------------------------------------------------------------------------------
/public/icons/icon_48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhensherlock/vue-devtools-unlocker/83bbfd3723dd05591a68799ec6d3fb63bd7ad2a7/public/icons/icon_48.png
--------------------------------------------------------------------------------
/public/options.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Vue Devtools Unlocker Settings
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 |
16 | Enter the URLs or patterns where you want to enable Vue Devtools. Use * for wildcards. Example: *.example.com
17 |
18 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/public/popup.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Vue Devtools Unlocker
6 |
7 |
8 |
9 |
10 |
11 |
12 | Vue Devtools Unlocker
13 |
14 |
15 |
16 |
17 |
18 |
Checking Vue DevTools status...
19 |
20 |
21 |
22 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3 | "extends": [
4 | "config:recommended"
5 | ],
6 | "baseBranches": ["dev"],
7 | "prConcurrentLimit": 0
8 | }
9 |
--------------------------------------------------------------------------------
/tsconfig.root.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": "./",
4 | "target": "es6",
5 | "module": "commonjs",
6 | "esModuleInterop": true,
7 | "strict": true,
8 | "paths": {
9 | "@/*": ["./src/*"],
10 | },
11 | "typeRoots": ["./node_modules/@types", "./src/types"]
12 | },
13 | "exclude": []
14 | }
15 |
--------------------------------------------------------------------------------