├── .editorconfig
├── .gitattributes
├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
└── workflows
│ ├── ci.yml
│ └── update-changelog.yml
├── .gitignore
├── .vscode
└── extensions.json
├── CHANGELOG.md
├── CONTRIBUTING.md
├── INSTALL.md
├── README.md
├── assets
└── featured.jpg
├── index.html
├── package.json
├── postcss.config.js
├── public
├── tauri.svg
└── vite.svg
├── src-tauri
├── .gitignore
├── Cargo.lock
├── Cargo.toml
├── build.rs
├── capabilities
│ └── default.json
├── entitlements.plist
├── icons
│ ├── 128x128.png
│ ├── 128x128@2x.png
│ ├── 32x32.png
│ ├── Square107x107Logo.png
│ ├── Square142x142Logo.png
│ ├── Square150x150Logo.png
│ ├── Square284x284Logo.png
│ ├── Square30x30Logo.png
│ ├── Square310x310Logo.png
│ ├── Square44x44Logo.png
│ ├── Square71x71Logo.png
│ ├── Square89x89Logo.png
│ ├── StoreLogo.png
│ ├── icon.icns
│ ├── icon.ico
│ └── icon.png
├── src
│ ├── lib.rs
│ └── main.rs
└── tauri.conf.json
├── src
├── App.css
├── App.jsx
├── components
│ ├── FilterBar
│ │ └── index.jsx
│ ├── LogItem
│ │ ├── Message.jsx
│ │ ├── TraceModal.jsx
│ │ └── index.jsx
│ ├── LogList
│ │ ├── CompareModal.jsx
│ │ ├── EmptyState.jsx
│ │ └── index.jsx
│ ├── Sidebar
│ │ └── index.jsx
│ └── StatusBar
│ │ └── index.jsx
├── constants
│ └── index.js
├── context
│ └── LogContext.jsx
├── db
│ └── index.js
├── hooks
│ ├── index.js
│ └── useServerStatus.js
├── main.jsx
├── services
│ └── api.js
├── styles
│ └── index.css
└── utils
│ └── formatters.js
├── tailwind.config.js
├── vite.config.js
└── yarn.lock
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | end_of_line = lf
5 | insert_final_newline = true
6 |
7 | [*.{js,json,yml}]
8 | charset = utf-8
9 | indent_style = space
10 | indent_size = 2
11 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | /.yarn/** linguist-vendored
2 | /.yarn/releases/* binary
3 | /.yarn/plugins/**/* binary
4 | /.pnp.* binary linguist-generated
5 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: [muhammetus]
2 | buy_me_a_coffee: muhammetus
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve xRay
4 | title: '[BUG] '
5 | labels: bug
6 | assignees: ''
7 | ---
8 |
9 | **Describe the bug**
10 | A clear and concise description of what the bug is.
11 |
12 | **To Reproduce**
13 | Steps to reproduce the behavior:
14 | 1. Go to '...'
15 | 2. Click on '....'
16 | 3. Scroll down to '....'
17 | 4. See error
18 |
19 | **Expected behavior**
20 | A clear and concise description of what you expected to happen.
21 |
22 | **Screenshots**
23 | If applicable, add screenshots to help explain your problem.
24 |
25 | **Environment (please complete the following information):**
26 | - OS: [e.g. macOS, Windows, Linux]
27 | - Version: [e.g. 0.1.0]
28 | - Architecture: [e.g. x64, arm64]
29 |
30 | **Additional context**
31 | Add any other context about the problem here.
32 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for xRay
4 | title: '[FEATURE] '
5 | labels: enhancement
6 | assignees: ''
7 | ---
8 |
9 | **Is your feature request related to a problem? Please describe.**
10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
11 |
12 | **Describe the solution you'd like**
13 | A clear and concise description of what you want to happen.
14 |
15 | **Describe alternatives you've considered**
16 | A clear and concise description of any alternative solutions or features you've considered.
17 |
18 | **Additional context**
19 | Add any other context or screenshots about the feature request here.
20 |
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI/CD
2 |
3 | on:
4 | release:
5 | types: [created]
6 |
7 | jobs:
8 | build:
9 | strategy:
10 | fail-fast: false
11 | matrix:
12 | include:
13 | - platform: "macos-latest"
14 | args: "--target aarch64-apple-darwin"
15 | binary_path: "src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/*.dmg"
16 | artifact_name: "xRay_aarch64.dmg"
17 | - platform: "macos-latest"
18 | args: "--target x86_64-apple-darwin"
19 | binary_path: "src-tauri/target/x86_64-apple-darwin/release/bundle/dmg/*.dmg"
20 | artifact_name: "xRay_x64.dmg"
21 | - platform: "ubuntu-latest"
22 | args: ""
23 | binary_path: "src-tauri/target/release/bundle/appimage/*.AppImage"
24 | artifact_name: "xRay.AppImage"
25 | - platform: "windows-latest"
26 | args: ""
27 | binary_path: "src-tauri/target/release/bundle/msi/*.msi"
28 | artifact_name: "xRay_x64.msi"
29 |
30 | runs-on: ${{ matrix.platform }}
31 |
32 | steps:
33 | - uses: actions/checkout@v4
34 |
35 | - name: Use Node.js 22.9
36 | uses: actions/setup-node@v4
37 | with:
38 | node-version: 22.9
39 |
40 | - name: Install Yarn
41 | run: |
42 | corepack enable
43 | corepack prepare yarn@3.6.4 --activate
44 |
45 | - name: Install Rust (stable)
46 | uses: dtolnay/rust-toolchain@stable
47 | with:
48 | targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
49 |
50 | - name: Install dependencies (ubuntu only)
51 | if: matrix.platform == 'ubuntu-latest'
52 | run: |
53 | sudo apt-get update
54 | sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libjavascriptcoregtk-4.1-dev libappindicator3-dev librsvg2-dev pkg-config patchelf libsoup-3.0-dev libglib2.0-dev
55 |
56 | - name: Install frontend dependencies
57 | run: yarn install
58 |
59 | - name: Build
60 | run: yarn tauri build ${{ matrix.args }}
61 |
62 | - name: Rename artifacts
63 | shell: bash
64 | run: |
65 | if [ -f ${{ matrix.binary_path }} ]; then
66 | mv ${{ matrix.binary_path }} ${{ matrix.artifact_name }}
67 | fi
68 |
69 | - name: Upload artifacts
70 | uses: actions/upload-artifact@v4
71 | with:
72 | name: ${{ matrix.artifact_name }}
73 | path: ${{ matrix.artifact_name }}
74 | if-no-files-found: error
75 |
76 | release:
77 | needs: build
78 | runs-on: ubuntu-latest
79 |
80 | permissions:
81 | contents: write
82 |
83 | steps:
84 | - uses: actions/download-artifact@v4
85 | with:
86 | path: artifacts
87 |
88 | - name: Display structure of downloaded files
89 | run: ls -R artifacts/
90 |
91 | - name: Create Release
92 | uses: softprops/action-gh-release@v2
93 | with:
94 | files: |
95 | artifacts/xRay_aarch64.dmg/*
96 | artifacts/xRay_x64.dmg/*
97 | artifacts/xRay.AppImage/*
98 | artifacts/xRay_x64.msi/*
99 | draft: false
100 | prerelease: false
101 | generate_release_notes: true
102 | env:
103 | token: ${{ secrets.XRAY_TOKEN }}
104 |
--------------------------------------------------------------------------------
/.github/workflows/update-changelog.yml:
--------------------------------------------------------------------------------
1 | name: "Update Changelog"
2 |
3 | on:
4 | release:
5 | types: [released]
6 |
7 | permissions:
8 | contents: write
9 |
10 | jobs:
11 | update:
12 | runs-on: ubuntu-latest
13 | timeout-minutes: 5
14 |
15 | steps:
16 | - name: Checkout code
17 | uses: actions/checkout@v4
18 | with:
19 | ref: main
20 |
21 | - name: Update Changelog
22 | uses: stefanzweifel/changelog-updater-action@v1
23 | with:
24 | latest-version: ${{ github.event.release.name }}
25 | release-notes: ${{ github.event.release.body }}
26 |
27 | - name: Commit updated CHANGELOG
28 | uses: stefanzweifel/git-auto-commit-action@v5
29 | with:
30 | branch: main
31 | commit_message: Update CHANGELOG
32 | file_pattern: CHANGELOG.md
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 | .yarn
26 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer"]
3 | }
4 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to `xRay` will be documented in this file.
4 |
5 | ## v1.0.0 - 2024-12-26
6 |
7 | **Full Changelog**: https://github.com/xRay-Log/xRay/compare/v0.3.2...v1.0.0
8 |
9 | ## v0.3.2 - 2024-12-18
10 |
11 | ### What's Changed
12 |
13 | * ci(deps): bump actions/download-artifact from 3 to 4 by @dependabot in https://github.com/xRay-Log/xRay/pull/11
14 | * ci(deps): bump softprops/action-gh-release from 1 to 2 by @dependabot in https://github.com/xRay-Log/xRay/pull/12
15 | * ci(deps): bump actions/checkout from 3 to 4 by @dependabot in https://github.com/xRay-Log/xRay/pull/13
16 | * ci(deps): bump actions/upload-artifact from 3 to 4 by @dependabot in https://github.com/xRay-Log/xRay/pull/14
17 | * ci(deps): bump actions/setup-node from 3 to 4 by @dependabot in https://github.com/xRay-Log/xRay/pull/15
18 | * dev(deps-dev): bump vite from 5.4.11 to 6.0.2 by @dependabot in https://github.com/xRay-Log/xRay/pull/16
19 | * dev(deps-dev): bump @vitejs/plugin-react from 4.3.3 to 4.3.4 by @dependabot in https://github.com/xRay-Log/xRay/pull/17
20 | * deps(deps): bump framer-motion from 11.11.17 to 11.12.0 by @dependabot in https://github.com/xRay-Log/xRay/pull/18
21 | * deps(deps): bump framer-motion from 11.12.0 to 11.13.1 by @dependabot in https://github.com/xRay-Log/xRay/pull/19
22 | * deps(deps): bump react-icons from 5.3.0 to 5.4.0 by @dependabot in https://github.com/xRay-Log/xRay/pull/20
23 | * dev(deps-dev): bump tailwindcss from 3.4.15 to 3.4.16 by @dependabot in https://github.com/xRay-Log/xRay/pull/21
24 | * deps(deps): bump framer-motion from 11.13.1 to 11.14.1 by @dependabot in https://github.com/xRay-Log/xRay/pull/28
25 | * deps(deps): bump @tauri-apps/plugin-shell from 2.0.1 to 2.2.0 by @dependabot in https://github.com/xRay-Log/xRay/pull/25
26 | * dev(deps-dev): bump vite from 6.0.2 to 6.0.3 by @dependabot in https://github.com/xRay-Log/xRay/pull/23
27 | * deps(deps): bump react-dom from 18.3.1 to 19.0.0 by @dependabot in https://github.com/xRay-Log/xRay/pull/22
28 | * dev(deps-dev): bump tailwindcss from 3.4.16 to 3.4.17 by @dependabot in https://github.com/xRay-Log/xRay/pull/31
29 |
30 | ### New Contributors
31 |
32 | * @dependabot made their first contribution in https://github.com/xRay-Log/xRay/pull/11
33 |
34 | **Full Changelog**: https://github.com/xRay-Log/xRay/compare/v0.3.1...v0.3.2
35 |
36 | ## v0.3.1 - 2024-11-27
37 |
38 | **Full Changelog**: https://github.com/xRay-Log/xRay/compare/v0.3.0...v0.3.1
39 |
40 | ## v0.3.0 - 2024-11-26
41 |
42 | ### What's Changed
43 |
44 | * change funding by @muhammetus in https://github.com/xRay-Log/xRay/pull/9
45 | * refactor all codebase by @muhammetus in https://github.com/xRay-Log/xRay/pull/10
46 |
47 | **Full Changelog**: https://github.com/xRay-Log/xRay/compare/v0.2.0...v0.3.0
48 |
49 | ## v0.2.0 - 2024-11-23
50 |
51 | ### What's Changed
52 |
53 | * improvements release v0.2 by @muhammetus in https://github.com/xRay-Log/xRay/pull/8
54 |
55 | **Full Changelog**: https://github.com/xRay-Log/xRay/compare/v0.1.3...v0.2.0
56 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to xRay
2 |
3 | Thank you for your interest in contributing to xRay! Here's how you can help:
4 |
5 | ## How to Contribute
6 |
7 | 1. Fork the repository
8 | 2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
9 | 3. Make your changes
10 | 4. Run tests and linting
11 | 5. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
12 | 6. Push to the branch (`git push origin feature/AmazingFeature`)
13 | 7. Open a Pull Request
14 |
15 | ## Pull Request Guidelines
16 |
17 | - Update documentation if needed
18 | - Add tests for new features (we're working on our test suite - for now, just make sure it doesn't catch fire 🔥)
19 | - Follow the existing code style
20 | - Keep commits clean and meaningful
21 |
22 | ## Reporting Issues
23 |
24 | If you find a bug or have a suggestion, please open an issue at [GitHub Issues](https://github.com/XRay-Log/xRay/issues).
25 |
26 | Include:
27 | - A clear description of the issue
28 | - Steps to reproduce
29 | - Expected behavior
30 | - Current behavior
31 | - Any relevant code snippets or screenshots
32 |
33 | ## License
34 |
35 | By contributing, you agree that your contributions will be licensed under the MIT License.
36 |
--------------------------------------------------------------------------------
/INSTALL.md:
--------------------------------------------------------------------------------
1 | # Installation Guide
2 |
3 | This guide provides detailed instructions for installing and running xRay on different operating systems.
4 |
5 | ## macOS
6 |
7 | ### Installation Steps
8 |
9 | 1. Download the appropriate version for your Mac:
10 | - For Apple Silicon (M1/M2): [Download ARM64 Version](https://github.com/XRay-Log/xRay/releases/latest/download/xRay_aarch64.dmg)
11 | - For Intel-based Mac: [Download x64 Version](https://github.com/XRay-Log/xRay/releases/latest/download/xRay_x64.dmg)
12 |
13 | 2. Open the downloaded .dmg file
14 | 3. Drag the xRay app to your Applications folder
15 |
16 | ### Running Unsigned Application
17 |
18 | Since the application is not signed with an Apple Developer Certificate, macOS may prevent it from running. Here's how to run the application:
19 |
20 | 1. When you first try to open the application, macOS might show a warning saying "cannot be opened because the developer cannot be verified."
21 | 2. To open the app:
22 | - Right-click (or Control-click) on the app in Finder
23 | - Select "Open" from the context menu
24 | - Click "Open" in the dialog box that appears
25 | 3. Alternative method using Terminal:
26 | ```bash
27 | xattr -cr /Applications/xRay.app
28 | ```
29 | Then try opening the app again.
30 |
31 | > **Note**: You only need to do this once. After allowing the app to run for the first time, you can open it normally.
32 |
33 | ## Windows
34 |
35 | ### Installation Steps
36 |
37 | 1. Download the latest version for Windows
38 | 2. Run the installer (.exe file)
39 | 3. Follow the installation wizard instructions
40 |
41 | ### Running Unsigned Application
42 |
43 | When running the application on Windows, you might see a "Windows protected your PC" message because the app isn't signed with a Microsoft certificate. Here's how to run it:
44 |
45 | 1. When the SmartScreen warning appears:
46 | - Click "More info"
47 | - Click "Run anyway"
48 |
49 | 2. Alternative method:
50 | - Right-click the .exe file
51 | - Select "Properties"
52 | - Check the box next to "Unblock" under Security
53 | - Click "Apply" and "OK"
54 |
55 | > **Note**: This is a one-time process. After allowing the app once, you can open it normally in the future.
56 |
57 | ## Troubleshooting
58 |
59 | If you encounter any issues during installation:
60 |
61 | 1. Make sure you have downloaded the correct version for your operating system
62 | 2. Check if you have sufficient permissions to install applications
63 | 3. Temporarily disable antivirus software if it's blocking the installation
64 | 4. For additional help, please create an issue on our [GitHub Issues](https://github.com/XRay-Log/xRay/issues) page
65 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # xRay
2 |
3 | A modern, high-performance log management and comparison application built with React and Tauri.
4 |
5 | > **⚠️ Beta Notice**: xRay is currently in beta. While it's stable for daily use, you may encounter occasional bugs. Please report any issues you find on our [GitHub Issues](https://github.com/XRay-Log/xRay/issues) page.
6 |
7 | 
8 |
9 | ## Download
10 |
11 |
12 |
13 | [](https://github.com/XRay-Log/xRay/releases/latest/download/xRay_aarch64.dmg)
14 | [](https://github.com/XRay-Log/xRay/releases/latest/download/xRay_x64.dmg)
15 | [](https://github.com/XRay-Log/xRay/releases/latest/download/xRay_x64.msi)
16 | [](https://github.com/XRay-Log/xRay/releases/latest/download/xRay.AppImage)
17 |
18 |
19 |
20 | > **Note**: For detailed installation instructions and troubleshooting, please see our [Installation Guide](INSTALL.md).
21 |
22 | ## Features
23 |
24 | - 🚀 Real-time log monitoring
25 | - 🔍 Advanced log filtering and search
26 | - 📊 Log level categorization (Error, Warning, Info, Debug)
27 | - 🔄 Log comparison functionality
28 | - 🔖 Bookmark important logs
29 | - 🌓 Dark/Light theme support
30 | - 🗂️ Project-based log organization
31 | - 💾 Local storage with IndexedDB
32 | - ⚡ High-performance rendering
33 | - 🎯 Cross-platform support
34 |
35 | ## SDKs
36 |
37 |
38 |
39 | | Language | Latest Version | Documentation |
40 | |----------|---------------|---------------|
41 | |

Laravel | [](https://packagist.org/packages/xray-log/laravel) | [Documentation](https://github.com/xRay-Log/laravel#readme) |
42 | |

PHP | [](https://packagist.org/packages/xray-log/php-sdk) | [Documentation](https://github.com/xRay-Log/php-sdk#readme) |
43 | |

JavaScript | [](https://www.npmjs.com/package/@xraylog/javascript-sdk) | [Documentation](https://github.com/xRay-Log/javascript-sdk#readme) |
44 |
45 |
46 |
47 | ## Development
48 |
49 | 1. Clone the repository:
50 | ```bash
51 | git clone https://github.com/XRay-Log/xRay.git
52 | cd xRay
53 | ```
54 |
55 | 2. Install dependencies:
56 | ```bash
57 | yarn install
58 | ```
59 |
60 | 3. Start the development server:
61 | ```bash
62 | yarn tauri dev
63 | ```
64 |
65 | ### Prerequisites
66 |
67 | - Node.js (v16 or higher)
68 | - Rust (latest stable)
69 | - Tauri CLI
70 | - Yarn package manager
71 |
72 | ### Example Usage
73 |
74 | Send logs to xRay using curl:
75 | ```bash
76 | curl -s -L -X POST 'http://localhost:44827/receive' \
77 | -H 'Content-Type: application/json' \
78 | -d '{
79 | "level": "INFO",
80 | "payload": "{\"email\":\"muhammetuss@gmail.com\"}",
81 | "trace": "null",
82 | "project": "Users Service"
83 | }'
84 | ```
85 |
86 | ## Features in Detail
87 |
88 | - **Log Monitoring**: View and analyze logs in real-time with automatic level-based coloring
89 | - **Smart Filtering**: Filter logs by level, project, or use bookmarks for quick access
90 | - **Compare Mode**: Compare any two logs side by side
91 | - **Theme Options**: Switch between dark and light themes based on your preference
92 |
93 | ## Contributing
94 |
95 | Please see our [Contributing Guide](./CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.
96 |
97 | ## License
98 |
99 | This project is licensed under the MIT License - see the LICENSE file for details.
100 |
--------------------------------------------------------------------------------
/assets/featured.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/assets/featured.jpg
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Tauri + React
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "xray",
3 | "packageManager": "yarn@3.6.4",
4 | "private": true,
5 | "version": "0.1.0",
6 | "type": "module",
7 | "description": "A modern, high-performance log management and comparison application",
8 | "author": "XRay Team",
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/XRay-Log/xRay"
12 | },
13 | "scripts": {
14 | "dev": "vite",
15 | "build": "vite build",
16 | "preview": "vite preview",
17 | "tauri": "tauri"
18 | },
19 | "dependencies": {
20 | "@tauri-apps/api": "^2.1.1",
21 | "@tauri-apps/cli": "^2.1.0",
22 | "@tauri-apps/plugin-shell": "~2",
23 | "dexie": "^4.0.10",
24 | "dexie-react-hooks": "^1.1.7",
25 | "framer-motion": "^11.14.1",
26 | "react": "^18.2.0",
27 | "react-dom": "^18.2.0",
28 | "react-icons": "^5.4.0",
29 | "react-syntax-highlighter": "^15.6.1",
30 | "react18-json-view": "^0.2.8",
31 | "uuid": "^11.0.3"
32 | },
33 | "devDependencies": {
34 | "@vitejs/plugin-react": "^4.3.4",
35 | "autoprefixer": "^10.4.20",
36 | "postcss": "^8.4.49",
37 | "tailwindcss": "^3.4.17",
38 | "vite": "^6.0.3"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/tauri.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src-tauri/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated by Cargo
2 | # will have compiled files and executables
3 | /target/
4 | /gen/schemas
5 |
--------------------------------------------------------------------------------
/src-tauri/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "xRay"
3 | version = "0.1.0"
4 | description = "A modern, high-performance log management and comparison application"
5 | authors = ["XRay Team"]
6 | license = "MIT"
7 | repository = "https://github.com/XRay-Log/xRay"
8 | edition = "2021"
9 | rust-version = "1.77.2"
10 |
11 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
12 |
13 | [lib]
14 | name = "app_lib"
15 | crate-type = ["staticlib", "cdylib", "rlib"]
16 |
17 | [build-dependencies]
18 | tauri-build = { version = "2.0.0-beta", features = [] }
19 |
20 | [dependencies]
21 | serde_json = "1.0"
22 | serde = { version = "1.0", features = ["derive"] }
23 | tauri = { version = "2.0.0-beta", features = [] }
24 | tokio = { version = "1.0", features = ["full"] }
25 | tauri-plugin-log = "2.0.0-rc"
26 | tauri-plugin-dialog = "2"
27 | tauri-plugin-fs = "2"
28 | log = "0.4.20"
29 | axum = "0.7.2"
30 | tower-http = { version = "0.5.0", features = ["cors"] }
31 | tauri-plugin-shell = "2"
32 |
33 | [features]
34 | custom-protocol = ["tauri/custom-protocol"]
35 |
--------------------------------------------------------------------------------
/src-tauri/build.rs:
--------------------------------------------------------------------------------
1 | fn main() {
2 | tauri_build::build()
3 | }
4 |
--------------------------------------------------------------------------------
/src-tauri/capabilities/default.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "../gen/schemas/desktop-schema.json",
3 | "identifier": "default",
4 | "description": "enables the default permissions",
5 | "windows": [
6 | "main"
7 | ],
8 | "permissions": [
9 | "core:default",
10 | "dialog:default",
11 | "fs:default",
12 | "shell:default"
13 | ]
14 | }
--------------------------------------------------------------------------------
/src-tauri/entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.cs.allow-jit
6 |
7 | com.apple.security.cs.allow-unsigned-executable-memory
8 |
9 | com.apple.security.cs.allow-dyld-environment-variables
10 |
11 | com.apple.security.network.client
12 |
13 | com.apple.security.network.server
14 |
15 | com.apple.security.files.user-selected.read-write
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src-tauri/icons/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/128x128.png
--------------------------------------------------------------------------------
/src-tauri/icons/128x128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/128x128@2x.png
--------------------------------------------------------------------------------
/src-tauri/icons/32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/32x32.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square107x107Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/Square107x107Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square142x142Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/Square142x142Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square150x150Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/Square150x150Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square284x284Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/Square284x284Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square30x30Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/Square30x30Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square310x310Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/Square310x310Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square44x44Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/Square44x44Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square71x71Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/Square71x71Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/Square89x89Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/Square89x89Logo.png
--------------------------------------------------------------------------------
/src-tauri/icons/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/StoreLogo.png
--------------------------------------------------------------------------------
/src-tauri/icons/icon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/icon.icns
--------------------------------------------------------------------------------
/src-tauri/icons/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/icon.ico
--------------------------------------------------------------------------------
/src-tauri/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xRay-Log/xRay/d81f31f62097c44c3747e0ab3bd538d25bfe2167/src-tauri/icons/icon.png
--------------------------------------------------------------------------------
/src-tauri/src/lib.rs:
--------------------------------------------------------------------------------
1 | #[cfg_attr(mobile, tauri::mobile_entry_point)]
2 | pub fn run() {
3 | tauri::Builder::default()
4 | .plugin(tauri_plugin_fs::init())
5 | .plugin(tauri_plugin_dialog::init())
6 | .setup(|app| {
7 | if cfg!(debug_assertions) {
8 | app.handle().plugin(
9 | tauri_plugin_log::Builder::default()
10 | .level(log::LevelFilter::Info)
11 | .build(),
12 | )?;
13 | }
14 | Ok(())
15 | })
16 | .run(tauri::generate_context!())
17 | .expect("error while running tauri application");
18 | }
19 |
--------------------------------------------------------------------------------
/src-tauri/src/main.rs:
--------------------------------------------------------------------------------
1 | use axum::{
2 | extract::State,
3 | response::Json as AxumJson,
4 | routing::{get, post},
5 | Router,
6 | };
7 | use serde::{Deserialize, Serialize};
8 | use serde_json;
9 | use std::net::SocketAddr;
10 | use tauri::Emitter;
11 | use tauri::{async_runtime, AppHandle};
12 | use tower_http::cors::{Any, CorsLayer};
13 |
14 | // Main function to start Tauri and HTTP server
15 | #[tokio::main]
16 | async fn main() {
17 | tauri::Builder::default()
18 | .plugin(tauri_plugin_shell::init())
19 | .setup(|app| {
20 | let app_handle = app.handle().clone(); // Clone the app handle for async task
21 | async_runtime::spawn(async move {
22 | start_http_server(app_handle).await;
23 | });
24 | Ok(())
25 | })
26 | .run(tauri::generate_context!())
27 | .expect("error while running tauri application");
28 | }
29 |
30 | // Start HTTP server
31 | async fn start_http_server(app_handle: tauri::AppHandle) {
32 | let cors = CorsLayer::new()
33 | .allow_origin(Any)
34 | .allow_methods(Any)
35 | .allow_headers(Any);
36 |
37 | let app = Router::new()
38 | .route("/health", get(health_check))
39 | .route("/receive", post(receive_payload))
40 | .layer(cors)
41 | .with_state(app_handle);
42 |
43 | let addr = SocketAddr::from(([127, 0, 0, 1], 44827));
44 |
45 | let listener = tokio::net::TcpListener::bind(addr).await.unwrap();
46 | axum::serve(listener, app).await.unwrap();
47 | }
48 |
49 | // Health check endpoint
50 | async fn health_check() -> &'static str {
51 | "OK"
52 | }
53 |
54 | // Data model for /receive endpoint
55 | #[derive(Serialize, Deserialize)]
56 | struct Payload {
57 | project: String,
58 | level: String,
59 | payload: String,
60 | trace: String,
61 | }
62 |
63 | // Receive endpoint with Tauri event emit
64 | async fn receive_payload(
65 | State(app_handle): State,
66 | AxumJson(input): AxumJson,
67 | ) -> AxumJson {
68 | let input_string = match serde_json::to_string(&input) {
69 | Ok(json) => json,
70 | Err(e) => {
71 | eprintln!("Failed to serialize input to JSON: {}", e);
72 | return AxumJson("Failed to process payload".to_string());
73 | }
74 | };
75 |
76 | if let Err(e) = app_handle.emit("log", &input_string) {
77 | eprintln!("Failed to emit event: {}", e);
78 | }
79 |
80 | AxumJson("Data received!".to_string())
81 | }
82 |
--------------------------------------------------------------------------------
/src-tauri/tauri.conf.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://schema.tauri.app/config/2",
3 | "identifier": "com.xray.dev",
4 | "productName": "xRay",
5 | "version": "0.1.0",
6 | "build": {
7 | "beforeDevCommand": "yarn dev",
8 | "beforeBuildCommand": "yarn build",
9 | "devUrl": "http://localhost:1420",
10 | "frontendDist": "../dist"
11 | },
12 | "app": {
13 | "security": {
14 | "csp": null
15 | },
16 | "windows": [
17 | {
18 | "title": "xRay",
19 | "width": 1200,
20 | "height": 800,
21 | "resizable": true,
22 | "fullscreen": false
23 | }
24 | ]
25 | },
26 | "bundle": {
27 | "active": true,
28 | "targets": "all",
29 | "icon": [
30 | "icons/32x32.png",
31 | "icons/128x128.png",
32 | "icons/128x128@2x.png",
33 | "icons/icon.icns",
34 | "icons/icon.ico"
35 | ],
36 | "resources": [],
37 | "copyright": "",
38 | "category": "DeveloperTool",
39 | "shortDescription": "",
40 | "macOS": {
41 | "frameworks": [],
42 | "minimumSystemVersion": "10.13",
43 | "exceptionDomain": "",
44 | "signingIdentity": null,
45 | "providerShortName": null,
46 | "entitlements": null
47 | },
48 | "windows": {
49 | "certificateThumbprint": null,
50 | "digestAlgorithm": "sha256",
51 | "timestampUrl": ""
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/App.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | }
6 |
7 | body {
8 | margin: 0;
9 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
10 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
11 | sans-serif;
12 | -webkit-font-smoothing: antialiased;
13 | -moz-osx-font-smoothing: grayscale;
14 | }
15 |
16 | .app {
17 | height: 100vh;
18 | width: 100vw;
19 | overflow: hidden;
20 | }
21 |
22 | /* Dark mode styles */
23 | body.dark-mode {
24 | background-color: #1a1a1a;
25 | color: #fff;
26 | }
27 |
28 | .logo.vite:hover {
29 | filter: drop-shadow(0 0 2em #747bff);
30 | }
31 |
32 | .logo.react:hover {
33 | filter: drop-shadow(0 0 2em #61dafb);
34 | }
35 | :root {
36 | font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
37 | font-size: 16px;
38 | line-height: 24px;
39 | font-weight: 400;
40 |
41 | color: #0f0f0f;
42 | background-color: #f6f6f6;
43 |
44 | font-synthesis: none;
45 | text-rendering: optimizeLegibility;
46 | -webkit-font-smoothing: antialiased;
47 | -moz-osx-font-smoothing: grayscale;
48 | -webkit-text-size-adjust: 100%;
49 | }
50 |
51 | .container {
52 | margin: 0;
53 | padding-top: 10vh;
54 | display: flex;
55 | flex-direction: column;
56 | justify-content: center;
57 | text-align: center;
58 | }
59 |
60 | .logo {
61 | height: 6em;
62 | padding: 1.5em;
63 | will-change: filter;
64 | transition: 0.75s;
65 | }
66 |
67 | .logo.tauri:hover {
68 | filter: drop-shadow(0 0 2em #24c8db);
69 | }
70 |
71 | .row {
72 | display: flex;
73 | justify-content: center;
74 | }
75 |
76 | a {
77 | font-weight: 500;
78 | color: #646cff;
79 | text-decoration: inherit;
80 | }
81 |
82 | a:hover {
83 | color: #535bf2;
84 | }
85 |
86 | h1 {
87 | text-align: center;
88 | }
89 |
90 | input,
91 | button {
92 | border-radius: 8px;
93 | border: 1px solid transparent;
94 | padding: 0.6em 1.2em;
95 | font-size: 1em;
96 | font-weight: 500;
97 | font-family: inherit;
98 | color: #0f0f0f;
99 | background-color: #ffffff;
100 | transition: border-color 0.25s;
101 | box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);
102 | }
103 |
104 | button {
105 | cursor: pointer;
106 | }
107 |
108 | button:hover {
109 | border-color: #396cd8;
110 | }
111 | button:active {
112 | border-color: #396cd8;
113 | background-color: #e8e8e8;
114 | }
115 |
116 | input,
117 | button {
118 | outline: none;
119 | }
120 |
121 | #greet-input {
122 | margin-right: 5px;
123 | }
124 |
125 | @media (prefers-color-scheme: dark) {
126 | :root {
127 | color: #f6f6f6;
128 | background-color: #2f2f2f;
129 | }
130 |
131 | a:hover {
132 | color: #24c8db;
133 | }
134 |
135 | input,
136 | button {
137 | color: #ffffff;
138 | background-color: #0f0f0f98;
139 | }
140 | button:active {
141 | background-color: #0f0f0f69;
142 | }
143 | }
144 |
145 |
--------------------------------------------------------------------------------
/src/App.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { LogProvider } from './context/LogContext';
3 | import StatusBar from './components/StatusBar';
4 | import Sidebar from './components/Sidebar';
5 | import LogList from './components/LogList';
6 | import FilterBar from './components/FilterBar';
7 |
8 | function App() {
9 | return (
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | );
23 | }
24 |
25 | export default App;
26 |
--------------------------------------------------------------------------------
/src/components/FilterBar/index.jsx:
--------------------------------------------------------------------------------
1 | import React, { useContext } from 'react';
2 | import { LogContext, useLog } from '../../context/LogContext';
3 | import { LOG_LEVELS } from '../../constants';
4 |
5 | const FilterBar = () => {
6 | const {
7 | clearLogs,
8 | selectedLevels,
9 | updateFilters,
10 | totalLogsCount
11 | } = useLog();
12 |
13 | const toggleLogLevel = (logLevel) => {
14 | if (selectedLevels.has(logLevel)) {
15 | updateFilters({
16 | levels: new Set([...selectedLevels].filter(level => level !== logLevel))
17 | });
18 | } else {
19 | updateFilters({
20 | levels: new Set([...selectedLevels, logLevel])
21 | });
22 | }
23 | };
24 |
25 | return (
26 |
27 |
28 |
29 | {LOG_LEVELS.map(({ level, color }) => (
30 |
46 | ))}
47 |
48 |
49 |
50 |
51 | {totalLogsCount} logs
52 |
53 |
59 |
60 |
61 |
62 | );
63 | };
64 |
65 | export default FilterBar;
66 |
--------------------------------------------------------------------------------
/src/components/LogItem/Message.jsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef, memo } from 'react';
2 | import JsonView from 'react18-json-view';
3 | import 'react18-json-view/src/style.css'
4 |
5 | const styles = `
6 | :host {
7 | display: block;
8 | width: 100%;
9 | }
10 | .content {
11 | margin: 0;
12 | overflow: auto;
13 | background-color: transparent;
14 | }
15 | `;
16 |
17 | const isJSON = (str) => {
18 | try {
19 | const result = JSON.parse(str);
20 | return typeof result === 'object';
21 | } catch (e) {
22 | return false;
23 | }
24 | };
25 |
26 | const Message = ({ data }) => {
27 | const containerRef = useRef(null);
28 | const hostRef = useRef(null);
29 |
30 | useEffect(() => {
31 | if (isJSON(data)) {
32 | return;
33 | }
34 |
35 | if (!containerRef.current) return;
36 |
37 | const host = document.createElement('div');
38 | hostRef.current = host;
39 | const shadow = host.attachShadow({ mode: 'open' });
40 |
41 | const style = document.createElement('style');
42 | style.textContent = styles;
43 |
44 | const content = document.createElement('div');
45 | content.className = 'content';
46 | content.innerHTML = data;
47 |
48 | shadow.append(style, content);
49 | containerRef.current.appendChild(host);
50 |
51 | return () => {
52 | hostRef.current?.remove();
53 | };
54 | }, [data]);
55 |
56 | if (isJSON(data)) {
57 | return (
58 | <>
59 |
67 | >
68 | );
69 | }
70 |
71 | return ;
72 | };
73 |
74 | export default memo(Message);
--------------------------------------------------------------------------------
/src/components/LogItem/TraceModal.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { motion, AnimatePresence } from 'framer-motion';
3 | import { FaTimes } from 'react-icons/fa';
4 |
5 | const TraceModal = ({ trace, onClose, darkMode }) => {
6 | if (!trace) return null;
7 |
8 | return (
9 |
10 |
11 |
17 |
18 |
19 | Trace Details
20 |
21 |
27 |
28 |
29 |
30 |
35 | {JSON.stringify(trace, null, 2)}
36 |
37 |
38 |
39 |
40 |
41 | );
42 | };
43 |
44 | export default TraceModal;
45 |
--------------------------------------------------------------------------------
/src/components/LogItem/index.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, memo, useCallback } from 'react';
2 | import { motion } from 'framer-motion';
3 | import {
4 | FaInfoCircle, FaBookmark, FaRegBookmark,
5 | FaExchangeAlt, FaTrash, FaCopy, FaCheck
6 | } from 'react-icons/fa';
7 | import { useLog } from '../../context/LogContext';
8 | import { formatTime } from '../../utils/formatters';
9 | import TraceDetailsModal from './TraceModal';
10 | import Message from './Message';
11 |
12 | const ActionButton = memo(({ onClick, className, title, icon: Icon }) => (
13 |
26 | ));
27 |
28 | const CopyButton = memo(({ onClick, isCopied }) => (
29 |
51 | ));
52 |
53 | const SelectionCheckbox = memo(({ isSelected }) => (
54 |
60 | {isSelected && }
61 |
62 | ));
63 |
64 | const LogLevel = memo(({ level }) => {
65 | const getLogLevelClass = (level) => {
66 | switch (level?.toLowerCase()) {
67 | case 'error':
68 | return 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-300';
69 | case 'warning':
70 | return 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-300';
71 | case 'info':
72 | return 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300';
73 | case 'debug':
74 | return 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300';
75 | default:
76 | return 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300';
77 | }
78 | };
79 |
80 | return (
81 |
82 | {(level || 'INFO').toUpperCase()}
83 |
84 | );
85 | });
86 |
87 | const LogActions = memo(({
88 | log,
89 | bookmarkedLogs,
90 | onTraceClick,
91 | onBookmarkToggle,
92 |
93 | onDelete,
94 | onCompare,
95 | selectionMode,
96 | hideActions = false
97 | }) => {
98 | if (hideActions) return null;
99 |
100 | return (
101 |
102 | {log.trace && (
103 |
onTraceClick(log.trace)}
105 | title="View Trace Details"
106 | icon={FaInfoCircle}
107 | />
108 | )}
109 | onBookmarkToggle(log)}
111 | title={bookmarkedLogs.has(log.id) ? "Remove Bookmark" : "Add Bookmark"}
112 | icon={bookmarkedLogs.has(log.id) ? FaBookmark : FaRegBookmark}
113 | className={bookmarkedLogs.has(log.id) ? "text-blue-500" : ""}
114 | />
115 | {!selectionMode && (
116 | <>
117 |
122 | onDelete(log.id)}
124 | title="Delete Log"
125 | icon={FaTrash}
126 | className="hover:text-red-500 dark:hover:text-red-400
127 | hover:bg-red-50 dark:hover:bg-red-900/20"
128 | />
129 | >
130 | )}
131 |
132 | );
133 | });
134 |
135 | const LogHeader = memo(({ log, darkMode }) => (
136 |
137 |
138 |
139 | {formatTime(log.timestamp || new Date())}
140 |
141 |
142 | ));
143 |
144 | const LogItem = ({ log, isSelected, onSelect, selectionMode, hideActions = false }) => {
145 | const { darkMode, deleteLog, startComparison, selectedLogs,bookmarkedLogs,toggleBookmark } = useLog();
146 | const [copiedLogId, setCopiedLogId] = useState(null);
147 | const [showTraceModal, setShowTraceModal] = useState(false);
148 | const [currentTrace, setCurrentTrace] = useState(null);
149 |
150 | const handleTraceClick = useCallback((trace) => {
151 | try {
152 | const traceData = trace;
153 | setCurrentTrace(traceData);
154 | setShowTraceModal(true);
155 | } catch (error) {
156 | console.error('Error parsing trace data:', error);
157 | setCurrentTrace(trace);
158 | setShowTraceModal(true);
159 | }
160 | }, []);
161 |
162 | const handleCopyLog = useCallback(async () => {
163 | try {
164 | await navigator.clipboard.writeText(log.message || '');
165 | setCopiedLogId(log.id);
166 | setTimeout(() => setCopiedLogId(null), 2000);
167 | } catch (error) {
168 | console.error('Failed to copy log:', error);
169 | }
170 | }, [log]);
171 |
172 | const handleCompare = useCallback(() => {
173 | onSelect(log.id);
174 | if (selectedLogs.length === 1) {
175 | startComparison();
176 | }
177 | }, [log.id, selectedLogs.length, onSelect, startComparison]);
178 |
179 | return (
180 | <>
181 | onSelect(log.id) : undefined}
193 | >
194 |
195 |
196 | {selectionMode && }
197 |
198 |
199 |
200 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
223 |
224 |
225 |
226 |
227 | {showTraceModal && (
228 | setShowTraceModal(false)}
231 | trace={currentTrace}
232 | />
233 | )}
234 | >
235 | );
236 | };
237 | export default memo(LogItem);
238 |
--------------------------------------------------------------------------------
/src/components/LogList/CompareModal.jsx:
--------------------------------------------------------------------------------
1 | import React, { memo } from 'react';
2 | import { motion, AnimatePresence } from 'framer-motion';
3 | import { FaTimes } from 'react-icons/fa';
4 | import LogItem from '../LogItem/index';
5 |
6 | const CompareModal = ({ isOpen, onClose, logs = [] }) => {
7 | //console.group('CompareModal');
8 | //console.log(isOpen);
9 | //console.log(logs.length);
10 | if (!isOpen || logs.length !== 2) return null;
11 |
12 | return (
13 |
14 |
15 |
21 |
22 |
23 | Compare Logs
24 |
25 |
31 |
32 |
33 |
34 | {logs.map((log) => (
35 |
36 |
40 |
41 | ))}
42 |
43 |
44 |
45 |
46 | );
47 | };
48 |
49 | export default memo(CompareModal);
50 |
--------------------------------------------------------------------------------
/src/components/LogList/EmptyState.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { motion } from 'framer-motion';
3 | import { FaInbox } from 'react-icons/fa';
4 |
5 | const draw = {
6 | hidden: { pathLength: 0, opacity: 0 },
7 | visible: {
8 | pathLength: 1,
9 | opacity: 1,
10 | transition: {
11 | pathLength: { type: "spring", duration: 1.5, bounce: 0 },
12 | opacity: { duration: 0.01 }
13 | }
14 | }
15 | };
16 |
17 | const EmptyState = () => {
18 | const renderLine = (x1, y1, x2, y2) => (
19 |
29 | );
30 |
31 | return (
32 |
33 |
38 | {/* Circle */}
39 |
43 |
53 |
54 |
55 | {/* Lines */}
56 |
60 | {renderLine("30", "35", "70", "35")}
61 | {renderLine("30", "45", "70", "45")}
62 | {renderLine("30", "55", "70", "55")}
63 | {renderLine("30", "65", "50", "65")}
64 |
65 |
66 | {/* Icon */}
67 |
73 |
74 |
75 |
76 |
77 | {/* Text */}
78 |
84 |
85 | No Logs Yet
86 |
87 |
88 | Start your application to see logs appear here
89 |
90 |
91 |
92 | );
93 | };
94 |
95 | export default EmptyState;
96 |
--------------------------------------------------------------------------------
/src/components/LogList/index.jsx:
--------------------------------------------------------------------------------
1 | import React, { memo, useCallback } from 'react';
2 | import { useLog } from '../../context/LogContext';
3 | import LogItem from '../LogItem';
4 | import EmptyState from './EmptyState';
5 | import CompareModal from './CompareModal';
6 |
7 | const LogList = () => {
8 | const {
9 | logs,
10 | selectedLogs,
11 | isComparing,
12 | toggleLogSelection,
13 | cancelComparison,
14 | } = useLog();
15 |
16 | const handleSelect = useCallback((logId) => {
17 | toggleLogSelection(logId);
18 | }, [toggleLogSelection]);
19 |
20 | if (logs.length === 0) {
21 | return ;
22 | }
23 |
24 | const selectionMode = selectedLogs.length > 0;
25 | //console.log("comparing", isComparing);
26 | return (
27 | <>
28 |
29 | {logs.map((log) => (
30 | handleSelect(log.id)}
35 | selectionMode={selectionMode}
36 | />
37 | ))}
38 |
39 | {isComparing && (
40 | selectedLogs.includes(log.id))}
43 | onClose={cancelComparison}
44 | />
45 | )}
46 | >
47 | );
48 | };
49 |
50 | export default (LogList);
51 |
--------------------------------------------------------------------------------
/src/components/Sidebar/index.jsx:
--------------------------------------------------------------------------------
1 | import React, { useMemo, useState, useEffect, useContext } from 'react';
2 | import { FaFolder, FaBookmark } from 'react-icons/fa';
3 | import { useLog } from '../../context/LogContext';
4 | import { useServerStatus } from '../../hooks';
5 | import { useLiveQuery } from 'dexie-react-hooks';
6 | import { db } from '../../db';
7 |
8 | const getButtonClasses = (isActive) => ({
9 | container: `w-full flex items-center justify-between px-3 py-1.5 text-sm transition-all duration-150 ${
10 | isActive
11 | ? 'bg-blue-50 dark:bg-blue-900/30 text-blue-600 dark:text-blue-400'
12 | : 'text-gray-600 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-700/50'
13 | }`,
14 | badge: `text-xs px-1.5 py-0.5 rounded-full ${
15 | isActive
16 | ? 'bg-blue-100 dark:bg-blue-900/50 text-blue-600 dark:text-blue-400'
17 | : 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400'
18 | }`,
19 | icon: isActive ? 'text-blue-500 dark:text-blue-400' : 'text-gray-400 dark:text-gray-500'
20 | });
21 |
22 | const Sidebar = () => {
23 | const {
24 | projects,
25 | selectedProject,
26 | showBookmarksOnly,
27 | updateFilters
28 | } = useLog();
29 |
30 | const { isConnected } = useServerStatus();
31 |
32 | // Use Dexie live queries for real-time updates
33 | const totalLogsCount = useLiveQuery(() => db.liveTotalLogsCount()) || 0;
34 | const projectCounts = useLiveQuery(() => db.liveProjectCounts()) || {};
35 | const bookmarksCount = useLiveQuery(() => db.liveBookmarksCount()) || 0;
36 |
37 | const renderSidebarButton = ({ icon: Icon, label, count, isActive, onClick }) => {
38 | const classes = getButtonClasses(isActive);
39 | return (
40 |
47 | );
48 | };
49 |
50 | const renderSectionHeader = (title) => (
51 |
52 | {title}
53 |
54 | );
55 |
56 | return (
57 |
58 |
64 |
65 |
66 |
67 | {renderSectionHeader('Projects')}
68 |
69 | {renderSidebarButton({
70 | icon: FaFolder,
71 | label: "All Projects",
72 | count: totalLogsCount,
73 | isActive: !selectedProject && !showBookmarksOnly,
74 | onClick: () => {
75 | updateFilters({ project: null, bookmark: false });
76 | }
77 | })}
78 |
79 | {projects.map((project) => (
80 |
81 | {renderSidebarButton({
82 | icon: FaFolder,
83 | label: project,
84 | count: projectCounts[project] || 0,
85 | isActive: selectedProject === project && !showBookmarksOnly,
86 | onClick: () => {
87 | updateFilters({ project, bookmark: false });
88 | }
89 | })}
90 |
91 | ))}
92 |
93 |
94 |
95 |
96 |
97 | {renderSectionHeader('Views')}
98 |
99 | {renderSidebarButton({
100 | icon: FaBookmark,
101 | label: "Bookmarks",
102 | count: bookmarksCount,
103 | isActive: showBookmarksOnly,
104 | onClick: () => {
105 | updateFilters({ project: null, bookmark: true });
106 | }
107 | })}
108 |
109 |
110 |
111 |
112 | );
113 | };
114 |
115 | export default Sidebar;
116 |
--------------------------------------------------------------------------------
/src/components/StatusBar/index.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useCallback } from 'react';
2 | import { FaExchangeAlt, FaTimes, FaCog, FaSun, FaMoon, FaGithub } from 'react-icons/fa';
3 | import { useServerStatus } from '../../hooks';
4 | import { useLog } from '../../context/LogContext';
5 | import { open } from '@tauri-apps/plugin-shell';
6 |
7 | const ServerInfoTooltip = ({ isConnected, show }) => {
8 | if (!show) return null;
9 |
10 | const serverInfo = [
11 | { label: 'Status', value: isConnected ? 'Connected' : 'Disconnected', color: isConnected ? 'text-green-500' : 'text-red-500' },
12 | { label: 'Server', value: 'localhost' },
13 | { label: 'Port', value: '44827' },
14 | { label: 'Protocol', value: 'HTTP' }
15 | ];
16 |
17 | return (
18 |
21 |
22 | {serverInfo.map(({ label, value, color }) => (
23 |
24 | {label}:
25 | {value}
26 |
27 | ))}
28 |
29 |
30 |
31 | );
32 | };
33 |
34 | const StatusBar = () => {
35 | const {
36 | darkMode,
37 | setDarkMode,
38 | selectedLogs,
39 | setSelectedLogs,
40 | isComparing,
41 | startComparison,
42 | cancelComparison,
43 | totalLogsCount
44 | } = useLog();
45 | const { isConnected } = useServerStatus();
46 |
47 | const [showServerInfo, setShowServerInfo] = useState(false);
48 | const [showSettings, setShowSettings] = useState(false);
49 |
50 | const handleRemoveLog = useCallback((logId) => {
51 | setSelectedLogs(prev => prev.filter(l => l.id !== logId));
52 | }, [setSelectedLogs]);
53 |
54 | return (
55 |
56 |
57 |
58 |
59 |
setShowServerInfo(prev => !prev)}
62 | >
63 | {isConnected && (
64 |
65 | )}
66 |
67 |
68 |
69 |
70 |
71 | {totalLogsCount} logs
72 |
73 |
74 | {selectedLogs.length > 0 && (
75 | <>
76 |
77 |
78 |
79 | {selectedLogs.map((log, index) => (
80 |
81 |
82 |
83 | Log {index + 1}
84 |
85 |
91 |
92 | {index === 0 && selectedLogs.length === 2 && (
93 |
94 | )}
95 |
96 | ))}
97 |
98 | {selectedLogs.length === 2 && (
99 |
105 | )}
106 |
107 | >
108 | )}
109 |
110 |
111 |
112 |
113 |
118 |
119 | GitHub
120 |
121 |
122 |
123 |
124 |
125 |
132 |
133 | {showSettings && (
134 |
135 |
136 |
137 | Theme
138 |
148 |
149 |
161 |
162 |
163 | )}
164 |
165 |
166 |
167 |
168 | );
169 | };
170 |
171 | export default StatusBar;
172 |
--------------------------------------------------------------------------------
/src/constants/index.js:
--------------------------------------------------------------------------------
1 | // API Constants
2 |
3 | const BASE_URL = 'http://localhost:44827';
4 |
5 | export const API_ENDPOINTS = {
6 | HEALTH: '/health',
7 | BASE_URL
8 | };
9 |
10 | // Log Levels
11 | export const LOG_LEVELS = [
12 | { level: 'error', color: '#ef4444', label: 'Error' },
13 | { level: 'warning', color: '#f59e0b', label: 'Warning' },
14 | { level: 'info', color: '#3b82f6', label: 'Info' },
15 | { level: 'debug', color: '#10b981', label: 'Debug' }
16 | ];
17 |
18 | // Time Constants
19 | export const TIME_INTERVALS = {
20 | SERVER_HEALTH_CHECK: 5000
21 | };
22 |
--------------------------------------------------------------------------------
/src/context/LogContext.jsx:
--------------------------------------------------------------------------------
1 | import React, { createContext, useContext, useEffect, useState, useCallback, useMemo, useRef } from 'react';
2 | import { v4 as uuidv4 } from 'uuid';
3 | import { listen } from '@tauri-apps/api/event';
4 | import { db } from '../db';
5 | import { LOG_LEVELS } from '../constants';
6 | import { useLiveQuery } from 'dexie-react-hooks';
7 |
8 | export const LogContext = createContext(null);
9 |
10 | const getInitialDarkMode = () => {
11 | const savedTheme = localStorage.getItem('theme');
12 | return savedTheme === 'dark' ||
13 | (!savedTheme && window.matchMedia('(prefers-color-scheme: dark)').matches);
14 | };
15 |
16 | const processLogData = (data) => ({
17 | id: uuidv4(),
18 | timestamp: new Date().toISOString(),
19 | level: data.level.toLowerCase(),
20 | project: data.project,
21 | message: data.payload,
22 | trace: data.trace || null
23 | });
24 |
25 | const useDatabase = ( setProjects) => {
26 |
27 | const unlistenRef = useRef(null);
28 | const isInitializedRef = useRef(false);
29 |
30 | useEffect(() => {
31 | if (isInitializedRef.current) return;
32 | console.log("start xRay database");
33 | const initialize = async () => {
34 | try {
35 | await db.init();
36 |
37 | const [projectList, bookmarkIds] = await Promise.all([
38 | db.getAllProjects()
39 | ]);
40 |
41 | const bookmarkSet = new Set(bookmarkIds);
42 | setProjects(projectList);
43 |
44 |
45 | if (!unlistenRef.current) {
46 | unlistenRef.current = await listen('log', async (event) => {
47 | try {
48 | const logData = processLogData(JSON.parse(event.payload));
49 | await db.addLog(logData);
50 |
51 | setProjects(prevProjects => {
52 | if (prevProjects.includes(logData.project)) return prevProjects;
53 | return [...prevProjects, logData.project];
54 | });
55 | } catch (error) {
56 | console.error('Log processing error:', error);
57 | }
58 | });
59 | }
60 |
61 | isInitializedRef.current = true;
62 | } catch (error) {
63 | console.error('Database initialization error:', error);
64 | }
65 | };
66 |
67 | initialize();
68 |
69 | return () => {
70 | if (unlistenRef.current) {
71 | unlistenRef.current();
72 | unlistenRef.current = null;
73 | }
74 | isInitializedRef.current = false;
75 | };
76 | }, [isInitializedRef]);
77 | };
78 |
79 | const useThemeEffect = (darkMode) => {
80 | useEffect(() => {
81 | document.documentElement.classList.toggle('dark', darkMode);
82 | localStorage.setItem('theme', darkMode ? 'dark' : 'light');
83 | }, [darkMode]);
84 | };
85 |
86 | export const LogProvider = ({ children }) => {
87 | const [projects, setProjects] = useState([]);
88 | const [selectedLogs, setSelectedLogs] = useState([]);
89 | const [isComparing, setIsComparing] = useState(false);
90 | const [bookmarkedLogs, setBookmarkedLogs] = useState(new Set());
91 | const [darkMode, setDarkMode] = useState(getInitialDarkMode);
92 | const [filters, setFilters] = useState({
93 | levels: new Set(LOG_LEVELS.map(({ level }) => level)),
94 | project: null,
95 | bookmark: false
96 | });
97 |
98 | const logs = useLiveQuery(
99 | () => db.liveFilteredLogs(filters),
100 | [filters]
101 | ) || [];
102 |
103 | const updateFilters = useCallback((newFilters) => {
104 | setFilters(prev => ({ ...prev, ...newFilters }));
105 | }, []);
106 |
107 | useDatabase(setProjects);
108 |
109 | useThemeEffect(darkMode);
110 |
111 | const deleteLog = useCallback(async (logId) => {
112 | try {
113 | await db.deleteLog(logId);
114 |
115 | } catch (error) {
116 | console.error('Log deletion error:', error);
117 | }
118 | }, []);
119 |
120 | const clearLogs = useCallback(async () => {
121 | try {
122 | await db.clearLogs();
123 | updateFilters({ project: null, bookmark: false });
124 | setProjects([]);
125 | } catch (error) {
126 | console.error('Log clearing error:', error);
127 | }
128 | }, []);
129 |
130 | const toggleLogSelection = useCallback((logId) => {
131 | setSelectedLogs(prev => {
132 | if (prev.includes(logId)) return prev.filter(id => id !== logId);
133 | return prev.length < 2 ? [...prev, logId] : prev;
134 | });
135 | }, []);
136 |
137 | const toggleBookmark = useCallback(async (log) => {
138 | try {
139 | const newBookmarks = new Set([...bookmarkedLogs]);
140 | const hasBookmark = newBookmarks.has(log.id);
141 |
142 | if (hasBookmark) {
143 | newBookmarks.delete(log.id);
144 | await db.removeBookmark(log.id);
145 | } else {
146 | newBookmarks.add(log.id);
147 | await db.addBookmark(log.id);
148 | }
149 |
150 | setBookmarkedLogs(newBookmarks);
151 | } catch (error) {
152 | console.error('Bookmark operation error:', error);
153 | }
154 | }, [bookmarkedLogs]);
155 |
156 | const totalLogsCount = useMemo(() => {
157 | if (!logs) return 0;
158 |
159 | let count = [...logs];
160 |
161 | if (filters.bookmark) {
162 | count = count.filter(log => bookmarkedLogs.has(log.id));
163 | }
164 |
165 | count = count.filter(log => filters.levels.has(log.level.toLowerCase()));
166 |
167 | if (filters.project) {
168 | count = count.filter(log => log.project === filters.project);
169 | }
170 |
171 | return count.length;
172 | }, [logs, bookmarkedLogs, filters]);
173 |
174 | const startComparison = useCallback(() => {
175 | console.log("loggs",selectedLogs.length);
176 | if (selectedLogs.length === 2) {
177 | if (logs.some(log => selectedLogs.includes(log.id))) {
178 | setIsComparing(true);
179 | }
180 | }
181 | }, [selectedLogs]);
182 |
183 | const cancelComparison = useCallback(() => {
184 | setSelectedLogs([]);
185 | setIsComparing(false);
186 | }, []);
187 |
188 | const value = {
189 | logs,
190 | projects,
191 | selectedProject: filters.project,
192 | toggleLogSelection,
193 | selectedLogs,
194 | setSelectedLogs,
195 | isComparing,
196 | setIsComparing,
197 | bookmarkedLogs,
198 | selectedLevels: filters.levels,
199 | darkMode,
200 | setDarkMode,
201 | showBookmarksOnly: filters.bookmark,
202 | deleteLog,
203 | toggleBookmark,
204 | clearLogs,
205 | filters,
206 | updateFilters,
207 | startComparison,
208 | cancelComparison,
209 | totalLogsCount
210 | };
211 |
212 | return (
213 |
214 | {children}
215 |
216 | );
217 | };
218 |
219 | export const useLog = () => {
220 | const context = useContext(LogContext);
221 | if (!context) {
222 | throw new Error('useLog must be used within a LogProvider');
223 | }
224 | return context;
225 | };
--------------------------------------------------------------------------------
/src/db/index.js:
--------------------------------------------------------------------------------
1 | import Dexie from 'dexie';
2 |
3 | class xRayDatabase extends Dexie {
4 | constructor() {
5 | super('xRayDB');
6 |
7 | this.version(1).stores({
8 | logs: '++id, project, level, timestamp',
9 | bookmarks: 'logId'
10 | });
11 |
12 | this.logs = this.table('logs');
13 | this.bookmarks = this.table('bookmarks');
14 | }
15 |
16 | async init() {
17 | try {
18 | await this.open();
19 | return this;
20 | } catch (error) {
21 | console.error('Failed to initialize database:', error);
22 | throw error;
23 | }
24 | }
25 |
26 | async getProjectCounts() {
27 | const projects = {};
28 | await this.logs.orderBy('project').each(log => {
29 | projects[log.project] = (projects[log.project] || 0) + 1;
30 | });
31 | return projects;
32 | }
33 |
34 | async getTotalLogsCount() {
35 | return await this.logs.count();
36 | }
37 |
38 | async getBookmarksCount() {
39 | return await this.bookmarks.count();
40 | }
41 |
42 | liveTotalLogsCount() {
43 | return this.logs.count();
44 | }
45 |
46 | liveProjectCounts() {
47 | return this.logs.toArray().then(logs => {
48 | const counts = {};
49 | for (const log of logs) {
50 | counts[log.project] = (counts[log.project] || 0) + 1;
51 | }
52 | return counts;
53 | });
54 | }
55 |
56 | liveBookmarksCount() {
57 | return this.bookmarks.count();
58 | }
59 |
60 | async getFilteredLogs(selectedLevels, selectedProject) {
61 | let collection = this.logs.orderBy('timestamp').reverse();
62 |
63 | if (selectedProject) {
64 | collection = collection.filter(log => log.project === selectedProject);
65 | }
66 |
67 | if (selectedLevels && selectedLevels.size > 0) {
68 | collection = collection.filter(log => selectedLevels.has(log.level));
69 | }
70 |
71 | return await collection.toArray();
72 | }
73 |
74 | async liveFilteredLogs(filters) {
75 | try {
76 | let collection = this.logs.orderBy('timestamp').reverse();
77 |
78 | if (filters.bookmark) {
79 | const bookmarks = await this.bookmarks.toArray();
80 | const bookmarkIds = new Set(bookmarks.map(b => b.logId));
81 | collection = collection.filter(log => bookmarkIds.has(log.id));
82 | }
83 |
84 | if (filters.project) {
85 | collection = collection.filter(log => log.project === filters.project);
86 | }
87 |
88 | if (filters.levels && filters.levels.size > 0) {
89 | collection = collection.filter(log => filters.levels.has(log.level));
90 | }
91 |
92 | return await collection.toArray();
93 | } catch (error) {
94 | console.error('Failed to get filtered logs:', error);
95 | return [];
96 | }
97 | }
98 |
99 | async addLog(log) {
100 | try {
101 | await this.logs.add(log);
102 | } catch (error) {
103 | console.error('Failed to add log:', error);
104 | throw error;
105 | }
106 | }
107 |
108 | async getLogs() {
109 | try {
110 | return await this.logs.orderBy('timestamp').reverse().toArray();
111 | } catch (error) {
112 | console.error('Failed to get logs:', error);
113 | throw error;
114 | }
115 | }
116 |
117 | async deleteLog(logId) {
118 | try {
119 | await this.logs.delete(logId);
120 | await this.bookmarks.delete(logId);
121 | } catch (error) {
122 | console.error('Failed to delete log:', error);
123 | throw error;
124 | }
125 | }
126 |
127 | async clearLogs() {
128 | try {
129 | await this.logs.clear();
130 | await this.bookmarks.clear();
131 | } catch (error) {
132 | console.error('Failed to clear logs:', error);
133 | throw error;
134 | }
135 | }
136 |
137 | async addBookmark(logId) {
138 | try {
139 | await this.bookmarks.put({ logId });
140 | } catch (error) {
141 | console.error('Failed to add bookmark:', error);
142 | throw error;
143 | }
144 | }
145 |
146 | async removeBookmark(logId) {
147 | try {
148 | await this.bookmarks.where('logId').equals(logId).delete();
149 | } catch (error) {
150 | console.error('Failed to remove bookmark:', error);
151 | throw error;
152 | }
153 | }
154 |
155 | async getBookmarks() {
156 | try {
157 | const bookmarks = await this.bookmarks.toArray();
158 | const bookmarkIds = bookmarks.map(b => b.logId);
159 | return bookmarkIds;
160 | } catch (error) {
161 | console.error('Failed to get bookmarks:', error);
162 | throw error;
163 | }
164 | }
165 |
166 | async getAllProjects() {
167 | try {
168 | const logs = await this.logs.toArray();
169 | return [...new Set(logs.map(log => log.project))];
170 | } catch (error) {
171 | console.error('Failed to get projects:', error);
172 | throw error;
173 | }
174 | }
175 | }
176 |
177 | const db = new xRayDatabase();
178 |
179 | export { db };
180 |
--------------------------------------------------------------------------------
/src/hooks/index.js:
--------------------------------------------------------------------------------
1 | export { default as useServerStatus } from './useServerStatus';
--------------------------------------------------------------------------------
/src/hooks/useServerStatus.js:
--------------------------------------------------------------------------------
1 | import { useState, useEffect, useCallback } from 'react';
2 | import { TIME_INTERVALS } from '../constants';
3 | import api from '../services/api';
4 |
5 | const initialState = {
6 | isConnected: false
7 | };
8 |
9 | const useServerStatus = () => {
10 | const [serverStatus, setServerStatus] = useState(initialState);
11 |
12 | const checkServerHealth = useCallback(async () => {
13 | try {
14 | await api.checkHealth();
15 | setServerStatus({ isConnected: true });
16 | } catch (error) {
17 | setServerStatus({ isConnected: false });
18 | }
19 | }, []);
20 |
21 | useEffect(() => {
22 | checkServerHealth();
23 | const intervalId = setInterval(checkServerHealth, TIME_INTERVALS.SERVER_HEALTH_CHECK);
24 | return () => clearInterval(intervalId);
25 | }, [checkServerHealth]);
26 |
27 | return {
28 | isConnected: serverStatus.isConnected
29 | };
30 | };
31 |
32 | export default useServerStatus;
--------------------------------------------------------------------------------
/src/main.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 | import './styles/index.css';
5 |
6 | ReactDOM.createRoot(document.getElementById('root')).render(
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/services/api.js:
--------------------------------------------------------------------------------
1 | import { API_ENDPOINTS } from '../constants';
2 |
3 | const { BASE_URL, HEALTH } = API_ENDPOINTS;
4 |
5 | const handleResponse = async (response) => {
6 | if (!response.ok) {
7 | throw new Error(`Server responded with status: ${response.status}`);
8 | }
9 | return response.ok;
10 | };
11 |
12 | export const api = {
13 | checkHealth: () =>
14 | fetch(`${BASE_URL}${HEALTH}`).then(handleResponse)
15 | };
16 |
17 | export default api;
18 |
--------------------------------------------------------------------------------
/src/styles/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | :root {
6 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
7 | line-height: 1.5;
8 | font-weight: 400;
9 |
10 | font-synthesis: none;
11 | text-rendering: optimizeLegibility;
12 | -webkit-font-smoothing: antialiased;
13 | -moz-osx-font-smoothing: grayscale;
14 | }
15 |
16 | body {
17 | margin: 0;
18 | min-width: 320px;
19 | min-height: 100vh;
20 | }
21 |
--------------------------------------------------------------------------------
/src/utils/formatters.js:
--------------------------------------------------------------------------------
1 | import { LOG_LEVELS } from '../constants';
2 |
3 | export const formatTime = (date) => {
4 | const d = new Date(date);
5 | return d.toLocaleTimeString('en-US', {
6 | hour12: false,
7 | hour: '2-digit',
8 | minute: '2-digit',
9 | second: '2-digit'
10 | });
11 | };
12 |
13 | export const getLevelColor = (level) => {
14 | const logLevel = LOG_LEVELS.find(l => l.level.toLowerCase() === level.toLowerCase());
15 | return logLevel ? logLevel.color : LOG_LEVELS[2].color; // default to info color
16 | };
17 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | export default {
3 | content: [
4 | "./index.html",
5 | "./src/**/*.{js,ts,jsx,tsx}",
6 | ],
7 | darkMode: 'class',
8 | theme: {
9 | extend: {},
10 | },
11 | plugins: [],
12 | }
13 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import react from "@vitejs/plugin-react";
3 |
4 | const host = process.env.TAURI_DEV_HOST;
5 |
6 | // https://vitejs.dev/config/
7 | export default defineConfig(async () => ({
8 | plugins: [react()],
9 |
10 | // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
11 | //
12 | // 1. prevent vite from obscuring rust errors
13 | clearScreen: false,
14 | // 2. tauri expects a fixed port, fail if that port is not available
15 | server: {
16 | port: 1420,
17 | strictPort: true,
18 | host: host || false,
19 | hmr: host
20 | ? {
21 | protocol: "ws",
22 | host,
23 | port: 1421,
24 | }
25 | : undefined,
26 | watch: {
27 | // 3. tell vite to ignore watching `src-tauri`
28 | ignored: ["**/src-tauri/**"],
29 | },
30 | },
31 | }));
32 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # This file is generated by running "yarn install" inside your project.
2 | # Manual changes might be lost - proceed with caution!
3 |
4 | __metadata:
5 | version: 6
6 | cacheKey: 8
7 |
8 | "@alloc/quick-lru@npm:^5.2.0":
9 | version: 5.2.0
10 | resolution: "@alloc/quick-lru@npm:5.2.0"
11 | checksum: bdc35758b552bcf045733ac047fb7f9a07c4678b944c641adfbd41f798b4b91fffd0fdc0df2578d9b0afc7b4d636aa6e110ead5d6281a2adc1ab90efd7f057f8
12 | languageName: node
13 | linkType: hard
14 |
15 | "@ampproject/remapping@npm:^2.2.0":
16 | version: 2.3.0
17 | resolution: "@ampproject/remapping@npm:2.3.0"
18 | dependencies:
19 | "@jridgewell/gen-mapping": ^0.3.5
20 | "@jridgewell/trace-mapping": ^0.3.24
21 | checksum: d3ad7b89d973df059c4e8e6d7c972cbeb1bb2f18f002a3bd04ae0707da214cb06cc06929b65aa2313b9347463df2914772298bae8b1d7973f246bb3f2ab3e8f0
22 | languageName: node
23 | linkType: hard
24 |
25 | "@babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0":
26 | version: 7.26.2
27 | resolution: "@babel/code-frame@npm:7.26.2"
28 | dependencies:
29 | "@babel/helper-validator-identifier": ^7.25.9
30 | js-tokens: ^4.0.0
31 | picocolors: ^1.0.0
32 | checksum: db13f5c42d54b76c1480916485e6900748bbcb0014a8aca87f50a091f70ff4e0d0a6db63cade75eb41fcc3d2b6ba0a7f89e343def4f96f00269b41b8ab8dd7b8
33 | languageName: node
34 | linkType: hard
35 |
36 | "@babel/compat-data@npm:^7.25.9":
37 | version: 7.26.2
38 | resolution: "@babel/compat-data@npm:7.26.2"
39 | checksum: d52fae9b0dc59b409d6005ae6b172e89329f46d68136130065ebe923a156fc633e0f1c8600b3e319b9e0f99fd948f64991a5419e2e9431d00d9d235d5f7a7618
40 | languageName: node
41 | linkType: hard
42 |
43 | "@babel/core@npm:^7.26.0":
44 | version: 7.26.0
45 | resolution: "@babel/core@npm:7.26.0"
46 | dependencies:
47 | "@ampproject/remapping": ^2.2.0
48 | "@babel/code-frame": ^7.26.0
49 | "@babel/generator": ^7.26.0
50 | "@babel/helper-compilation-targets": ^7.25.9
51 | "@babel/helper-module-transforms": ^7.26.0
52 | "@babel/helpers": ^7.26.0
53 | "@babel/parser": ^7.26.0
54 | "@babel/template": ^7.25.9
55 | "@babel/traverse": ^7.25.9
56 | "@babel/types": ^7.26.0
57 | convert-source-map: ^2.0.0
58 | debug: ^4.1.0
59 | gensync: ^1.0.0-beta.2
60 | json5: ^2.2.3
61 | semver: ^6.3.1
62 | checksum: b296084cfd818bed8079526af93b5dfa0ba70282532d2132caf71d4060ab190ba26d3184832a45accd82c3c54016985a4109ab9118674347a7e5e9bc464894e6
63 | languageName: node
64 | linkType: hard
65 |
66 | "@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.26.0":
67 | version: 7.26.2
68 | resolution: "@babel/generator@npm:7.26.2"
69 | dependencies:
70 | "@babel/parser": ^7.26.2
71 | "@babel/types": ^7.26.0
72 | "@jridgewell/gen-mapping": ^0.3.5
73 | "@jridgewell/trace-mapping": ^0.3.25
74 | jsesc: ^3.0.2
75 | checksum: 6ff850b7d6082619f8c2f518d993cf7254cfbaa20b026282cbef5c9b2197686d076a432b18e36c4d1a42721c016df4f77a8f62c67600775d9683621d534b91b4
76 | languageName: node
77 | linkType: hard
78 |
79 | "@babel/helper-compilation-targets@npm:^7.25.9":
80 | version: 7.25.9
81 | resolution: "@babel/helper-compilation-targets@npm:7.25.9"
82 | dependencies:
83 | "@babel/compat-data": ^7.25.9
84 | "@babel/helper-validator-option": ^7.25.9
85 | browserslist: ^4.24.0
86 | lru-cache: ^5.1.1
87 | semver: ^6.3.1
88 | checksum: 3af536e2db358b38f968abdf7d512d425d1018fef2f485d6f131a57a7bcaed32c606b4e148bb230e1508fa42b5b2ac281855a68eb78270f54698c48a83201b9b
89 | languageName: node
90 | linkType: hard
91 |
92 | "@babel/helper-module-imports@npm:^7.25.9":
93 | version: 7.25.9
94 | resolution: "@babel/helper-module-imports@npm:7.25.9"
95 | dependencies:
96 | "@babel/traverse": ^7.25.9
97 | "@babel/types": ^7.25.9
98 | checksum: 1b411ce4ca825422ef7065dffae7d8acef52023e51ad096351e3e2c05837e9bf9fca2af9ca7f28dc26d596a588863d0fedd40711a88e350b736c619a80e704e6
99 | languageName: node
100 | linkType: hard
101 |
102 | "@babel/helper-module-transforms@npm:^7.26.0":
103 | version: 7.26.0
104 | resolution: "@babel/helper-module-transforms@npm:7.26.0"
105 | dependencies:
106 | "@babel/helper-module-imports": ^7.25.9
107 | "@babel/helper-validator-identifier": ^7.25.9
108 | "@babel/traverse": ^7.25.9
109 | peerDependencies:
110 | "@babel/core": ^7.0.0
111 | checksum: 942eee3adf2b387443c247a2c190c17c4fd45ba92a23087abab4c804f40541790d51ad5277e4b5b1ed8d5ba5b62de73857446b7742f835c18ebd350384e63917
112 | languageName: node
113 | linkType: hard
114 |
115 | "@babel/helper-plugin-utils@npm:^7.25.9":
116 | version: 7.25.9
117 | resolution: "@babel/helper-plugin-utils@npm:7.25.9"
118 | checksum: e19ec8acf0b696756e6d84531f532c5fe508dce57aa68c75572a77798bd04587a844a9a6c8ea7d62d673e21fdc174d091c9097fb29aea1c1b49f9c6eaa80f022
119 | languageName: node
120 | linkType: hard
121 |
122 | "@babel/helper-string-parser@npm:^7.25.9":
123 | version: 7.25.9
124 | resolution: "@babel/helper-string-parser@npm:7.25.9"
125 | checksum: 6435ee0849e101681c1849868278b5aee82686ba2c1e27280e5e8aca6233af6810d39f8e4e693d2f2a44a3728a6ccfd66f72d71826a94105b86b731697cdfa99
126 | languageName: node
127 | linkType: hard
128 |
129 | "@babel/helper-validator-identifier@npm:^7.25.9":
130 | version: 7.25.9
131 | resolution: "@babel/helper-validator-identifier@npm:7.25.9"
132 | checksum: 5b85918cb1a92a7f3f508ea02699e8d2422fe17ea8e82acd445006c0ef7520fbf48e3dbcdaf7b0a1d571fc3a2715a29719e5226636cb6042e15fe6ed2a590944
133 | languageName: node
134 | linkType: hard
135 |
136 | "@babel/helper-validator-option@npm:^7.25.9":
137 | version: 7.25.9
138 | resolution: "@babel/helper-validator-option@npm:7.25.9"
139 | checksum: 9491b2755948ebbdd68f87da907283698e663b5af2d2b1b02a2765761974b1120d5d8d49e9175b167f16f72748ffceec8c9cf62acfbee73f4904507b246e2b3d
140 | languageName: node
141 | linkType: hard
142 |
143 | "@babel/helpers@npm:^7.26.0":
144 | version: 7.26.0
145 | resolution: "@babel/helpers@npm:7.26.0"
146 | dependencies:
147 | "@babel/template": ^7.25.9
148 | "@babel/types": ^7.26.0
149 | checksum: d77fe8d45033d6007eadfa440355c1355eed57902d5a302f450827ad3d530343430a21210584d32eef2f216ae463d4591184c6fc60cf205bbf3a884561469200
150 | languageName: node
151 | linkType: hard
152 |
153 | "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.2":
154 | version: 7.26.2
155 | resolution: "@babel/parser@npm:7.26.2"
156 | dependencies:
157 | "@babel/types": ^7.26.0
158 | bin:
159 | parser: ./bin/babel-parser.js
160 | checksum: c88b5ea0adf357ef909cdc2c31e284a154943edc59f63f6e8a4c20bf773a1b2f3d8c2205e59c09ca7cdad91e7466300114548876529277a80651b6436a48d5d9
161 | languageName: node
162 | linkType: hard
163 |
164 | "@babel/plugin-transform-react-jsx-self@npm:^7.25.9":
165 | version: 7.25.9
166 | resolution: "@babel/plugin-transform-react-jsx-self@npm:7.25.9"
167 | dependencies:
168 | "@babel/helper-plugin-utils": ^7.25.9
169 | peerDependencies:
170 | "@babel/core": ^7.0.0-0
171 | checksum: 41c833cd7f91b1432710f91b1325706e57979b2e8da44e83d86312c78bbe96cd9ef778b4e79e4e17ab25fa32c72b909f2be7f28e876779ede28e27506c41f4ae
172 | languageName: node
173 | linkType: hard
174 |
175 | "@babel/plugin-transform-react-jsx-source@npm:^7.25.9":
176 | version: 7.25.9
177 | resolution: "@babel/plugin-transform-react-jsx-source@npm:7.25.9"
178 | dependencies:
179 | "@babel/helper-plugin-utils": ^7.25.9
180 | peerDependencies:
181 | "@babel/core": ^7.0.0-0
182 | checksum: a3e0e5672e344e9d01fb20b504fe29a84918eaa70cec512c4d4b1b035f72803261257343d8e93673365b72c371f35cf34bb0d129720bf178a4c87812c8b9c662
183 | languageName: node
184 | linkType: hard
185 |
186 | "@babel/runtime@npm:^7.3.1":
187 | version: 7.26.0
188 | resolution: "@babel/runtime@npm:7.26.0"
189 | dependencies:
190 | regenerator-runtime: ^0.14.0
191 | checksum: c8e2c0504ab271b3467a261a8f119bf2603eb857a0d71e37791f4e3fae00f681365073cc79f141ddaa90c6077c60ba56448004ad5429d07ac73532be9f7cf28a
192 | languageName: node
193 | linkType: hard
194 |
195 | "@babel/template@npm:^7.25.9":
196 | version: 7.25.9
197 | resolution: "@babel/template@npm:7.25.9"
198 | dependencies:
199 | "@babel/code-frame": ^7.25.9
200 | "@babel/parser": ^7.25.9
201 | "@babel/types": ^7.25.9
202 | checksum: 103641fea19c7f4e82dc913aa6b6ac157112a96d7c724d513288f538b84bae04fb87b1f1e495ac1736367b1bc30e10f058b30208fb25f66038e1f1eb4e426472
203 | languageName: node
204 | linkType: hard
205 |
206 | "@babel/traverse@npm:^7.25.9":
207 | version: 7.25.9
208 | resolution: "@babel/traverse@npm:7.25.9"
209 | dependencies:
210 | "@babel/code-frame": ^7.25.9
211 | "@babel/generator": ^7.25.9
212 | "@babel/parser": ^7.25.9
213 | "@babel/template": ^7.25.9
214 | "@babel/types": ^7.25.9
215 | debug: ^4.3.1
216 | globals: ^11.1.0
217 | checksum: 901d325662ff1dd9bc51de00862e01055fa6bc374f5297d7e3731f2f0e268bbb1d2141f53fa82860aa308ee44afdcf186a948f16c83153927925804b95a9594d
218 | languageName: node
219 | linkType: hard
220 |
221 | "@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0":
222 | version: 7.26.0
223 | resolution: "@babel/types@npm:7.26.0"
224 | dependencies:
225 | "@babel/helper-string-parser": ^7.25.9
226 | "@babel/helper-validator-identifier": ^7.25.9
227 | checksum: a3dd37dabac693018872da96edb8c1843a605c1bfacde6c3f504fba79b972426a6f24df70aa646356c0c1b19bdd2c722c623c684a996c002381071680602280d
228 | languageName: node
229 | linkType: hard
230 |
231 | "@esbuild/aix-ppc64@npm:0.24.0":
232 | version: 0.24.0
233 | resolution: "@esbuild/aix-ppc64@npm:0.24.0"
234 | conditions: os=aix & cpu=ppc64
235 | languageName: node
236 | linkType: hard
237 |
238 | "@esbuild/android-arm64@npm:0.24.0":
239 | version: 0.24.0
240 | resolution: "@esbuild/android-arm64@npm:0.24.0"
241 | conditions: os=android & cpu=arm64
242 | languageName: node
243 | linkType: hard
244 |
245 | "@esbuild/android-arm@npm:0.24.0":
246 | version: 0.24.0
247 | resolution: "@esbuild/android-arm@npm:0.24.0"
248 | conditions: os=android & cpu=arm
249 | languageName: node
250 | linkType: hard
251 |
252 | "@esbuild/android-x64@npm:0.24.0":
253 | version: 0.24.0
254 | resolution: "@esbuild/android-x64@npm:0.24.0"
255 | conditions: os=android & cpu=x64
256 | languageName: node
257 | linkType: hard
258 |
259 | "@esbuild/darwin-arm64@npm:0.24.0":
260 | version: 0.24.0
261 | resolution: "@esbuild/darwin-arm64@npm:0.24.0"
262 | conditions: os=darwin & cpu=arm64
263 | languageName: node
264 | linkType: hard
265 |
266 | "@esbuild/darwin-x64@npm:0.24.0":
267 | version: 0.24.0
268 | resolution: "@esbuild/darwin-x64@npm:0.24.0"
269 | conditions: os=darwin & cpu=x64
270 | languageName: node
271 | linkType: hard
272 |
273 | "@esbuild/freebsd-arm64@npm:0.24.0":
274 | version: 0.24.0
275 | resolution: "@esbuild/freebsd-arm64@npm:0.24.0"
276 | conditions: os=freebsd & cpu=arm64
277 | languageName: node
278 | linkType: hard
279 |
280 | "@esbuild/freebsd-x64@npm:0.24.0":
281 | version: 0.24.0
282 | resolution: "@esbuild/freebsd-x64@npm:0.24.0"
283 | conditions: os=freebsd & cpu=x64
284 | languageName: node
285 | linkType: hard
286 |
287 | "@esbuild/linux-arm64@npm:0.24.0":
288 | version: 0.24.0
289 | resolution: "@esbuild/linux-arm64@npm:0.24.0"
290 | conditions: os=linux & cpu=arm64
291 | languageName: node
292 | linkType: hard
293 |
294 | "@esbuild/linux-arm@npm:0.24.0":
295 | version: 0.24.0
296 | resolution: "@esbuild/linux-arm@npm:0.24.0"
297 | conditions: os=linux & cpu=arm
298 | languageName: node
299 | linkType: hard
300 |
301 | "@esbuild/linux-ia32@npm:0.24.0":
302 | version: 0.24.0
303 | resolution: "@esbuild/linux-ia32@npm:0.24.0"
304 | conditions: os=linux & cpu=ia32
305 | languageName: node
306 | linkType: hard
307 |
308 | "@esbuild/linux-loong64@npm:0.24.0":
309 | version: 0.24.0
310 | resolution: "@esbuild/linux-loong64@npm:0.24.0"
311 | conditions: os=linux & cpu=loong64
312 | languageName: node
313 | linkType: hard
314 |
315 | "@esbuild/linux-mips64el@npm:0.24.0":
316 | version: 0.24.0
317 | resolution: "@esbuild/linux-mips64el@npm:0.24.0"
318 | conditions: os=linux & cpu=mips64el
319 | languageName: node
320 | linkType: hard
321 |
322 | "@esbuild/linux-ppc64@npm:0.24.0":
323 | version: 0.24.0
324 | resolution: "@esbuild/linux-ppc64@npm:0.24.0"
325 | conditions: os=linux & cpu=ppc64
326 | languageName: node
327 | linkType: hard
328 |
329 | "@esbuild/linux-riscv64@npm:0.24.0":
330 | version: 0.24.0
331 | resolution: "@esbuild/linux-riscv64@npm:0.24.0"
332 | conditions: os=linux & cpu=riscv64
333 | languageName: node
334 | linkType: hard
335 |
336 | "@esbuild/linux-s390x@npm:0.24.0":
337 | version: 0.24.0
338 | resolution: "@esbuild/linux-s390x@npm:0.24.0"
339 | conditions: os=linux & cpu=s390x
340 | languageName: node
341 | linkType: hard
342 |
343 | "@esbuild/linux-x64@npm:0.24.0":
344 | version: 0.24.0
345 | resolution: "@esbuild/linux-x64@npm:0.24.0"
346 | conditions: os=linux & cpu=x64
347 | languageName: node
348 | linkType: hard
349 |
350 | "@esbuild/netbsd-x64@npm:0.24.0":
351 | version: 0.24.0
352 | resolution: "@esbuild/netbsd-x64@npm:0.24.0"
353 | conditions: os=netbsd & cpu=x64
354 | languageName: node
355 | linkType: hard
356 |
357 | "@esbuild/openbsd-arm64@npm:0.24.0":
358 | version: 0.24.0
359 | resolution: "@esbuild/openbsd-arm64@npm:0.24.0"
360 | conditions: os=openbsd & cpu=arm64
361 | languageName: node
362 | linkType: hard
363 |
364 | "@esbuild/openbsd-x64@npm:0.24.0":
365 | version: 0.24.0
366 | resolution: "@esbuild/openbsd-x64@npm:0.24.0"
367 | conditions: os=openbsd & cpu=x64
368 | languageName: node
369 | linkType: hard
370 |
371 | "@esbuild/sunos-x64@npm:0.24.0":
372 | version: 0.24.0
373 | resolution: "@esbuild/sunos-x64@npm:0.24.0"
374 | conditions: os=sunos & cpu=x64
375 | languageName: node
376 | linkType: hard
377 |
378 | "@esbuild/win32-arm64@npm:0.24.0":
379 | version: 0.24.0
380 | resolution: "@esbuild/win32-arm64@npm:0.24.0"
381 | conditions: os=win32 & cpu=arm64
382 | languageName: node
383 | linkType: hard
384 |
385 | "@esbuild/win32-ia32@npm:0.24.0":
386 | version: 0.24.0
387 | resolution: "@esbuild/win32-ia32@npm:0.24.0"
388 | conditions: os=win32 & cpu=ia32
389 | languageName: node
390 | linkType: hard
391 |
392 | "@esbuild/win32-x64@npm:0.24.0":
393 | version: 0.24.0
394 | resolution: "@esbuild/win32-x64@npm:0.24.0"
395 | conditions: os=win32 & cpu=x64
396 | languageName: node
397 | linkType: hard
398 |
399 | "@isaacs/cliui@npm:^8.0.2":
400 | version: 8.0.2
401 | resolution: "@isaacs/cliui@npm:8.0.2"
402 | dependencies:
403 | string-width: ^5.1.2
404 | string-width-cjs: "npm:string-width@^4.2.0"
405 | strip-ansi: ^7.0.1
406 | strip-ansi-cjs: "npm:strip-ansi@^6.0.1"
407 | wrap-ansi: ^8.1.0
408 | wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0"
409 | checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb
410 | languageName: node
411 | linkType: hard
412 |
413 | "@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5":
414 | version: 0.3.5
415 | resolution: "@jridgewell/gen-mapping@npm:0.3.5"
416 | dependencies:
417 | "@jridgewell/set-array": ^1.2.1
418 | "@jridgewell/sourcemap-codec": ^1.4.10
419 | "@jridgewell/trace-mapping": ^0.3.24
420 | checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52
421 | languageName: node
422 | linkType: hard
423 |
424 | "@jridgewell/resolve-uri@npm:^3.1.0":
425 | version: 3.1.2
426 | resolution: "@jridgewell/resolve-uri@npm:3.1.2"
427 | checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870
428 | languageName: node
429 | linkType: hard
430 |
431 | "@jridgewell/set-array@npm:^1.2.1":
432 | version: 1.2.1
433 | resolution: "@jridgewell/set-array@npm:1.2.1"
434 | checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10
435 | languageName: node
436 | linkType: hard
437 |
438 | "@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14":
439 | version: 1.5.0
440 | resolution: "@jridgewell/sourcemap-codec@npm:1.5.0"
441 | checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec
442 | languageName: node
443 | linkType: hard
444 |
445 | "@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
446 | version: 0.3.25
447 | resolution: "@jridgewell/trace-mapping@npm:0.3.25"
448 | dependencies:
449 | "@jridgewell/resolve-uri": ^3.1.0
450 | "@jridgewell/sourcemap-codec": ^1.4.14
451 | checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34
452 | languageName: node
453 | linkType: hard
454 |
455 | "@nodelib/fs.scandir@npm:2.1.5":
456 | version: 2.1.5
457 | resolution: "@nodelib/fs.scandir@npm:2.1.5"
458 | dependencies:
459 | "@nodelib/fs.stat": 2.0.5
460 | run-parallel: ^1.1.9
461 | checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59
462 | languageName: node
463 | linkType: hard
464 |
465 | "@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
466 | version: 2.0.5
467 | resolution: "@nodelib/fs.stat@npm:2.0.5"
468 | checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0
469 | languageName: node
470 | linkType: hard
471 |
472 | "@nodelib/fs.walk@npm:^1.2.3":
473 | version: 1.2.8
474 | resolution: "@nodelib/fs.walk@npm:1.2.8"
475 | dependencies:
476 | "@nodelib/fs.scandir": 2.1.5
477 | fastq: ^1.6.0
478 | checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53
479 | languageName: node
480 | linkType: hard
481 |
482 | "@npmcli/agent@npm:^2.0.0":
483 | version: 2.2.2
484 | resolution: "@npmcli/agent@npm:2.2.2"
485 | dependencies:
486 | agent-base: ^7.1.0
487 | http-proxy-agent: ^7.0.0
488 | https-proxy-agent: ^7.0.1
489 | lru-cache: ^10.0.1
490 | socks-proxy-agent: ^8.0.3
491 | checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874
492 | languageName: node
493 | linkType: hard
494 |
495 | "@npmcli/fs@npm:^3.1.0":
496 | version: 3.1.1
497 | resolution: "@npmcli/fs@npm:3.1.1"
498 | dependencies:
499 | semver: ^7.3.5
500 | checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820
501 | languageName: node
502 | linkType: hard
503 |
504 | "@pkgjs/parseargs@npm:^0.11.0":
505 | version: 0.11.0
506 | resolution: "@pkgjs/parseargs@npm:0.11.0"
507 | checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f
508 | languageName: node
509 | linkType: hard
510 |
511 | "@rollup/rollup-android-arm-eabi@npm:4.28.0":
512 | version: 4.28.0
513 | resolution: "@rollup/rollup-android-arm-eabi@npm:4.28.0"
514 | conditions: os=android & cpu=arm
515 | languageName: node
516 | linkType: hard
517 |
518 | "@rollup/rollup-android-arm64@npm:4.28.0":
519 | version: 4.28.0
520 | resolution: "@rollup/rollup-android-arm64@npm:4.28.0"
521 | conditions: os=android & cpu=arm64
522 | languageName: node
523 | linkType: hard
524 |
525 | "@rollup/rollup-darwin-arm64@npm:4.28.0":
526 | version: 4.28.0
527 | resolution: "@rollup/rollup-darwin-arm64@npm:4.28.0"
528 | conditions: os=darwin & cpu=arm64
529 | languageName: node
530 | linkType: hard
531 |
532 | "@rollup/rollup-darwin-x64@npm:4.28.0":
533 | version: 4.28.0
534 | resolution: "@rollup/rollup-darwin-x64@npm:4.28.0"
535 | conditions: os=darwin & cpu=x64
536 | languageName: node
537 | linkType: hard
538 |
539 | "@rollup/rollup-freebsd-arm64@npm:4.28.0":
540 | version: 4.28.0
541 | resolution: "@rollup/rollup-freebsd-arm64@npm:4.28.0"
542 | conditions: os=freebsd & cpu=arm64
543 | languageName: node
544 | linkType: hard
545 |
546 | "@rollup/rollup-freebsd-x64@npm:4.28.0":
547 | version: 4.28.0
548 | resolution: "@rollup/rollup-freebsd-x64@npm:4.28.0"
549 | conditions: os=freebsd & cpu=x64
550 | languageName: node
551 | linkType: hard
552 |
553 | "@rollup/rollup-linux-arm-gnueabihf@npm:4.28.0":
554 | version: 4.28.0
555 | resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.28.0"
556 | conditions: os=linux & cpu=arm & libc=glibc
557 | languageName: node
558 | linkType: hard
559 |
560 | "@rollup/rollup-linux-arm-musleabihf@npm:4.28.0":
561 | version: 4.28.0
562 | resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.28.0"
563 | conditions: os=linux & cpu=arm & libc=musl
564 | languageName: node
565 | linkType: hard
566 |
567 | "@rollup/rollup-linux-arm64-gnu@npm:4.28.0":
568 | version: 4.28.0
569 | resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.28.0"
570 | conditions: os=linux & cpu=arm64 & libc=glibc
571 | languageName: node
572 | linkType: hard
573 |
574 | "@rollup/rollup-linux-arm64-musl@npm:4.28.0":
575 | version: 4.28.0
576 | resolution: "@rollup/rollup-linux-arm64-musl@npm:4.28.0"
577 | conditions: os=linux & cpu=arm64 & libc=musl
578 | languageName: node
579 | linkType: hard
580 |
581 | "@rollup/rollup-linux-powerpc64le-gnu@npm:4.28.0":
582 | version: 4.28.0
583 | resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.28.0"
584 | conditions: os=linux & cpu=ppc64 & libc=glibc
585 | languageName: node
586 | linkType: hard
587 |
588 | "@rollup/rollup-linux-riscv64-gnu@npm:4.28.0":
589 | version: 4.28.0
590 | resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.28.0"
591 | conditions: os=linux & cpu=riscv64 & libc=glibc
592 | languageName: node
593 | linkType: hard
594 |
595 | "@rollup/rollup-linux-s390x-gnu@npm:4.28.0":
596 | version: 4.28.0
597 | resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.28.0"
598 | conditions: os=linux & cpu=s390x & libc=glibc
599 | languageName: node
600 | linkType: hard
601 |
602 | "@rollup/rollup-linux-x64-gnu@npm:4.28.0":
603 | version: 4.28.0
604 | resolution: "@rollup/rollup-linux-x64-gnu@npm:4.28.0"
605 | conditions: os=linux & cpu=x64 & libc=glibc
606 | languageName: node
607 | linkType: hard
608 |
609 | "@rollup/rollup-linux-x64-musl@npm:4.28.0":
610 | version: 4.28.0
611 | resolution: "@rollup/rollup-linux-x64-musl@npm:4.28.0"
612 | conditions: os=linux & cpu=x64 & libc=musl
613 | languageName: node
614 | linkType: hard
615 |
616 | "@rollup/rollup-win32-arm64-msvc@npm:4.28.0":
617 | version: 4.28.0
618 | resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.28.0"
619 | conditions: os=win32 & cpu=arm64
620 | languageName: node
621 | linkType: hard
622 |
623 | "@rollup/rollup-win32-ia32-msvc@npm:4.28.0":
624 | version: 4.28.0
625 | resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.28.0"
626 | conditions: os=win32 & cpu=ia32
627 | languageName: node
628 | linkType: hard
629 |
630 | "@rollup/rollup-win32-x64-msvc@npm:4.28.0":
631 | version: 4.28.0
632 | resolution: "@rollup/rollup-win32-x64-msvc@npm:4.28.0"
633 | conditions: os=win32 & cpu=x64
634 | languageName: node
635 | linkType: hard
636 |
637 | "@tauri-apps/api@npm:^2.0.0, @tauri-apps/api@npm:^2.1.1":
638 | version: 2.1.1
639 | resolution: "@tauri-apps/api@npm:2.1.1"
640 | checksum: 3ede9befcb6cf1bca8984041965dcbefce10a3429cfac06b2e0ee2672e802597c64043bb9096ddc802e75b6255405ff3402b3ba30cee272ef985e3ef4d31bb38
641 | languageName: node
642 | linkType: hard
643 |
644 | "@tauri-apps/cli-darwin-arm64@npm:2.1.0":
645 | version: 2.1.0
646 | resolution: "@tauri-apps/cli-darwin-arm64@npm:2.1.0"
647 | conditions: os=darwin & cpu=arm64
648 | languageName: node
649 | linkType: hard
650 |
651 | "@tauri-apps/cli-darwin-x64@npm:2.1.0":
652 | version: 2.1.0
653 | resolution: "@tauri-apps/cli-darwin-x64@npm:2.1.0"
654 | conditions: os=darwin & cpu=x64
655 | languageName: node
656 | linkType: hard
657 |
658 | "@tauri-apps/cli-linux-arm-gnueabihf@npm:2.1.0":
659 | version: 2.1.0
660 | resolution: "@tauri-apps/cli-linux-arm-gnueabihf@npm:2.1.0"
661 | conditions: os=linux & cpu=arm
662 | languageName: node
663 | linkType: hard
664 |
665 | "@tauri-apps/cli-linux-arm64-gnu@npm:2.1.0":
666 | version: 2.1.0
667 | resolution: "@tauri-apps/cli-linux-arm64-gnu@npm:2.1.0"
668 | conditions: os=linux & cpu=arm64 & libc=glibc
669 | languageName: node
670 | linkType: hard
671 |
672 | "@tauri-apps/cli-linux-arm64-musl@npm:2.1.0":
673 | version: 2.1.0
674 | resolution: "@tauri-apps/cli-linux-arm64-musl@npm:2.1.0"
675 | conditions: os=linux & cpu=arm64 & libc=musl
676 | languageName: node
677 | linkType: hard
678 |
679 | "@tauri-apps/cli-linux-x64-gnu@npm:2.1.0":
680 | version: 2.1.0
681 | resolution: "@tauri-apps/cli-linux-x64-gnu@npm:2.1.0"
682 | conditions: os=linux & cpu=x64 & libc=glibc
683 | languageName: node
684 | linkType: hard
685 |
686 | "@tauri-apps/cli-linux-x64-musl@npm:2.1.0":
687 | version: 2.1.0
688 | resolution: "@tauri-apps/cli-linux-x64-musl@npm:2.1.0"
689 | conditions: os=linux & cpu=x64 & libc=musl
690 | languageName: node
691 | linkType: hard
692 |
693 | "@tauri-apps/cli-win32-arm64-msvc@npm:2.1.0":
694 | version: 2.1.0
695 | resolution: "@tauri-apps/cli-win32-arm64-msvc@npm:2.1.0"
696 | conditions: os=win32 & cpu=arm64
697 | languageName: node
698 | linkType: hard
699 |
700 | "@tauri-apps/cli-win32-ia32-msvc@npm:2.1.0":
701 | version: 2.1.0
702 | resolution: "@tauri-apps/cli-win32-ia32-msvc@npm:2.1.0"
703 | conditions: os=win32 & cpu=ia32
704 | languageName: node
705 | linkType: hard
706 |
707 | "@tauri-apps/cli-win32-x64-msvc@npm:2.1.0":
708 | version: 2.1.0
709 | resolution: "@tauri-apps/cli-win32-x64-msvc@npm:2.1.0"
710 | conditions: os=win32 & cpu=x64
711 | languageName: node
712 | linkType: hard
713 |
714 | "@tauri-apps/cli@npm:^2.1.0":
715 | version: 2.1.0
716 | resolution: "@tauri-apps/cli@npm:2.1.0"
717 | dependencies:
718 | "@tauri-apps/cli-darwin-arm64": 2.1.0
719 | "@tauri-apps/cli-darwin-x64": 2.1.0
720 | "@tauri-apps/cli-linux-arm-gnueabihf": 2.1.0
721 | "@tauri-apps/cli-linux-arm64-gnu": 2.1.0
722 | "@tauri-apps/cli-linux-arm64-musl": 2.1.0
723 | "@tauri-apps/cli-linux-x64-gnu": 2.1.0
724 | "@tauri-apps/cli-linux-x64-musl": 2.1.0
725 | "@tauri-apps/cli-win32-arm64-msvc": 2.1.0
726 | "@tauri-apps/cli-win32-ia32-msvc": 2.1.0
727 | "@tauri-apps/cli-win32-x64-msvc": 2.1.0
728 | dependenciesMeta:
729 | "@tauri-apps/cli-darwin-arm64":
730 | optional: true
731 | "@tauri-apps/cli-darwin-x64":
732 | optional: true
733 | "@tauri-apps/cli-linux-arm-gnueabihf":
734 | optional: true
735 | "@tauri-apps/cli-linux-arm64-gnu":
736 | optional: true
737 | "@tauri-apps/cli-linux-arm64-musl":
738 | optional: true
739 | "@tauri-apps/cli-linux-x64-gnu":
740 | optional: true
741 | "@tauri-apps/cli-linux-x64-musl":
742 | optional: true
743 | "@tauri-apps/cli-win32-arm64-msvc":
744 | optional: true
745 | "@tauri-apps/cli-win32-ia32-msvc":
746 | optional: true
747 | "@tauri-apps/cli-win32-x64-msvc":
748 | optional: true
749 | bin:
750 | tauri: tauri.js
751 | checksum: 52f4305c93ae70e7187b3353aaad199faed91a37962d8f1e36d19ce566155766d98b6fe318df60f2fb66e8b2887e59b856afaab705f160c9db3833afe7641272
752 | languageName: node
753 | linkType: hard
754 |
755 | "@tauri-apps/plugin-shell@npm:~2":
756 | version: 2.2.0
757 | resolution: "@tauri-apps/plugin-shell@npm:2.2.0"
758 | dependencies:
759 | "@tauri-apps/api": ^2.0.0
760 | checksum: 61826aa4dd38585a519025686f283318a15cf4d60be9c4c6c0cb20f887841850da0321c8460a7e4a2e56c0650d1d554c96c8183eeb12b157a246b03114288c03
761 | languageName: node
762 | linkType: hard
763 |
764 | "@types/babel__core@npm:^7.20.5":
765 | version: 7.20.5
766 | resolution: "@types/babel__core@npm:7.20.5"
767 | dependencies:
768 | "@babel/parser": ^7.20.7
769 | "@babel/types": ^7.20.7
770 | "@types/babel__generator": "*"
771 | "@types/babel__template": "*"
772 | "@types/babel__traverse": "*"
773 | checksum: a3226f7930b635ee7a5e72c8d51a357e799d19cbf9d445710fa39ab13804f79ab1a54b72ea7d8e504659c7dfc50675db974b526142c754398d7413aa4bc30845
774 | languageName: node
775 | linkType: hard
776 |
777 | "@types/babel__generator@npm:*":
778 | version: 7.6.8
779 | resolution: "@types/babel__generator@npm:7.6.8"
780 | dependencies:
781 | "@babel/types": ^7.0.0
782 | checksum: 5b332ea336a2efffbdeedb92b6781949b73498606ddd4205462f7d96dafd45ff3618770b41de04c4881e333dd84388bfb8afbdf6f2764cbd98be550d85c6bb48
783 | languageName: node
784 | linkType: hard
785 |
786 | "@types/babel__template@npm:*":
787 | version: 7.4.4
788 | resolution: "@types/babel__template@npm:7.4.4"
789 | dependencies:
790 | "@babel/parser": ^7.1.0
791 | "@babel/types": ^7.0.0
792 | checksum: d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29
793 | languageName: node
794 | linkType: hard
795 |
796 | "@types/babel__traverse@npm:*":
797 | version: 7.20.6
798 | resolution: "@types/babel__traverse@npm:7.20.6"
799 | dependencies:
800 | "@babel/types": ^7.20.7
801 | checksum: 2bdc65eb62232c2d5c1086adeb0c31e7980e6fd7e50a3483b4a724a1a1029c84d9cb59749cf8de612f9afa2bc14c85b8f50e64e21f8a4398fa77eb9059a4283c
802 | languageName: node
803 | linkType: hard
804 |
805 | "@types/estree@npm:1.0.6":
806 | version: 1.0.6
807 | resolution: "@types/estree@npm:1.0.6"
808 | checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9
809 | languageName: node
810 | linkType: hard
811 |
812 | "@types/hast@npm:^2.0.0":
813 | version: 2.3.10
814 | resolution: "@types/hast@npm:2.3.10"
815 | dependencies:
816 | "@types/unist": ^2
817 | checksum: 41531b7fbf590b02452996fc63272479c20a07269e370bd6514982cbcd1819b4b84d3ea620f2410d1b9541a23d08ce2eeb0a592145d05e00e249c3d56700d460
818 | languageName: node
819 | linkType: hard
820 |
821 | "@types/unist@npm:^2":
822 | version: 2.0.11
823 | resolution: "@types/unist@npm:2.0.11"
824 | checksum: 6d436e832bc35c6dde9f056ac515ebf2b3384a1d7f63679d12358766f9b313368077402e9c1126a14d827f10370a5485e628bf61aa91117cf4fc882423191a4e
825 | languageName: node
826 | linkType: hard
827 |
828 | "@vitejs/plugin-react@npm:^4.3.4":
829 | version: 4.3.4
830 | resolution: "@vitejs/plugin-react@npm:4.3.4"
831 | dependencies:
832 | "@babel/core": ^7.26.0
833 | "@babel/plugin-transform-react-jsx-self": ^7.25.9
834 | "@babel/plugin-transform-react-jsx-source": ^7.25.9
835 | "@types/babel__core": ^7.20.5
836 | react-refresh: ^0.14.2
837 | peerDependencies:
838 | vite: ^4.2.0 || ^5.0.0 || ^6.0.0
839 | checksum: d417f40d9259a1d5193152f7d9fee081d5bf41cbeef9662ae1123ccc1e26aa4b6b04bc82ebb8c4fbfde9516a746fb3af7da19fdd449819c30f0631daaa10a44b
840 | languageName: node
841 | linkType: hard
842 |
843 | "abbrev@npm:^2.0.0":
844 | version: 2.0.0
845 | resolution: "abbrev@npm:2.0.0"
846 | checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36
847 | languageName: node
848 | linkType: hard
849 |
850 | "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1":
851 | version: 7.1.1
852 | resolution: "agent-base@npm:7.1.1"
853 | dependencies:
854 | debug: ^4.3.4
855 | checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037
856 | languageName: node
857 | linkType: hard
858 |
859 | "aggregate-error@npm:^3.0.0":
860 | version: 3.1.0
861 | resolution: "aggregate-error@npm:3.1.0"
862 | dependencies:
863 | clean-stack: ^2.0.0
864 | indent-string: ^4.0.0
865 | checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79
866 | languageName: node
867 | linkType: hard
868 |
869 | "ansi-regex@npm:^5.0.1":
870 | version: 5.0.1
871 | resolution: "ansi-regex@npm:5.0.1"
872 | checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b
873 | languageName: node
874 | linkType: hard
875 |
876 | "ansi-regex@npm:^6.0.1":
877 | version: 6.1.0
878 | resolution: "ansi-regex@npm:6.1.0"
879 | checksum: 495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac
880 | languageName: node
881 | linkType: hard
882 |
883 | "ansi-styles@npm:^4.0.0":
884 | version: 4.3.0
885 | resolution: "ansi-styles@npm:4.3.0"
886 | dependencies:
887 | color-convert: ^2.0.1
888 | checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4
889 | languageName: node
890 | linkType: hard
891 |
892 | "ansi-styles@npm:^6.1.0":
893 | version: 6.2.1
894 | resolution: "ansi-styles@npm:6.2.1"
895 | checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9
896 | languageName: node
897 | linkType: hard
898 |
899 | "any-promise@npm:^1.0.0":
900 | version: 1.3.0
901 | resolution: "any-promise@npm:1.3.0"
902 | checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de
903 | languageName: node
904 | linkType: hard
905 |
906 | "anymatch@npm:~3.1.2":
907 | version: 3.1.3
908 | resolution: "anymatch@npm:3.1.3"
909 | dependencies:
910 | normalize-path: ^3.0.0
911 | picomatch: ^2.0.4
912 | checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2
913 | languageName: node
914 | linkType: hard
915 |
916 | "arg@npm:^5.0.2":
917 | version: 5.0.2
918 | resolution: "arg@npm:5.0.2"
919 | checksum: 6c69ada1a9943d332d9e5382393e897c500908d91d5cb735a01120d5f71daf1b339b7b8980cbeaba8fd1afc68e658a739746179e4315a26e8a28951ff9930078
920 | languageName: node
921 | linkType: hard
922 |
923 | "autoprefixer@npm:^10.4.20":
924 | version: 10.4.20
925 | resolution: "autoprefixer@npm:10.4.20"
926 | dependencies:
927 | browserslist: ^4.23.3
928 | caniuse-lite: ^1.0.30001646
929 | fraction.js: ^4.3.7
930 | normalize-range: ^0.1.2
931 | picocolors: ^1.0.1
932 | postcss-value-parser: ^4.2.0
933 | peerDependencies:
934 | postcss: ^8.1.0
935 | bin:
936 | autoprefixer: bin/autoprefixer
937 | checksum: 187cec2ec356631932b212f76dc64f4419c117fdb2fb9eeeb40867d38ba5ca5ba734e6ceefc9e3af4eec8258e60accdf5cbf2b7708798598fde35cdc3de562d6
938 | languageName: node
939 | linkType: hard
940 |
941 | "balanced-match@npm:^1.0.0":
942 | version: 1.0.2
943 | resolution: "balanced-match@npm:1.0.2"
944 | checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65
945 | languageName: node
946 | linkType: hard
947 |
948 | "binary-extensions@npm:^2.0.0":
949 | version: 2.3.0
950 | resolution: "binary-extensions@npm:2.3.0"
951 | checksum: bcad01494e8a9283abf18c1b967af65ee79b0c6a9e6fcfafebfe91dbe6e0fc7272bafb73389e198b310516ae04f7ad17d79aacf6cb4c0d5d5202a7e2e52c7d98
952 | languageName: node
953 | linkType: hard
954 |
955 | "brace-expansion@npm:^2.0.1":
956 | version: 2.0.1
957 | resolution: "brace-expansion@npm:2.0.1"
958 | dependencies:
959 | balanced-match: ^1.0.0
960 | checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1
961 | languageName: node
962 | linkType: hard
963 |
964 | "braces@npm:^3.0.3, braces@npm:~3.0.2":
965 | version: 3.0.3
966 | resolution: "braces@npm:3.0.3"
967 | dependencies:
968 | fill-range: ^7.1.1
969 | checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69
970 | languageName: node
971 | linkType: hard
972 |
973 | "browserslist@npm:^4.23.3, browserslist@npm:^4.24.0":
974 | version: 4.24.2
975 | resolution: "browserslist@npm:4.24.2"
976 | dependencies:
977 | caniuse-lite: ^1.0.30001669
978 | electron-to-chromium: ^1.5.41
979 | node-releases: ^2.0.18
980 | update-browserslist-db: ^1.1.1
981 | bin:
982 | browserslist: cli.js
983 | checksum: cf64085f12132d38638f38937a255edb82c7551b164a98577b055dd79719187a816112f7b97b9739e400c4954cd66479c0d7a843cb816e346f4795dc24fd5d97
984 | languageName: node
985 | linkType: hard
986 |
987 | "cacache@npm:^18.0.0":
988 | version: 18.0.4
989 | resolution: "cacache@npm:18.0.4"
990 | dependencies:
991 | "@npmcli/fs": ^3.1.0
992 | fs-minipass: ^3.0.0
993 | glob: ^10.2.2
994 | lru-cache: ^10.0.1
995 | minipass: ^7.0.3
996 | minipass-collect: ^2.0.1
997 | minipass-flush: ^1.0.5
998 | minipass-pipeline: ^1.2.4
999 | p-map: ^4.0.0
1000 | ssri: ^10.0.0
1001 | tar: ^6.1.11
1002 | unique-filename: ^3.0.0
1003 | checksum: b7422c113b4ec750f33beeca0f426a0024c28e3172f332218f48f963e5b970647fa1ac05679fe5bb448832c51efea9fda4456b9a95c3a1af1105fe6c1833cde2
1004 | languageName: node
1005 | linkType: hard
1006 |
1007 | "camelcase-css@npm:^2.0.1":
1008 | version: 2.0.1
1009 | resolution: "camelcase-css@npm:2.0.1"
1010 | checksum: 1cec2b3b3dcb5026688a470b00299a8db7d904c4802845c353dbd12d9d248d3346949a814d83bfd988d4d2e5b9904c07efe76fecd195a1d4f05b543e7c0b56b1
1011 | languageName: node
1012 | linkType: hard
1013 |
1014 | "caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001669":
1015 | version: 1.0.30001683
1016 | resolution: "caniuse-lite@npm:1.0.30001683"
1017 | checksum: 66c5d4882f1e1a251b1fe63f8dc530165e980f11681cd96851c3da68d3464e66dc28479c4c0aaa6a1a781f96db451207688f4b57904b3d07cfd28ae306d34122
1018 | languageName: node
1019 | linkType: hard
1020 |
1021 | "character-entities-legacy@npm:^1.0.0":
1022 | version: 1.1.4
1023 | resolution: "character-entities-legacy@npm:1.1.4"
1024 | checksum: fe03a82c154414da3a0c8ab3188e4237ec68006cbcd681cf23c7cfb9502a0e76cd30ab69a2e50857ca10d984d57de3b307680fff5328ccd427f400e559c3a811
1025 | languageName: node
1026 | linkType: hard
1027 |
1028 | "character-entities@npm:^1.0.0":
1029 | version: 1.2.4
1030 | resolution: "character-entities@npm:1.2.4"
1031 | checksum: e1545716571ead57beac008433c1ff69517cd8ca5b336889321c5b8ff4a99c29b65589a701e9c086cda8a5e346a67295e2684f6c7ea96819fe85cbf49bf8686d
1032 | languageName: node
1033 | linkType: hard
1034 |
1035 | "character-reference-invalid@npm:^1.0.0":
1036 | version: 1.1.4
1037 | resolution: "character-reference-invalid@npm:1.1.4"
1038 | checksum: 20274574c70e05e2f81135f3b93285536bc8ff70f37f0809b0d17791a832838f1e49938382899ed4cb444e5bbd4314ca1415231344ba29f4222ce2ccf24fea0b
1039 | languageName: node
1040 | linkType: hard
1041 |
1042 | "chokidar@npm:^3.6.0":
1043 | version: 3.6.0
1044 | resolution: "chokidar@npm:3.6.0"
1045 | dependencies:
1046 | anymatch: ~3.1.2
1047 | braces: ~3.0.2
1048 | fsevents: ~2.3.2
1049 | glob-parent: ~5.1.2
1050 | is-binary-path: ~2.1.0
1051 | is-glob: ~4.0.1
1052 | normalize-path: ~3.0.0
1053 | readdirp: ~3.6.0
1054 | dependenciesMeta:
1055 | fsevents:
1056 | optional: true
1057 | checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d
1058 | languageName: node
1059 | linkType: hard
1060 |
1061 | "chownr@npm:^2.0.0":
1062 | version: 2.0.0
1063 | resolution: "chownr@npm:2.0.0"
1064 | checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f
1065 | languageName: node
1066 | linkType: hard
1067 |
1068 | "clean-stack@npm:^2.0.0":
1069 | version: 2.2.0
1070 | resolution: "clean-stack@npm:2.2.0"
1071 | checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68
1072 | languageName: node
1073 | linkType: hard
1074 |
1075 | "color-convert@npm:^2.0.1":
1076 | version: 2.0.1
1077 | resolution: "color-convert@npm:2.0.1"
1078 | dependencies:
1079 | color-name: ~1.1.4
1080 | checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336
1081 | languageName: node
1082 | linkType: hard
1083 |
1084 | "color-name@npm:~1.1.4":
1085 | version: 1.1.4
1086 | resolution: "color-name@npm:1.1.4"
1087 | checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610
1088 | languageName: node
1089 | linkType: hard
1090 |
1091 | "comma-separated-tokens@npm:^1.0.0":
1092 | version: 1.0.8
1093 | resolution: "comma-separated-tokens@npm:1.0.8"
1094 | checksum: 0adcb07174fa4d08cf0f5c8e3aec40a36b5ff0c2c720e5e23f50fe02e6789d1d00a67036c80e0c1e1539f41d3e7f0101b074039dd833b4e4a59031b659d6ca0d
1095 | languageName: node
1096 | linkType: hard
1097 |
1098 | "commander@npm:^4.0.0":
1099 | version: 4.1.1
1100 | resolution: "commander@npm:4.1.1"
1101 | checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977
1102 | languageName: node
1103 | linkType: hard
1104 |
1105 | "convert-source-map@npm:^2.0.0":
1106 | version: 2.0.0
1107 | resolution: "convert-source-map@npm:2.0.0"
1108 | checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035
1109 | languageName: node
1110 | linkType: hard
1111 |
1112 | "cross-spawn@npm:^7.0.0":
1113 | version: 7.0.6
1114 | resolution: "cross-spawn@npm:7.0.6"
1115 | dependencies:
1116 | path-key: ^3.1.0
1117 | shebang-command: ^2.0.0
1118 | which: ^2.0.1
1119 | checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b
1120 | languageName: node
1121 | linkType: hard
1122 |
1123 | "cssesc@npm:^3.0.0":
1124 | version: 3.0.0
1125 | resolution: "cssesc@npm:3.0.0"
1126 | bin:
1127 | cssesc: bin/cssesc
1128 | checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2
1129 | languageName: node
1130 | linkType: hard
1131 |
1132 | "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.4":
1133 | version: 4.3.7
1134 | resolution: "debug@npm:4.3.7"
1135 | dependencies:
1136 | ms: ^2.1.3
1137 | peerDependenciesMeta:
1138 | supports-color:
1139 | optional: true
1140 | checksum: 822d74e209cd910ef0802d261b150314bbcf36c582ccdbb3e70f0894823c17e49a50d3e66d96b633524263975ca16b6a833f3e3b7e030c157169a5fabac63160
1141 | languageName: node
1142 | linkType: hard
1143 |
1144 | "dexie-react-hooks@npm:^1.1.7":
1145 | version: 1.1.7
1146 | resolution: "dexie-react-hooks@npm:1.1.7"
1147 | peerDependencies:
1148 | "@types/react": ">=16"
1149 | dexie: ^3.2 || ^4.0.1-alpha
1150 | react: ">=16"
1151 | checksum: d1133546ab8d345a8e10d38d272eaa1efa3a34e7bdefacd2acc2419f30e52ea02ab29b19d8911755fbda5882e59d132ba5c3cb840dd4430d3cbca15ef5ea610e
1152 | languageName: node
1153 | linkType: hard
1154 |
1155 | "dexie@npm:^4.0.10":
1156 | version: 4.0.10
1157 | resolution: "dexie@npm:4.0.10"
1158 | checksum: 5023478791d86e6723c4c2653544eb218095ac725a57f9597d611b716ecb0b848c4a6a123da27dbc01081f033d83d5ef21dd60744afc97f4d3dd03ad22739e83
1159 | languageName: node
1160 | linkType: hard
1161 |
1162 | "didyoumean@npm:^1.2.2":
1163 | version: 1.2.2
1164 | resolution: "didyoumean@npm:1.2.2"
1165 | checksum: d5d98719d58b3c2fa59663c4c42ba9716f1fd01245c31d5fce31915bd3aa26e6aac149788e007358f778ebbd68a2256eb5973e8ca6f221df221ba060115acf2e
1166 | languageName: node
1167 | linkType: hard
1168 |
1169 | "dlv@npm:^1.1.3":
1170 | version: 1.1.3
1171 | resolution: "dlv@npm:1.1.3"
1172 | checksum: d7381bca22ed11933a1ccf376db7a94bee2c57aa61e490f680124fa2d1cd27e94eba641d9f45be57caab4f9a6579de0983466f620a2cd6230d7ec93312105ae7
1173 | languageName: node
1174 | linkType: hard
1175 |
1176 | "eastasianwidth@npm:^0.2.0":
1177 | version: 0.2.0
1178 | resolution: "eastasianwidth@npm:0.2.0"
1179 | checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed
1180 | languageName: node
1181 | linkType: hard
1182 |
1183 | "electron-to-chromium@npm:^1.5.41":
1184 | version: 1.5.64
1185 | resolution: "electron-to-chromium@npm:1.5.64"
1186 | checksum: 9a866dcd2b480fee0d3a265318b1227cbaf1ee236cbb7aa09306b7cb8a6c21c069a8001dff1183e5a85214636a04a856a7d90e0ff3860bf86c9cbc44a69f59bb
1187 | languageName: node
1188 | linkType: hard
1189 |
1190 | "emoji-regex@npm:^8.0.0":
1191 | version: 8.0.0
1192 | resolution: "emoji-regex@npm:8.0.0"
1193 | checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192
1194 | languageName: node
1195 | linkType: hard
1196 |
1197 | "emoji-regex@npm:^9.2.2":
1198 | version: 9.2.2
1199 | resolution: "emoji-regex@npm:9.2.2"
1200 | checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601
1201 | languageName: node
1202 | linkType: hard
1203 |
1204 | "encoding@npm:^0.1.13":
1205 | version: 0.1.13
1206 | resolution: "encoding@npm:0.1.13"
1207 | dependencies:
1208 | iconv-lite: ^0.6.2
1209 | checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f
1210 | languageName: node
1211 | linkType: hard
1212 |
1213 | "env-paths@npm:^2.2.0":
1214 | version: 2.2.1
1215 | resolution: "env-paths@npm:2.2.1"
1216 | checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e
1217 | languageName: node
1218 | linkType: hard
1219 |
1220 | "err-code@npm:^2.0.2":
1221 | version: 2.0.3
1222 | resolution: "err-code@npm:2.0.3"
1223 | checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54
1224 | languageName: node
1225 | linkType: hard
1226 |
1227 | "esbuild@npm:^0.24.0":
1228 | version: 0.24.0
1229 | resolution: "esbuild@npm:0.24.0"
1230 | dependencies:
1231 | "@esbuild/aix-ppc64": 0.24.0
1232 | "@esbuild/android-arm": 0.24.0
1233 | "@esbuild/android-arm64": 0.24.0
1234 | "@esbuild/android-x64": 0.24.0
1235 | "@esbuild/darwin-arm64": 0.24.0
1236 | "@esbuild/darwin-x64": 0.24.0
1237 | "@esbuild/freebsd-arm64": 0.24.0
1238 | "@esbuild/freebsd-x64": 0.24.0
1239 | "@esbuild/linux-arm": 0.24.0
1240 | "@esbuild/linux-arm64": 0.24.0
1241 | "@esbuild/linux-ia32": 0.24.0
1242 | "@esbuild/linux-loong64": 0.24.0
1243 | "@esbuild/linux-mips64el": 0.24.0
1244 | "@esbuild/linux-ppc64": 0.24.0
1245 | "@esbuild/linux-riscv64": 0.24.0
1246 | "@esbuild/linux-s390x": 0.24.0
1247 | "@esbuild/linux-x64": 0.24.0
1248 | "@esbuild/netbsd-x64": 0.24.0
1249 | "@esbuild/openbsd-arm64": 0.24.0
1250 | "@esbuild/openbsd-x64": 0.24.0
1251 | "@esbuild/sunos-x64": 0.24.0
1252 | "@esbuild/win32-arm64": 0.24.0
1253 | "@esbuild/win32-ia32": 0.24.0
1254 | "@esbuild/win32-x64": 0.24.0
1255 | dependenciesMeta:
1256 | "@esbuild/aix-ppc64":
1257 | optional: true
1258 | "@esbuild/android-arm":
1259 | optional: true
1260 | "@esbuild/android-arm64":
1261 | optional: true
1262 | "@esbuild/android-x64":
1263 | optional: true
1264 | "@esbuild/darwin-arm64":
1265 | optional: true
1266 | "@esbuild/darwin-x64":
1267 | optional: true
1268 | "@esbuild/freebsd-arm64":
1269 | optional: true
1270 | "@esbuild/freebsd-x64":
1271 | optional: true
1272 | "@esbuild/linux-arm":
1273 | optional: true
1274 | "@esbuild/linux-arm64":
1275 | optional: true
1276 | "@esbuild/linux-ia32":
1277 | optional: true
1278 | "@esbuild/linux-loong64":
1279 | optional: true
1280 | "@esbuild/linux-mips64el":
1281 | optional: true
1282 | "@esbuild/linux-ppc64":
1283 | optional: true
1284 | "@esbuild/linux-riscv64":
1285 | optional: true
1286 | "@esbuild/linux-s390x":
1287 | optional: true
1288 | "@esbuild/linux-x64":
1289 | optional: true
1290 | "@esbuild/netbsd-x64":
1291 | optional: true
1292 | "@esbuild/openbsd-arm64":
1293 | optional: true
1294 | "@esbuild/openbsd-x64":
1295 | optional: true
1296 | "@esbuild/sunos-x64":
1297 | optional: true
1298 | "@esbuild/win32-arm64":
1299 | optional: true
1300 | "@esbuild/win32-ia32":
1301 | optional: true
1302 | "@esbuild/win32-x64":
1303 | optional: true
1304 | bin:
1305 | esbuild: bin/esbuild
1306 | checksum: dd386d92a05c7eb03078480522cdd8b40c434777b5f08487c27971d30933ecaae3f08bd221958dd8f9c66214915cdc85f844283ca9bdbf8ee703d889ae526edd
1307 | languageName: node
1308 | linkType: hard
1309 |
1310 | "escalade@npm:^3.2.0":
1311 | version: 3.2.0
1312 | resolution: "escalade@npm:3.2.0"
1313 | checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e
1314 | languageName: node
1315 | linkType: hard
1316 |
1317 | "exponential-backoff@npm:^3.1.1":
1318 | version: 3.1.1
1319 | resolution: "exponential-backoff@npm:3.1.1"
1320 | checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48
1321 | languageName: node
1322 | linkType: hard
1323 |
1324 | "fast-glob@npm:^3.3.2":
1325 | version: 3.3.2
1326 | resolution: "fast-glob@npm:3.3.2"
1327 | dependencies:
1328 | "@nodelib/fs.stat": ^2.0.2
1329 | "@nodelib/fs.walk": ^1.2.3
1330 | glob-parent: ^5.1.2
1331 | merge2: ^1.3.0
1332 | micromatch: ^4.0.4
1333 | checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1
1334 | languageName: node
1335 | linkType: hard
1336 |
1337 | "fastq@npm:^1.6.0":
1338 | version: 1.17.1
1339 | resolution: "fastq@npm:1.17.1"
1340 | dependencies:
1341 | reusify: ^1.0.4
1342 | checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88
1343 | languageName: node
1344 | linkType: hard
1345 |
1346 | "fault@npm:^1.0.0":
1347 | version: 1.0.4
1348 | resolution: "fault@npm:1.0.4"
1349 | dependencies:
1350 | format: ^0.2.0
1351 | checksum: 5ac610d8b09424e0f2fa8cf913064372f2ee7140a203a79957f73ed557c0e79b1a3d096064d7f40bde8132a69204c1fe25ec23634c05c6da2da2039cff26c4e7
1352 | languageName: node
1353 | linkType: hard
1354 |
1355 | "fill-range@npm:^7.1.1":
1356 | version: 7.1.1
1357 | resolution: "fill-range@npm:7.1.1"
1358 | dependencies:
1359 | to-regex-range: ^5.0.1
1360 | checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798
1361 | languageName: node
1362 | linkType: hard
1363 |
1364 | "foreground-child@npm:^3.1.0":
1365 | version: 3.3.0
1366 | resolution: "foreground-child@npm:3.3.0"
1367 | dependencies:
1368 | cross-spawn: ^7.0.0
1369 | signal-exit: ^4.0.1
1370 | checksum: 1989698488f725b05b26bc9afc8a08f08ec41807cd7b92ad85d96004ddf8243fd3e79486b8348c64a3011ae5cc2c9f0936af989e1f28339805d8bc178a75b451
1371 | languageName: node
1372 | linkType: hard
1373 |
1374 | "format@npm:^0.2.0":
1375 | version: 0.2.2
1376 | resolution: "format@npm:0.2.2"
1377 | checksum: 646a60e1336250d802509cf24fb801e43bd4a70a07510c816fa133aa42cdbc9c21e66e9cc0801bb183c5b031c9d68be62e7fbb6877756e52357850f92aa28799
1378 | languageName: node
1379 | linkType: hard
1380 |
1381 | "fraction.js@npm:^4.3.7":
1382 | version: 4.3.7
1383 | resolution: "fraction.js@npm:4.3.7"
1384 | checksum: e1553ae3f08e3ba0e8c06e43a3ab20b319966dfb7ddb96fd9b5d0ee11a66571af7f993229c88ebbb0d4a816eb813a24ed48207b140d442a8f76f33763b8d1f3f
1385 | languageName: node
1386 | linkType: hard
1387 |
1388 | "framer-motion@npm:^11.14.1":
1389 | version: 11.14.1
1390 | resolution: "framer-motion@npm:11.14.1"
1391 | dependencies:
1392 | motion-dom: ^11.14.1
1393 | motion-utils: ^11.14.1
1394 | tslib: ^2.4.0
1395 | peerDependencies:
1396 | "@emotion/is-prop-valid": "*"
1397 | react: ^18.0.0 || ^19.0.0
1398 | react-dom: ^18.0.0 || ^19.0.0
1399 | peerDependenciesMeta:
1400 | "@emotion/is-prop-valid":
1401 | optional: true
1402 | react:
1403 | optional: true
1404 | react-dom:
1405 | optional: true
1406 | checksum: 6a540564c8faf0239996517891fa4ad3ee950cf3a0628cc088b3d2a7f1f097e9f8e6e8575cb053a3185f47d26e1022a2fbf9ed97c300beabbd77d7b579ffd229
1407 | languageName: node
1408 | linkType: hard
1409 |
1410 | "fs-minipass@npm:^2.0.0":
1411 | version: 2.1.0
1412 | resolution: "fs-minipass@npm:2.1.0"
1413 | dependencies:
1414 | minipass: ^3.0.0
1415 | checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1
1416 | languageName: node
1417 | linkType: hard
1418 |
1419 | "fs-minipass@npm:^3.0.0":
1420 | version: 3.0.3
1421 | resolution: "fs-minipass@npm:3.0.3"
1422 | dependencies:
1423 | minipass: ^7.0.3
1424 | checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802
1425 | languageName: node
1426 | linkType: hard
1427 |
1428 | "fsevents@npm:~2.3.2, fsevents@npm:~2.3.3":
1429 | version: 2.3.3
1430 | resolution: "fsevents@npm:2.3.3"
1431 | dependencies:
1432 | node-gyp: latest
1433 | checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317
1434 | conditions: os=darwin
1435 | languageName: node
1436 | linkType: hard
1437 |
1438 | "fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin":
1439 | version: 2.3.3
1440 | resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1"
1441 | dependencies:
1442 | node-gyp: latest
1443 | conditions: os=darwin
1444 | languageName: node
1445 | linkType: hard
1446 |
1447 | "function-bind@npm:^1.1.2":
1448 | version: 1.1.2
1449 | resolution: "function-bind@npm:1.1.2"
1450 | checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1
1451 | languageName: node
1452 | linkType: hard
1453 |
1454 | "gensync@npm:^1.0.0-beta.2":
1455 | version: 1.0.0-beta.2
1456 | resolution: "gensync@npm:1.0.0-beta.2"
1457 | checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec
1458 | languageName: node
1459 | linkType: hard
1460 |
1461 | "glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2":
1462 | version: 5.1.2
1463 | resolution: "glob-parent@npm:5.1.2"
1464 | dependencies:
1465 | is-glob: ^4.0.1
1466 | checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e
1467 | languageName: node
1468 | linkType: hard
1469 |
1470 | "glob-parent@npm:^6.0.2":
1471 | version: 6.0.2
1472 | resolution: "glob-parent@npm:6.0.2"
1473 | dependencies:
1474 | is-glob: ^4.0.3
1475 | checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8
1476 | languageName: node
1477 | linkType: hard
1478 |
1479 | "glob@npm:^10.2.2, glob@npm:^10.3.10":
1480 | version: 10.4.5
1481 | resolution: "glob@npm:10.4.5"
1482 | dependencies:
1483 | foreground-child: ^3.1.0
1484 | jackspeak: ^3.1.2
1485 | minimatch: ^9.0.4
1486 | minipass: ^7.1.2
1487 | package-json-from-dist: ^1.0.0
1488 | path-scurry: ^1.11.1
1489 | bin:
1490 | glob: dist/esm/bin.mjs
1491 | checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a
1492 | languageName: node
1493 | linkType: hard
1494 |
1495 | "globals@npm:^11.1.0":
1496 | version: 11.12.0
1497 | resolution: "globals@npm:11.12.0"
1498 | checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e
1499 | languageName: node
1500 | linkType: hard
1501 |
1502 | "graceful-fs@npm:^4.2.6":
1503 | version: 4.2.11
1504 | resolution: "graceful-fs@npm:4.2.11"
1505 | checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7
1506 | languageName: node
1507 | linkType: hard
1508 |
1509 | "hasown@npm:^2.0.2":
1510 | version: 2.0.2
1511 | resolution: "hasown@npm:2.0.2"
1512 | dependencies:
1513 | function-bind: ^1.1.2
1514 | checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db
1515 | languageName: node
1516 | linkType: hard
1517 |
1518 | "hast-util-parse-selector@npm:^2.0.0":
1519 | version: 2.2.5
1520 | resolution: "hast-util-parse-selector@npm:2.2.5"
1521 | checksum: 22ee4afbd11754562144cb3c4f3ec52524dafba4d90ee52512902d17cf11066d83b38f7bdf6ca571bbc2541f07ba30db0d234657b6ecb8ca4631587466459605
1522 | languageName: node
1523 | linkType: hard
1524 |
1525 | "hastscript@npm:^6.0.0":
1526 | version: 6.0.0
1527 | resolution: "hastscript@npm:6.0.0"
1528 | dependencies:
1529 | "@types/hast": ^2.0.0
1530 | comma-separated-tokens: ^1.0.0
1531 | hast-util-parse-selector: ^2.0.0
1532 | property-information: ^5.0.0
1533 | space-separated-tokens: ^1.0.0
1534 | checksum: 5e50b85af0d2cb7c17979cb1ddca75d6b96b53019dd999b39e7833192c9004201c3cee6445065620ea05d0087d9ae147a4844e582d64868be5bc6b0232dfe52d
1535 | languageName: node
1536 | linkType: hard
1537 |
1538 | "highlight.js@npm:^10.4.1, highlight.js@npm:~10.7.0":
1539 | version: 10.7.3
1540 | resolution: "highlight.js@npm:10.7.3"
1541 | checksum: defeafcd546b535d710d8efb8e650af9e3b369ef53e28c3dc7893eacfe263200bba4c5fcf43524ae66d5c0c296b1af0870523ceae3e3104d24b7abf6374a4fea
1542 | languageName: node
1543 | linkType: hard
1544 |
1545 | "highlightjs-vue@npm:^1.0.0":
1546 | version: 1.0.0
1547 | resolution: "highlightjs-vue@npm:1.0.0"
1548 | checksum: 895f2dd22c93a441aca7df8d21f18c00697537675af18832e50810a071715f79e45eda677e6244855f325234c6a06f7bd76f8f20bd602040fc350c80ac7725e4
1549 | languageName: node
1550 | linkType: hard
1551 |
1552 | "http-cache-semantics@npm:^4.1.1":
1553 | version: 4.1.1
1554 | resolution: "http-cache-semantics@npm:4.1.1"
1555 | checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236
1556 | languageName: node
1557 | linkType: hard
1558 |
1559 | "http-proxy-agent@npm:^7.0.0":
1560 | version: 7.0.2
1561 | resolution: "http-proxy-agent@npm:7.0.2"
1562 | dependencies:
1563 | agent-base: ^7.1.0
1564 | debug: ^4.3.4
1565 | checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3
1566 | languageName: node
1567 | linkType: hard
1568 |
1569 | "https-proxy-agent@npm:^7.0.1":
1570 | version: 7.0.5
1571 | resolution: "https-proxy-agent@npm:7.0.5"
1572 | dependencies:
1573 | agent-base: ^7.0.2
1574 | debug: 4
1575 | checksum: 2e1a28960f13b041a50702ee74f240add8e75146a5c37fc98f1960f0496710f6918b3a9fe1e5aba41e50f58e6df48d107edd9c405c5f0d73ac260dabf2210857
1576 | languageName: node
1577 | linkType: hard
1578 |
1579 | "iconv-lite@npm:^0.6.2":
1580 | version: 0.6.3
1581 | resolution: "iconv-lite@npm:0.6.3"
1582 | dependencies:
1583 | safer-buffer: ">= 2.1.2 < 3.0.0"
1584 | checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf
1585 | languageName: node
1586 | linkType: hard
1587 |
1588 | "imurmurhash@npm:^0.1.4":
1589 | version: 0.1.4
1590 | resolution: "imurmurhash@npm:0.1.4"
1591 | checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7
1592 | languageName: node
1593 | linkType: hard
1594 |
1595 | "indent-string@npm:^4.0.0":
1596 | version: 4.0.0
1597 | resolution: "indent-string@npm:4.0.0"
1598 | checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612
1599 | languageName: node
1600 | linkType: hard
1601 |
1602 | "ip-address@npm:^9.0.5":
1603 | version: 9.0.5
1604 | resolution: "ip-address@npm:9.0.5"
1605 | dependencies:
1606 | jsbn: 1.1.0
1607 | sprintf-js: ^1.1.3
1608 | checksum: aa15f12cfd0ef5e38349744e3654bae649a34c3b10c77a674a167e99925d1549486c5b14730eebce9fea26f6db9d5e42097b00aa4f9f612e68c79121c71652dc
1609 | languageName: node
1610 | linkType: hard
1611 |
1612 | "is-alphabetical@npm:^1.0.0":
1613 | version: 1.0.4
1614 | resolution: "is-alphabetical@npm:1.0.4"
1615 | checksum: 6508cce44fd348f06705d377b260974f4ce68c74000e7da4045f0d919e568226dc3ce9685c5a2af272195384df6930f748ce9213fc9f399b5d31b362c66312cb
1616 | languageName: node
1617 | linkType: hard
1618 |
1619 | "is-alphanumerical@npm:^1.0.0":
1620 | version: 1.0.4
1621 | resolution: "is-alphanumerical@npm:1.0.4"
1622 | dependencies:
1623 | is-alphabetical: ^1.0.0
1624 | is-decimal: ^1.0.0
1625 | checksum: e2e491acc16fcf5b363f7c726f666a9538dba0a043665740feb45bba1652457a73441e7c5179c6768a638ed396db3437e9905f403644ec7c468fb41f4813d03f
1626 | languageName: node
1627 | linkType: hard
1628 |
1629 | "is-binary-path@npm:~2.1.0":
1630 | version: 2.1.0
1631 | resolution: "is-binary-path@npm:2.1.0"
1632 | dependencies:
1633 | binary-extensions: ^2.0.0
1634 | checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c
1635 | languageName: node
1636 | linkType: hard
1637 |
1638 | "is-core-module@npm:^2.13.0":
1639 | version: 2.15.1
1640 | resolution: "is-core-module@npm:2.15.1"
1641 | dependencies:
1642 | hasown: ^2.0.2
1643 | checksum: df134c168115690724b62018c37b2f5bba0d5745fa16960b329c5a00883a8bea6a5632fdb1e3efcce237c201826ba09f93197b7cd95577ea56b0df335be23633
1644 | languageName: node
1645 | linkType: hard
1646 |
1647 | "is-decimal@npm:^1.0.0":
1648 | version: 1.0.4
1649 | resolution: "is-decimal@npm:1.0.4"
1650 | checksum: ed483a387517856dc395c68403a10201fddcc1b63dc56513fbe2fe86ab38766120090ecdbfed89223d84ca8b1cd28b0641b93cb6597b6e8f4c097a7c24e3fb96
1651 | languageName: node
1652 | linkType: hard
1653 |
1654 | "is-extglob@npm:^2.1.1":
1655 | version: 2.1.1
1656 | resolution: "is-extglob@npm:2.1.1"
1657 | checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85
1658 | languageName: node
1659 | linkType: hard
1660 |
1661 | "is-fullwidth-code-point@npm:^3.0.0":
1662 | version: 3.0.0
1663 | resolution: "is-fullwidth-code-point@npm:3.0.0"
1664 | checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348
1665 | languageName: node
1666 | linkType: hard
1667 |
1668 | "is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1":
1669 | version: 4.0.3
1670 | resolution: "is-glob@npm:4.0.3"
1671 | dependencies:
1672 | is-extglob: ^2.1.1
1673 | checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4
1674 | languageName: node
1675 | linkType: hard
1676 |
1677 | "is-hexadecimal@npm:^1.0.0":
1678 | version: 1.0.4
1679 | resolution: "is-hexadecimal@npm:1.0.4"
1680 | checksum: a452e047587b6069332d83130f54d30da4faf2f2ebaa2ce6d073c27b5703d030d58ed9e0b729c8e4e5b52c6f1dab26781bb77b7bc6c7805f14f320e328ff8cd5
1681 | languageName: node
1682 | linkType: hard
1683 |
1684 | "is-lambda@npm:^1.0.1":
1685 | version: 1.0.1
1686 | resolution: "is-lambda@npm:1.0.1"
1687 | checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35
1688 | languageName: node
1689 | linkType: hard
1690 |
1691 | "is-number@npm:^7.0.0":
1692 | version: 7.0.0
1693 | resolution: "is-number@npm:7.0.0"
1694 | checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a
1695 | languageName: node
1696 | linkType: hard
1697 |
1698 | "isexe@npm:^2.0.0":
1699 | version: 2.0.0
1700 | resolution: "isexe@npm:2.0.0"
1701 | checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62
1702 | languageName: node
1703 | linkType: hard
1704 |
1705 | "isexe@npm:^3.1.1":
1706 | version: 3.1.1
1707 | resolution: "isexe@npm:3.1.1"
1708 | checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e
1709 | languageName: node
1710 | linkType: hard
1711 |
1712 | "jackspeak@npm:^3.1.2":
1713 | version: 3.4.3
1714 | resolution: "jackspeak@npm:3.4.3"
1715 | dependencies:
1716 | "@isaacs/cliui": ^8.0.2
1717 | "@pkgjs/parseargs": ^0.11.0
1718 | dependenciesMeta:
1719 | "@pkgjs/parseargs":
1720 | optional: true
1721 | checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00
1722 | languageName: node
1723 | linkType: hard
1724 |
1725 | "jiti@npm:^1.21.6":
1726 | version: 1.21.6
1727 | resolution: "jiti@npm:1.21.6"
1728 | bin:
1729 | jiti: bin/jiti.js
1730 | checksum: 9ea4a70a7bb950794824683ed1c632e2ede26949fbd348e2ba5ec8dc5efa54dc42022d85ae229cadaa60d4b95012e80ea07d625797199b688cc22ab0e8891d32
1731 | languageName: node
1732 | linkType: hard
1733 |
1734 | "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0":
1735 | version: 4.0.0
1736 | resolution: "js-tokens@npm:4.0.0"
1737 | checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78
1738 | languageName: node
1739 | linkType: hard
1740 |
1741 | "jsbn@npm:1.1.0":
1742 | version: 1.1.0
1743 | resolution: "jsbn@npm:1.1.0"
1744 | checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965
1745 | languageName: node
1746 | linkType: hard
1747 |
1748 | "jsesc@npm:^3.0.2":
1749 | version: 3.0.2
1750 | resolution: "jsesc@npm:3.0.2"
1751 | bin:
1752 | jsesc: bin/jsesc
1753 | checksum: a36d3ca40574a974d9c2063bf68c2b6141c20da8f2a36bd3279fc802563f35f0527a6c828801295bdfb2803952cf2cf387786c2c90ed564f88d5782475abfe3c
1754 | languageName: node
1755 | linkType: hard
1756 |
1757 | "json5@npm:^2.2.3":
1758 | version: 2.2.3
1759 | resolution: "json5@npm:2.2.3"
1760 | bin:
1761 | json5: lib/cli.js
1762 | checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349
1763 | languageName: node
1764 | linkType: hard
1765 |
1766 | "lilconfig@npm:^3.0.0":
1767 | version: 3.1.2
1768 | resolution: "lilconfig@npm:3.1.2"
1769 | checksum: 4e8b83ddd1d0ad722600994e6ba5d858ddca14f0587aa6b9c8185e17548149b5e13d4d583d811e9e9323157fa8c6a527e827739794c7502b59243c58e210b8c3
1770 | languageName: node
1771 | linkType: hard
1772 |
1773 | "lilconfig@npm:^3.1.3":
1774 | version: 3.1.3
1775 | resolution: "lilconfig@npm:3.1.3"
1776 | checksum: 644eb10830350f9cdc88610f71a921f510574ed02424b57b0b3abb66ea725d7a082559552524a842f4e0272c196b88dfe1ff7d35ffcc6f45736777185cd67c9a
1777 | languageName: node
1778 | linkType: hard
1779 |
1780 | "lines-and-columns@npm:^1.1.6":
1781 | version: 1.2.4
1782 | resolution: "lines-and-columns@npm:1.2.4"
1783 | checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5
1784 | languageName: node
1785 | linkType: hard
1786 |
1787 | "loose-envify@npm:^1.1.0":
1788 | version: 1.4.0
1789 | resolution: "loose-envify@npm:1.4.0"
1790 | dependencies:
1791 | js-tokens: ^3.0.0 || ^4.0.0
1792 | bin:
1793 | loose-envify: cli.js
1794 | checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4
1795 | languageName: node
1796 | linkType: hard
1797 |
1798 | "lowlight@npm:^1.17.0":
1799 | version: 1.20.0
1800 | resolution: "lowlight@npm:1.20.0"
1801 | dependencies:
1802 | fault: ^1.0.0
1803 | highlight.js: ~10.7.0
1804 | checksum: 14a1815d6bae202ddee313fc60f06d46e5235c02fa483a77950b401d85b4c1e12290145ccd17a716b07f9328bd5864aa2d402b6a819ff3be7c833d9748ff8ba7
1805 | languageName: node
1806 | linkType: hard
1807 |
1808 | "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0":
1809 | version: 10.4.3
1810 | resolution: "lru-cache@npm:10.4.3"
1811 | checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a
1812 | languageName: node
1813 | linkType: hard
1814 |
1815 | "lru-cache@npm:^5.1.1":
1816 | version: 5.1.1
1817 | resolution: "lru-cache@npm:5.1.1"
1818 | dependencies:
1819 | yallist: ^3.0.2
1820 | checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb
1821 | languageName: node
1822 | linkType: hard
1823 |
1824 | "make-fetch-happen@npm:^13.0.0":
1825 | version: 13.0.1
1826 | resolution: "make-fetch-happen@npm:13.0.1"
1827 | dependencies:
1828 | "@npmcli/agent": ^2.0.0
1829 | cacache: ^18.0.0
1830 | http-cache-semantics: ^4.1.1
1831 | is-lambda: ^1.0.1
1832 | minipass: ^7.0.2
1833 | minipass-fetch: ^3.0.0
1834 | minipass-flush: ^1.0.5
1835 | minipass-pipeline: ^1.2.4
1836 | negotiator: ^0.6.3
1837 | proc-log: ^4.2.0
1838 | promise-retry: ^2.0.1
1839 | ssri: ^10.0.0
1840 | checksum: 5c9fad695579b79488fa100da05777213dd9365222f85e4757630f8dd2a21a79ddd3206c78cfd6f9b37346819681782b67900ac847a57cf04190f52dda5343fd
1841 | languageName: node
1842 | linkType: hard
1843 |
1844 | "merge2@npm:^1.3.0":
1845 | version: 1.4.1
1846 | resolution: "merge2@npm:1.4.1"
1847 | checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2
1848 | languageName: node
1849 | linkType: hard
1850 |
1851 | "micromatch@npm:^4.0.4, micromatch@npm:^4.0.8":
1852 | version: 4.0.8
1853 | resolution: "micromatch@npm:4.0.8"
1854 | dependencies:
1855 | braces: ^3.0.3
1856 | picomatch: ^2.3.1
1857 | checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966
1858 | languageName: node
1859 | linkType: hard
1860 |
1861 | "minimatch@npm:^9.0.4":
1862 | version: 9.0.5
1863 | resolution: "minimatch@npm:9.0.5"
1864 | dependencies:
1865 | brace-expansion: ^2.0.1
1866 | checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28
1867 | languageName: node
1868 | linkType: hard
1869 |
1870 | "minipass-collect@npm:^2.0.1":
1871 | version: 2.0.1
1872 | resolution: "minipass-collect@npm:2.0.1"
1873 | dependencies:
1874 | minipass: ^7.0.3
1875 | checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342
1876 | languageName: node
1877 | linkType: hard
1878 |
1879 | "minipass-fetch@npm:^3.0.0":
1880 | version: 3.0.5
1881 | resolution: "minipass-fetch@npm:3.0.5"
1882 | dependencies:
1883 | encoding: ^0.1.13
1884 | minipass: ^7.0.3
1885 | minipass-sized: ^1.0.3
1886 | minizlib: ^2.1.2
1887 | dependenciesMeta:
1888 | encoding:
1889 | optional: true
1890 | checksum: 8047d273236157aab27ab7cd8eab7ea79e6ecd63e8f80c3366ec076cb9a0fed550a6935bab51764369027c414647fd8256c2a20c5445fb250c483de43350de83
1891 | languageName: node
1892 | linkType: hard
1893 |
1894 | "minipass-flush@npm:^1.0.5":
1895 | version: 1.0.5
1896 | resolution: "minipass-flush@npm:1.0.5"
1897 | dependencies:
1898 | minipass: ^3.0.0
1899 | checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf
1900 | languageName: node
1901 | linkType: hard
1902 |
1903 | "minipass-pipeline@npm:^1.2.4":
1904 | version: 1.2.4
1905 | resolution: "minipass-pipeline@npm:1.2.4"
1906 | dependencies:
1907 | minipass: ^3.0.0
1908 | checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b
1909 | languageName: node
1910 | linkType: hard
1911 |
1912 | "minipass-sized@npm:^1.0.3":
1913 | version: 1.0.3
1914 | resolution: "minipass-sized@npm:1.0.3"
1915 | dependencies:
1916 | minipass: ^3.0.0
1917 | checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60
1918 | languageName: node
1919 | linkType: hard
1920 |
1921 | "minipass@npm:^3.0.0":
1922 | version: 3.3.6
1923 | resolution: "minipass@npm:3.3.6"
1924 | dependencies:
1925 | yallist: ^4.0.0
1926 | checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48
1927 | languageName: node
1928 | linkType: hard
1929 |
1930 | "minipass@npm:^5.0.0":
1931 | version: 5.0.0
1932 | resolution: "minipass@npm:5.0.0"
1933 | checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea
1934 | languageName: node
1935 | linkType: hard
1936 |
1937 | "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2":
1938 | version: 7.1.2
1939 | resolution: "minipass@npm:7.1.2"
1940 | checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3
1941 | languageName: node
1942 | linkType: hard
1943 |
1944 | "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2":
1945 | version: 2.1.2
1946 | resolution: "minizlib@npm:2.1.2"
1947 | dependencies:
1948 | minipass: ^3.0.0
1949 | yallist: ^4.0.0
1950 | checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3
1951 | languageName: node
1952 | linkType: hard
1953 |
1954 | "mkdirp@npm:^1.0.3":
1955 | version: 1.0.4
1956 | resolution: "mkdirp@npm:1.0.4"
1957 | bin:
1958 | mkdirp: bin/cmd.js
1959 | checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f
1960 | languageName: node
1961 | linkType: hard
1962 |
1963 | "motion-dom@npm:^11.14.1":
1964 | version: 11.14.1
1965 | resolution: "motion-dom@npm:11.14.1"
1966 | checksum: 5b0f88b6ffa1b8d299b98879594d9b3c723e9c19c8ed36c115fa09bfe7c8ee01c53116c914589dade4a4f9d3e0bc5843775f0f6ff0dac2c7cb6705ffd3a33b8b
1967 | languageName: node
1968 | linkType: hard
1969 |
1970 | "motion-utils@npm:^11.14.1":
1971 | version: 11.14.1
1972 | resolution: "motion-utils@npm:11.14.1"
1973 | checksum: 0ac4cfc12761a0ceec85cc3d0fb99de269914c82cb2eaa7735deef22ecddfbd2a1bb206a66ffe997c530f818e2517419f3b69b3e1c14478384cb54e50b4a6331
1974 | languageName: node
1975 | linkType: hard
1976 |
1977 | "ms@npm:^2.1.3":
1978 | version: 2.1.3
1979 | resolution: "ms@npm:2.1.3"
1980 | checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d
1981 | languageName: node
1982 | linkType: hard
1983 |
1984 | "mz@npm:^2.7.0":
1985 | version: 2.7.0
1986 | resolution: "mz@npm:2.7.0"
1987 | dependencies:
1988 | any-promise: ^1.0.0
1989 | object-assign: ^4.0.1
1990 | thenify-all: ^1.0.0
1991 | checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87
1992 | languageName: node
1993 | linkType: hard
1994 |
1995 | "nanoid@npm:^3.3.7":
1996 | version: 3.3.7
1997 | resolution: "nanoid@npm:3.3.7"
1998 | bin:
1999 | nanoid: bin/nanoid.cjs
2000 | checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2
2001 | languageName: node
2002 | linkType: hard
2003 |
2004 | "negotiator@npm:^0.6.3":
2005 | version: 0.6.4
2006 | resolution: "negotiator@npm:0.6.4"
2007 | checksum: 7ded10aa02a0707d1d12a9973fdb5954f98547ca7beb60e31cb3a403cc6e8f11138db7a3b0128425cf836fc85d145ec4ce983b2bdf83dca436af879c2d683510
2008 | languageName: node
2009 | linkType: hard
2010 |
2011 | "node-gyp@npm:latest":
2012 | version: 10.2.0
2013 | resolution: "node-gyp@npm:10.2.0"
2014 | dependencies:
2015 | env-paths: ^2.2.0
2016 | exponential-backoff: ^3.1.1
2017 | glob: ^10.3.10
2018 | graceful-fs: ^4.2.6
2019 | make-fetch-happen: ^13.0.0
2020 | nopt: ^7.0.0
2021 | proc-log: ^4.1.0
2022 | semver: ^7.3.5
2023 | tar: ^6.2.1
2024 | which: ^4.0.0
2025 | bin:
2026 | node-gyp: bin/node-gyp.js
2027 | checksum: 0233759d8c19765f7fdc259a35eb046ad86c3d09e22f7384613ae2b89647dd27fcf833fdf5293d9335041e91f9b1c539494225959cdb312a5c8080b7534b926f
2028 | languageName: node
2029 | linkType: hard
2030 |
2031 | "node-releases@npm:^2.0.18":
2032 | version: 2.0.18
2033 | resolution: "node-releases@npm:2.0.18"
2034 | checksum: ef55a3d853e1269a6d6279b7692cd6ff3e40bc74947945101138745bfdc9a5edabfe72cb19a31a8e45752e1910c4c65c77d931866af6357f242b172b7283f5b3
2035 | languageName: node
2036 | linkType: hard
2037 |
2038 | "nopt@npm:^7.0.0":
2039 | version: 7.2.1
2040 | resolution: "nopt@npm:7.2.1"
2041 | dependencies:
2042 | abbrev: ^2.0.0
2043 | bin:
2044 | nopt: bin/nopt.js
2045 | checksum: 6fa729cc77ce4162cfad8abbc9ba31d4a0ff6850c3af61d59b505653bef4781ec059f8890ecfe93ee8aa0c511093369cca88bfc998101616a2904e715bbbb7c9
2046 | languageName: node
2047 | linkType: hard
2048 |
2049 | "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0":
2050 | version: 3.0.0
2051 | resolution: "normalize-path@npm:3.0.0"
2052 | checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20
2053 | languageName: node
2054 | linkType: hard
2055 |
2056 | "normalize-range@npm:^0.1.2":
2057 | version: 0.1.2
2058 | resolution: "normalize-range@npm:0.1.2"
2059 | checksum: 9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184
2060 | languageName: node
2061 | linkType: hard
2062 |
2063 | "object-assign@npm:^4.0.1":
2064 | version: 4.1.1
2065 | resolution: "object-assign@npm:4.1.1"
2066 | checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f
2067 | languageName: node
2068 | linkType: hard
2069 |
2070 | "object-hash@npm:^3.0.0":
2071 | version: 3.0.0
2072 | resolution: "object-hash@npm:3.0.0"
2073 | checksum: 80b4904bb3857c52cc1bfd0b52c0352532ca12ed3b8a6ff06a90cd209dfda1b95cee059a7625eb9da29537027f68ac4619363491eedb2f5d3dddbba97494fd6c
2074 | languageName: node
2075 | linkType: hard
2076 |
2077 | "p-map@npm:^4.0.0":
2078 | version: 4.0.0
2079 | resolution: "p-map@npm:4.0.0"
2080 | dependencies:
2081 | aggregate-error: ^3.0.0
2082 | checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c
2083 | languageName: node
2084 | linkType: hard
2085 |
2086 | "package-json-from-dist@npm:^1.0.0":
2087 | version: 1.0.1
2088 | resolution: "package-json-from-dist@npm:1.0.1"
2089 | checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602
2090 | languageName: node
2091 | linkType: hard
2092 |
2093 | "parse-entities@npm:^2.0.0":
2094 | version: 2.0.0
2095 | resolution: "parse-entities@npm:2.0.0"
2096 | dependencies:
2097 | character-entities: ^1.0.0
2098 | character-entities-legacy: ^1.0.0
2099 | character-reference-invalid: ^1.0.0
2100 | is-alphanumerical: ^1.0.0
2101 | is-decimal: ^1.0.0
2102 | is-hexadecimal: ^1.0.0
2103 | checksum: 7addfd3e7d747521afac33c8121a5f23043c6973809756920d37e806639b4898385d386fcf4b3c8e2ecf1bc28aac5ae97df0b112d5042034efbe80f44081ebce
2104 | languageName: node
2105 | linkType: hard
2106 |
2107 | "path-key@npm:^3.1.0":
2108 | version: 3.1.1
2109 | resolution: "path-key@npm:3.1.1"
2110 | checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020
2111 | languageName: node
2112 | linkType: hard
2113 |
2114 | "path-parse@npm:^1.0.7":
2115 | version: 1.0.7
2116 | resolution: "path-parse@npm:1.0.7"
2117 | checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a
2118 | languageName: node
2119 | linkType: hard
2120 |
2121 | "path-scurry@npm:^1.11.1":
2122 | version: 1.11.1
2123 | resolution: "path-scurry@npm:1.11.1"
2124 | dependencies:
2125 | lru-cache: ^10.2.0
2126 | minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
2127 | checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023
2128 | languageName: node
2129 | linkType: hard
2130 |
2131 | "picocolors@npm:^1.0.0, picocolors@npm:^1.0.1, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1":
2132 | version: 1.1.1
2133 | resolution: "picocolors@npm:1.1.1"
2134 | checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045
2135 | languageName: node
2136 | linkType: hard
2137 |
2138 | "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1":
2139 | version: 2.3.1
2140 | resolution: "picomatch@npm:2.3.1"
2141 | checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf
2142 | languageName: node
2143 | linkType: hard
2144 |
2145 | "pify@npm:^2.3.0":
2146 | version: 2.3.0
2147 | resolution: "pify@npm:2.3.0"
2148 | checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba
2149 | languageName: node
2150 | linkType: hard
2151 |
2152 | "pirates@npm:^4.0.1":
2153 | version: 4.0.6
2154 | resolution: "pirates@npm:4.0.6"
2155 | checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6
2156 | languageName: node
2157 | linkType: hard
2158 |
2159 | "postcss-import@npm:^15.1.0":
2160 | version: 15.1.0
2161 | resolution: "postcss-import@npm:15.1.0"
2162 | dependencies:
2163 | postcss-value-parser: ^4.0.0
2164 | read-cache: ^1.0.0
2165 | resolve: ^1.1.7
2166 | peerDependencies:
2167 | postcss: ^8.0.0
2168 | checksum: 7bd04bd8f0235429009d0022cbf00faebc885de1d017f6d12ccb1b021265882efc9302006ba700af6cab24c46bfa2f3bc590be3f9aee89d064944f171b04e2a3
2169 | languageName: node
2170 | linkType: hard
2171 |
2172 | "postcss-js@npm:^4.0.1":
2173 | version: 4.0.1
2174 | resolution: "postcss-js@npm:4.0.1"
2175 | dependencies:
2176 | camelcase-css: ^2.0.1
2177 | peerDependencies:
2178 | postcss: ^8.4.21
2179 | checksum: 5c1e83efeabeb5a42676193f4357aa9c88f4dc1b3c4a0332c132fe88932b33ea58848186db117cf473049fc233a980356f67db490bd0a7832ccba9d0b3fd3491
2180 | languageName: node
2181 | linkType: hard
2182 |
2183 | "postcss-load-config@npm:^4.0.2":
2184 | version: 4.0.2
2185 | resolution: "postcss-load-config@npm:4.0.2"
2186 | dependencies:
2187 | lilconfig: ^3.0.0
2188 | yaml: ^2.3.4
2189 | peerDependencies:
2190 | postcss: ">=8.0.9"
2191 | ts-node: ">=9.0.0"
2192 | peerDependenciesMeta:
2193 | postcss:
2194 | optional: true
2195 | ts-node:
2196 | optional: true
2197 | checksum: 7c27dd3801db4eae207a5116fed2db6b1ebb780b40c3dd62a3e57e087093a8e6a14ee17ada729fee903152d6ef4826c6339eb135bee6208e0f3140d7e8090185
2198 | languageName: node
2199 | linkType: hard
2200 |
2201 | "postcss-nested@npm:^6.2.0":
2202 | version: 6.2.0
2203 | resolution: "postcss-nested@npm:6.2.0"
2204 | dependencies:
2205 | postcss-selector-parser: ^6.1.1
2206 | peerDependencies:
2207 | postcss: ^8.2.14
2208 | checksum: 2c86ecf2d0ce68f27c87c7e24ae22dc6dd5515a89fcaf372b2627906e11f5c1f36e4a09e4c15c20fd4a23d628b3d945c35839f44496fbee9a25866258006671b
2209 | languageName: node
2210 | linkType: hard
2211 |
2212 | "postcss-selector-parser@npm:^6.1.1, postcss-selector-parser@npm:^6.1.2":
2213 | version: 6.1.2
2214 | resolution: "postcss-selector-parser@npm:6.1.2"
2215 | dependencies:
2216 | cssesc: ^3.0.0
2217 | util-deprecate: ^1.0.2
2218 | checksum: ce9440fc42a5419d103f4c7c1847cb75488f3ac9cbe81093b408ee9701193a509f664b4d10a2b4d82c694ee7495e022f8f482d254f92b7ffd9ed9dea696c6f84
2219 | languageName: node
2220 | linkType: hard
2221 |
2222 | "postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.2.0":
2223 | version: 4.2.0
2224 | resolution: "postcss-value-parser@npm:4.2.0"
2225 | checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f
2226 | languageName: node
2227 | linkType: hard
2228 |
2229 | "postcss@npm:^8.4.47, postcss@npm:^8.4.49":
2230 | version: 8.4.49
2231 | resolution: "postcss@npm:8.4.49"
2232 | dependencies:
2233 | nanoid: ^3.3.7
2234 | picocolors: ^1.1.1
2235 | source-map-js: ^1.2.1
2236 | checksum: eb5d6cbdca24f50399aafa5d2bea489e4caee4c563ea1edd5a2485bc5f84e9ceef3febf170272bc83a99c31d23a316ad179213e853f34c2a7a8ffa534559d63a
2237 | languageName: node
2238 | linkType: hard
2239 |
2240 | "prismjs@npm:^1.27.0":
2241 | version: 1.29.0
2242 | resolution: "prismjs@npm:1.29.0"
2243 | checksum: 007a8869d4456ff8049dc59404e32d5666a07d99c3b0e30a18bd3b7676dfa07d1daae9d0f407f20983865fd8da56de91d09cb08e6aa61f5bc420a27c0beeaf93
2244 | languageName: node
2245 | linkType: hard
2246 |
2247 | "prismjs@npm:~1.27.0":
2248 | version: 1.27.0
2249 | resolution: "prismjs@npm:1.27.0"
2250 | checksum: 85c7f4a3e999073502cc9e1882af01e3709706369ec254b60bff1149eda701f40d02512acab956012dc7e61cfd61743a3a34c1bd0737e8dbacd79141e5698bbc
2251 | languageName: node
2252 | linkType: hard
2253 |
2254 | "proc-log@npm:^4.1.0, proc-log@npm:^4.2.0":
2255 | version: 4.2.0
2256 | resolution: "proc-log@npm:4.2.0"
2257 | checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc
2258 | languageName: node
2259 | linkType: hard
2260 |
2261 | "promise-retry@npm:^2.0.1":
2262 | version: 2.0.1
2263 | resolution: "promise-retry@npm:2.0.1"
2264 | dependencies:
2265 | err-code: ^2.0.2
2266 | retry: ^0.12.0
2267 | checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429
2268 | languageName: node
2269 | linkType: hard
2270 |
2271 | "property-information@npm:^5.0.0":
2272 | version: 5.6.0
2273 | resolution: "property-information@npm:5.6.0"
2274 | dependencies:
2275 | xtend: ^4.0.0
2276 | checksum: fcf87c6542e59a8bbe31ca0b3255a4a63ac1059b01b04469680288998bcfa97f341ca989566adbb63975f4d85339030b82320c324a511532d390910d1c583893
2277 | languageName: node
2278 | linkType: hard
2279 |
2280 | "queue-microtask@npm:^1.2.2":
2281 | version: 1.2.3
2282 | resolution: "queue-microtask@npm:1.2.3"
2283 | checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4
2284 | languageName: node
2285 | linkType: hard
2286 |
2287 | "react-dom@npm:^18.2.0":
2288 | version: 18.3.1
2289 | resolution: "react-dom@npm:18.3.1"
2290 | dependencies:
2291 | loose-envify: ^1.1.0
2292 | scheduler: ^0.23.2
2293 | peerDependencies:
2294 | react: ^18.3.1
2295 | checksum: 298954ecd8f78288dcaece05e88b570014d8f6dce5db6f66e6ee91448debeb59dcd31561dddb354eee47e6c1bb234669459060deb238ed0213497146e555a0b9
2296 | languageName: node
2297 | linkType: hard
2298 |
2299 | "react-icons@npm:^5.4.0":
2300 | version: 5.4.0
2301 | resolution: "react-icons@npm:5.4.0"
2302 | peerDependencies:
2303 | react: "*"
2304 | checksum: 6ee5fcda49d9628e33d97e955ed6ec9f30b26226a13b14d0f3f9a698d0d5dd2e3878af7de295e0241bdd8f46af96f16bfea1fd0647beddc447c1de98bdb2178e
2305 | languageName: node
2306 | linkType: hard
2307 |
2308 | "react-refresh@npm:^0.14.2":
2309 | version: 0.14.2
2310 | resolution: "react-refresh@npm:0.14.2"
2311 | checksum: d80db4bd40a36dab79010dc8aa317a5b931f960c0d83c4f3b81f0552cbcf7f29e115b84bb7908ec6a1eb67720fff7023084eff73ece8a7ddc694882478464382
2312 | languageName: node
2313 | linkType: hard
2314 |
2315 | "react-syntax-highlighter@npm:^15.6.1":
2316 | version: 15.6.1
2317 | resolution: "react-syntax-highlighter@npm:15.6.1"
2318 | dependencies:
2319 | "@babel/runtime": ^7.3.1
2320 | highlight.js: ^10.4.1
2321 | highlightjs-vue: ^1.0.0
2322 | lowlight: ^1.17.0
2323 | prismjs: ^1.27.0
2324 | refractor: ^3.6.0
2325 | peerDependencies:
2326 | react: ">= 0.14.0"
2327 | checksum: 417b6f1f2e0c1e00dcc12d34da457b94c7419345306a951d0a8d2d031a0c964179d6b700137870ad1397572cbc3a4454e94de7bbef914a81674edae2098f02dc
2328 | languageName: node
2329 | linkType: hard
2330 |
2331 | "react18-json-view@npm:^0.2.8":
2332 | version: 0.2.8
2333 | resolution: "react18-json-view@npm:0.2.8"
2334 | peerDependencies:
2335 | react: ">=16.8.0"
2336 | checksum: e306920db55d246dd021c537cf40acaa6783de7821afed101467756d9099b028d01ea4358d23d01d4961e0c9a4cb43acf391ddabe5150775a56c218063a96df4
2337 | languageName: node
2338 | linkType: hard
2339 |
2340 | "react@npm:^18.2.0":
2341 | version: 18.3.1
2342 | resolution: "react@npm:18.3.1"
2343 | dependencies:
2344 | loose-envify: ^1.1.0
2345 | checksum: a27bcfa8ff7c15a1e50244ad0d0c1cb2ad4375eeffefd266a64889beea6f6b64c4966c9b37d14ee32d6c9fcd5aa6ba183b6988167ab4d127d13e7cb5b386a376
2346 | languageName: node
2347 | linkType: hard
2348 |
2349 | "read-cache@npm:^1.0.0":
2350 | version: 1.0.0
2351 | resolution: "read-cache@npm:1.0.0"
2352 | dependencies:
2353 | pify: ^2.3.0
2354 | checksum: cffc728b9ede1e0667399903f9ecaf3789888b041c46ca53382fa3a06303e5132774dc0a96d0c16aa702dbac1ea0833d5a868d414f5ab2af1e1438e19e6657c6
2355 | languageName: node
2356 | linkType: hard
2357 |
2358 | "readdirp@npm:~3.6.0":
2359 | version: 3.6.0
2360 | resolution: "readdirp@npm:3.6.0"
2361 | dependencies:
2362 | picomatch: ^2.2.1
2363 | checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320
2364 | languageName: node
2365 | linkType: hard
2366 |
2367 | "refractor@npm:^3.6.0":
2368 | version: 3.6.0
2369 | resolution: "refractor@npm:3.6.0"
2370 | dependencies:
2371 | hastscript: ^6.0.0
2372 | parse-entities: ^2.0.0
2373 | prismjs: ~1.27.0
2374 | checksum: 39b01c4168c77c5c8486f9bf8907bbb05f257f15026057ba5728535815a2d90eed620468a4bfbb2b8ceefbb3ce3931a1be8b17152dbdbc8b0eef92450ff750a2
2375 | languageName: node
2376 | linkType: hard
2377 |
2378 | "regenerator-runtime@npm:^0.14.0":
2379 | version: 0.14.1
2380 | resolution: "regenerator-runtime@npm:0.14.1"
2381 | checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38
2382 | languageName: node
2383 | linkType: hard
2384 |
2385 | "resolve@npm:^1.1.7, resolve@npm:^1.22.8":
2386 | version: 1.22.8
2387 | resolution: "resolve@npm:1.22.8"
2388 | dependencies:
2389 | is-core-module: ^2.13.0
2390 | path-parse: ^1.0.7
2391 | supports-preserve-symlinks-flag: ^1.0.0
2392 | bin:
2393 | resolve: bin/resolve
2394 | checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c
2395 | languageName: node
2396 | linkType: hard
2397 |
2398 | "resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.22.8#~builtin":
2399 | version: 1.22.8
2400 | resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d"
2401 | dependencies:
2402 | is-core-module: ^2.13.0
2403 | path-parse: ^1.0.7
2404 | supports-preserve-symlinks-flag: ^1.0.0
2405 | bin:
2406 | resolve: bin/resolve
2407 | checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847
2408 | languageName: node
2409 | linkType: hard
2410 |
2411 | "retry@npm:^0.12.0":
2412 | version: 0.12.0
2413 | resolution: "retry@npm:0.12.0"
2414 | checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c
2415 | languageName: node
2416 | linkType: hard
2417 |
2418 | "reusify@npm:^1.0.4":
2419 | version: 1.0.4
2420 | resolution: "reusify@npm:1.0.4"
2421 | checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc
2422 | languageName: node
2423 | linkType: hard
2424 |
2425 | "rollup@npm:^4.23.0":
2426 | version: 4.28.0
2427 | resolution: "rollup@npm:4.28.0"
2428 | dependencies:
2429 | "@rollup/rollup-android-arm-eabi": 4.28.0
2430 | "@rollup/rollup-android-arm64": 4.28.0
2431 | "@rollup/rollup-darwin-arm64": 4.28.0
2432 | "@rollup/rollup-darwin-x64": 4.28.0
2433 | "@rollup/rollup-freebsd-arm64": 4.28.0
2434 | "@rollup/rollup-freebsd-x64": 4.28.0
2435 | "@rollup/rollup-linux-arm-gnueabihf": 4.28.0
2436 | "@rollup/rollup-linux-arm-musleabihf": 4.28.0
2437 | "@rollup/rollup-linux-arm64-gnu": 4.28.0
2438 | "@rollup/rollup-linux-arm64-musl": 4.28.0
2439 | "@rollup/rollup-linux-powerpc64le-gnu": 4.28.0
2440 | "@rollup/rollup-linux-riscv64-gnu": 4.28.0
2441 | "@rollup/rollup-linux-s390x-gnu": 4.28.0
2442 | "@rollup/rollup-linux-x64-gnu": 4.28.0
2443 | "@rollup/rollup-linux-x64-musl": 4.28.0
2444 | "@rollup/rollup-win32-arm64-msvc": 4.28.0
2445 | "@rollup/rollup-win32-ia32-msvc": 4.28.0
2446 | "@rollup/rollup-win32-x64-msvc": 4.28.0
2447 | "@types/estree": 1.0.6
2448 | fsevents: ~2.3.2
2449 | dependenciesMeta:
2450 | "@rollup/rollup-android-arm-eabi":
2451 | optional: true
2452 | "@rollup/rollup-android-arm64":
2453 | optional: true
2454 | "@rollup/rollup-darwin-arm64":
2455 | optional: true
2456 | "@rollup/rollup-darwin-x64":
2457 | optional: true
2458 | "@rollup/rollup-freebsd-arm64":
2459 | optional: true
2460 | "@rollup/rollup-freebsd-x64":
2461 | optional: true
2462 | "@rollup/rollup-linux-arm-gnueabihf":
2463 | optional: true
2464 | "@rollup/rollup-linux-arm-musleabihf":
2465 | optional: true
2466 | "@rollup/rollup-linux-arm64-gnu":
2467 | optional: true
2468 | "@rollup/rollup-linux-arm64-musl":
2469 | optional: true
2470 | "@rollup/rollup-linux-powerpc64le-gnu":
2471 | optional: true
2472 | "@rollup/rollup-linux-riscv64-gnu":
2473 | optional: true
2474 | "@rollup/rollup-linux-s390x-gnu":
2475 | optional: true
2476 | "@rollup/rollup-linux-x64-gnu":
2477 | optional: true
2478 | "@rollup/rollup-linux-x64-musl":
2479 | optional: true
2480 | "@rollup/rollup-win32-arm64-msvc":
2481 | optional: true
2482 | "@rollup/rollup-win32-ia32-msvc":
2483 | optional: true
2484 | "@rollup/rollup-win32-x64-msvc":
2485 | optional: true
2486 | fsevents:
2487 | optional: true
2488 | bin:
2489 | rollup: dist/bin/rollup
2490 | checksum: 77919b29dd4b54ce5e131aa61f03d8bb7955b332970941914d9c8bd7afd70f8189dc463eb8a357355abcc1bc7add809ec75280d50144817e47cd9e87005bd8ac
2491 | languageName: node
2492 | linkType: hard
2493 |
2494 | "run-parallel@npm:^1.1.9":
2495 | version: 1.2.0
2496 | resolution: "run-parallel@npm:1.2.0"
2497 | dependencies:
2498 | queue-microtask: ^1.2.2
2499 | checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d
2500 | languageName: node
2501 | linkType: hard
2502 |
2503 | "safer-buffer@npm:>= 2.1.2 < 3.0.0":
2504 | version: 2.1.2
2505 | resolution: "safer-buffer@npm:2.1.2"
2506 | checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0
2507 | languageName: node
2508 | linkType: hard
2509 |
2510 | "scheduler@npm:^0.23.2":
2511 | version: 0.23.2
2512 | resolution: "scheduler@npm:0.23.2"
2513 | dependencies:
2514 | loose-envify: ^1.1.0
2515 | checksum: 3e82d1f419e240ef6219d794ff29c7ee415fbdc19e038f680a10c067108e06284f1847450a210b29bbaf97b9d8a97ced5f624c31c681248ac84c80d56ad5a2c4
2516 | languageName: node
2517 | linkType: hard
2518 |
2519 | "semver@npm:^6.3.1":
2520 | version: 6.3.1
2521 | resolution: "semver@npm:6.3.1"
2522 | bin:
2523 | semver: bin/semver.js
2524 | checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2
2525 | languageName: node
2526 | linkType: hard
2527 |
2528 | "semver@npm:^7.3.5":
2529 | version: 7.6.3
2530 | resolution: "semver@npm:7.6.3"
2531 | bin:
2532 | semver: bin/semver.js
2533 | checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8
2534 | languageName: node
2535 | linkType: hard
2536 |
2537 | "shebang-command@npm:^2.0.0":
2538 | version: 2.0.0
2539 | resolution: "shebang-command@npm:2.0.0"
2540 | dependencies:
2541 | shebang-regex: ^3.0.0
2542 | checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa
2543 | languageName: node
2544 | linkType: hard
2545 |
2546 | "shebang-regex@npm:^3.0.0":
2547 | version: 3.0.0
2548 | resolution: "shebang-regex@npm:3.0.0"
2549 | checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222
2550 | languageName: node
2551 | linkType: hard
2552 |
2553 | "signal-exit@npm:^4.0.1":
2554 | version: 4.1.0
2555 | resolution: "signal-exit@npm:4.1.0"
2556 | checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549
2557 | languageName: node
2558 | linkType: hard
2559 |
2560 | "smart-buffer@npm:^4.2.0":
2561 | version: 4.2.0
2562 | resolution: "smart-buffer@npm:4.2.0"
2563 | checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b
2564 | languageName: node
2565 | linkType: hard
2566 |
2567 | "socks-proxy-agent@npm:^8.0.3":
2568 | version: 8.0.4
2569 | resolution: "socks-proxy-agent@npm:8.0.4"
2570 | dependencies:
2571 | agent-base: ^7.1.1
2572 | debug: ^4.3.4
2573 | socks: ^2.8.3
2574 | checksum: b2ec5051d85fe49072f9a250c427e0e9571fd09d5db133819192d078fd291276e1f0f50f6dbc04329b207738b1071314cee8bdbb4b12e27de42dbcf1d4233c67
2575 | languageName: node
2576 | linkType: hard
2577 |
2578 | "socks@npm:^2.8.3":
2579 | version: 2.8.3
2580 | resolution: "socks@npm:2.8.3"
2581 | dependencies:
2582 | ip-address: ^9.0.5
2583 | smart-buffer: ^4.2.0
2584 | checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd
2585 | languageName: node
2586 | linkType: hard
2587 |
2588 | "source-map-js@npm:^1.2.1":
2589 | version: 1.2.1
2590 | resolution: "source-map-js@npm:1.2.1"
2591 | checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b
2592 | languageName: node
2593 | linkType: hard
2594 |
2595 | "space-separated-tokens@npm:^1.0.0":
2596 | version: 1.1.5
2597 | resolution: "space-separated-tokens@npm:1.1.5"
2598 | checksum: 8ef68f1cfa8ccad316b7f8d0df0919d0f1f6d32101e8faeee34ea3a923ce8509c1ad562f57388585ee4951e92d27afa211ed0a077d3d5995b5ba9180331be708
2599 | languageName: node
2600 | linkType: hard
2601 |
2602 | "sprintf-js@npm:^1.1.3":
2603 | version: 1.1.3
2604 | resolution: "sprintf-js@npm:1.1.3"
2605 | checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0
2606 | languageName: node
2607 | linkType: hard
2608 |
2609 | "ssri@npm:^10.0.0":
2610 | version: 10.0.6
2611 | resolution: "ssri@npm:10.0.6"
2612 | dependencies:
2613 | minipass: ^7.0.3
2614 | checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299
2615 | languageName: node
2616 | linkType: hard
2617 |
2618 | "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0":
2619 | version: 4.2.3
2620 | resolution: "string-width@npm:4.2.3"
2621 | dependencies:
2622 | emoji-regex: ^8.0.0
2623 | is-fullwidth-code-point: ^3.0.0
2624 | strip-ansi: ^6.0.1
2625 | checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb
2626 | languageName: node
2627 | linkType: hard
2628 |
2629 | "string-width@npm:^5.0.1, string-width@npm:^5.1.2":
2630 | version: 5.1.2
2631 | resolution: "string-width@npm:5.1.2"
2632 | dependencies:
2633 | eastasianwidth: ^0.2.0
2634 | emoji-regex: ^9.2.2
2635 | strip-ansi: ^7.0.1
2636 | checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193
2637 | languageName: node
2638 | linkType: hard
2639 |
2640 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
2641 | version: 6.0.1
2642 | resolution: "strip-ansi@npm:6.0.1"
2643 | dependencies:
2644 | ansi-regex: ^5.0.1
2645 | checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c
2646 | languageName: node
2647 | linkType: hard
2648 |
2649 | "strip-ansi@npm:^7.0.1":
2650 | version: 7.1.0
2651 | resolution: "strip-ansi@npm:7.1.0"
2652 | dependencies:
2653 | ansi-regex: ^6.0.1
2654 | checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d
2655 | languageName: node
2656 | linkType: hard
2657 |
2658 | "sucrase@npm:^3.35.0":
2659 | version: 3.35.0
2660 | resolution: "sucrase@npm:3.35.0"
2661 | dependencies:
2662 | "@jridgewell/gen-mapping": ^0.3.2
2663 | commander: ^4.0.0
2664 | glob: ^10.3.10
2665 | lines-and-columns: ^1.1.6
2666 | mz: ^2.7.0
2667 | pirates: ^4.0.1
2668 | ts-interface-checker: ^0.1.9
2669 | bin:
2670 | sucrase: bin/sucrase
2671 | sucrase-node: bin/sucrase-node
2672 | checksum: 9fc5792a9ab8a14dcf9c47dcb704431d35c1cdff1d17d55d382a31c2e8e3063870ad32ce120a80915498486246d612e30cda44f1624d9d9a10423e1a43487ad1
2673 | languageName: node
2674 | linkType: hard
2675 |
2676 | "supports-preserve-symlinks-flag@npm:^1.0.0":
2677 | version: 1.0.0
2678 | resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
2679 | checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae
2680 | languageName: node
2681 | linkType: hard
2682 |
2683 | "tailwindcss@npm:^3.4.17":
2684 | version: 3.4.17
2685 | resolution: "tailwindcss@npm:3.4.17"
2686 | dependencies:
2687 | "@alloc/quick-lru": ^5.2.0
2688 | arg: ^5.0.2
2689 | chokidar: ^3.6.0
2690 | didyoumean: ^1.2.2
2691 | dlv: ^1.1.3
2692 | fast-glob: ^3.3.2
2693 | glob-parent: ^6.0.2
2694 | is-glob: ^4.0.3
2695 | jiti: ^1.21.6
2696 | lilconfig: ^3.1.3
2697 | micromatch: ^4.0.8
2698 | normalize-path: ^3.0.0
2699 | object-hash: ^3.0.0
2700 | picocolors: ^1.1.1
2701 | postcss: ^8.4.47
2702 | postcss-import: ^15.1.0
2703 | postcss-js: ^4.0.1
2704 | postcss-load-config: ^4.0.2
2705 | postcss-nested: ^6.2.0
2706 | postcss-selector-parser: ^6.1.2
2707 | resolve: ^1.22.8
2708 | sucrase: ^3.35.0
2709 | bin:
2710 | tailwind: lib/cli.js
2711 | tailwindcss: lib/cli.js
2712 | checksum: bda962f30e9a2f0567e2ee936ec863d5178958078e577ced13da60b3af779062a53a7e95f2f32b5c558f12a7477dea3ce071441a7362c6d7bf50bc9e166728a4
2713 | languageName: node
2714 | linkType: hard
2715 |
2716 | "tar@npm:^6.1.11, tar@npm:^6.2.1":
2717 | version: 6.2.1
2718 | resolution: "tar@npm:6.2.1"
2719 | dependencies:
2720 | chownr: ^2.0.0
2721 | fs-minipass: ^2.0.0
2722 | minipass: ^5.0.0
2723 | minizlib: ^2.1.1
2724 | mkdirp: ^1.0.3
2725 | yallist: ^4.0.0
2726 | checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c
2727 | languageName: node
2728 | linkType: hard
2729 |
2730 | "thenify-all@npm:^1.0.0":
2731 | version: 1.6.0
2732 | resolution: "thenify-all@npm:1.6.0"
2733 | dependencies:
2734 | thenify: ">= 3.1.0 < 4"
2735 | checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e
2736 | languageName: node
2737 | linkType: hard
2738 |
2739 | "thenify@npm:>= 3.1.0 < 4":
2740 | version: 3.3.1
2741 | resolution: "thenify@npm:3.3.1"
2742 | dependencies:
2743 | any-promise: ^1.0.0
2744 | checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e
2745 | languageName: node
2746 | linkType: hard
2747 |
2748 | "to-regex-range@npm:^5.0.1":
2749 | version: 5.0.1
2750 | resolution: "to-regex-range@npm:5.0.1"
2751 | dependencies:
2752 | is-number: ^7.0.0
2753 | checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed
2754 | languageName: node
2755 | linkType: hard
2756 |
2757 | "ts-interface-checker@npm:^0.1.9":
2758 | version: 0.1.13
2759 | resolution: "ts-interface-checker@npm:0.1.13"
2760 | checksum: 20c29189c2dd6067a8775e07823ddf8d59a33e2ffc47a1bd59a5cb28bb0121a2969a816d5e77eda2ed85b18171aa5d1c4005a6b88ae8499ec7cc49f78571cb5e
2761 | languageName: node
2762 | linkType: hard
2763 |
2764 | "tslib@npm:^2.4.0":
2765 | version: 2.8.1
2766 | resolution: "tslib@npm:2.8.1"
2767 | checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a
2768 | languageName: node
2769 | linkType: hard
2770 |
2771 | "unique-filename@npm:^3.0.0":
2772 | version: 3.0.0
2773 | resolution: "unique-filename@npm:3.0.0"
2774 | dependencies:
2775 | unique-slug: ^4.0.0
2776 | checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df
2777 | languageName: node
2778 | linkType: hard
2779 |
2780 | "unique-slug@npm:^4.0.0":
2781 | version: 4.0.0
2782 | resolution: "unique-slug@npm:4.0.0"
2783 | dependencies:
2784 | imurmurhash: ^0.1.4
2785 | checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15
2786 | languageName: node
2787 | linkType: hard
2788 |
2789 | "update-browserslist-db@npm:^1.1.1":
2790 | version: 1.1.1
2791 | resolution: "update-browserslist-db@npm:1.1.1"
2792 | dependencies:
2793 | escalade: ^3.2.0
2794 | picocolors: ^1.1.0
2795 | peerDependencies:
2796 | browserslist: ">= 4.21.0"
2797 | bin:
2798 | update-browserslist-db: cli.js
2799 | checksum: 2ea11bd2562122162c3e438d83a1f9125238c0844b6d16d366e3276d0c0acac6036822dc7df65fc5a89c699cdf9f174acf439c39bedf3f9a2f3983976e4b4c3e
2800 | languageName: node
2801 | linkType: hard
2802 |
2803 | "util-deprecate@npm:^1.0.2":
2804 | version: 1.0.2
2805 | resolution: "util-deprecate@npm:1.0.2"
2806 | checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2
2807 | languageName: node
2808 | linkType: hard
2809 |
2810 | "uuid@npm:^11.0.3":
2811 | version: 11.0.3
2812 | resolution: "uuid@npm:11.0.3"
2813 | bin:
2814 | uuid: dist/esm/bin/uuid
2815 | checksum: 646181c77e8b8df9bd07254faa703943e1c4d5ccde7d080312edf12f443f6c5750801fd9b27bf2e628594182165e6b1b880c0382538f7eca00b26622203741dc
2816 | languageName: node
2817 | linkType: hard
2818 |
2819 | "vite@npm:^6.0.3":
2820 | version: 6.0.3
2821 | resolution: "vite@npm:6.0.3"
2822 | dependencies:
2823 | esbuild: ^0.24.0
2824 | fsevents: ~2.3.3
2825 | postcss: ^8.4.49
2826 | rollup: ^4.23.0
2827 | peerDependencies:
2828 | "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0
2829 | jiti: ">=1.21.0"
2830 | less: "*"
2831 | lightningcss: ^1.21.0
2832 | sass: "*"
2833 | sass-embedded: "*"
2834 | stylus: "*"
2835 | sugarss: "*"
2836 | terser: ^5.16.0
2837 | tsx: ^4.8.1
2838 | yaml: ^2.4.2
2839 | dependenciesMeta:
2840 | fsevents:
2841 | optional: true
2842 | peerDependenciesMeta:
2843 | "@types/node":
2844 | optional: true
2845 | jiti:
2846 | optional: true
2847 | less:
2848 | optional: true
2849 | lightningcss:
2850 | optional: true
2851 | sass:
2852 | optional: true
2853 | sass-embedded:
2854 | optional: true
2855 | stylus:
2856 | optional: true
2857 | sugarss:
2858 | optional: true
2859 | terser:
2860 | optional: true
2861 | tsx:
2862 | optional: true
2863 | yaml:
2864 | optional: true
2865 | bin:
2866 | vite: bin/vite.js
2867 | checksum: b6738c1f78dbd58bc4d56cb3aba96d4fabc095c61633bbeff8778fd5ab72c4040eda2609a10d4163553b52b5481ed2f8bb6eba862798ed8b8320d60d5d29a4e6
2868 | languageName: node
2869 | linkType: hard
2870 |
2871 | "which@npm:^2.0.1":
2872 | version: 2.0.2
2873 | resolution: "which@npm:2.0.2"
2874 | dependencies:
2875 | isexe: ^2.0.0
2876 | bin:
2877 | node-which: ./bin/node-which
2878 | checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1
2879 | languageName: node
2880 | linkType: hard
2881 |
2882 | "which@npm:^4.0.0":
2883 | version: 4.0.0
2884 | resolution: "which@npm:4.0.0"
2885 | dependencies:
2886 | isexe: ^3.1.1
2887 | bin:
2888 | node-which: bin/which.js
2889 | checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651
2890 | languageName: node
2891 | linkType: hard
2892 |
2893 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
2894 | version: 7.0.0
2895 | resolution: "wrap-ansi@npm:7.0.0"
2896 | dependencies:
2897 | ansi-styles: ^4.0.0
2898 | string-width: ^4.1.0
2899 | strip-ansi: ^6.0.0
2900 | checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b
2901 | languageName: node
2902 | linkType: hard
2903 |
2904 | "wrap-ansi@npm:^8.1.0":
2905 | version: 8.1.0
2906 | resolution: "wrap-ansi@npm:8.1.0"
2907 | dependencies:
2908 | ansi-styles: ^6.1.0
2909 | string-width: ^5.0.1
2910 | strip-ansi: ^7.0.1
2911 | checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238
2912 | languageName: node
2913 | linkType: hard
2914 |
2915 | "xray@workspace:.":
2916 | version: 0.0.0-use.local
2917 | resolution: "xray@workspace:."
2918 | dependencies:
2919 | "@tauri-apps/api": ^2.1.1
2920 | "@tauri-apps/cli": ^2.1.0
2921 | "@tauri-apps/plugin-shell": ~2
2922 | "@vitejs/plugin-react": ^4.3.4
2923 | autoprefixer: ^10.4.20
2924 | dexie: ^4.0.10
2925 | dexie-react-hooks: ^1.1.7
2926 | framer-motion: ^11.14.1
2927 | postcss: ^8.4.49
2928 | react: ^18.2.0
2929 | react-dom: ^18.2.0
2930 | react-icons: ^5.4.0
2931 | react-syntax-highlighter: ^15.6.1
2932 | react18-json-view: ^0.2.8
2933 | tailwindcss: ^3.4.17
2934 | uuid: ^11.0.3
2935 | vite: ^6.0.3
2936 | languageName: unknown
2937 | linkType: soft
2938 |
2939 | "xtend@npm:^4.0.0":
2940 | version: 4.0.2
2941 | resolution: "xtend@npm:4.0.2"
2942 | checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a
2943 | languageName: node
2944 | linkType: hard
2945 |
2946 | "yallist@npm:^3.0.2":
2947 | version: 3.1.1
2948 | resolution: "yallist@npm:3.1.1"
2949 | checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d
2950 | languageName: node
2951 | linkType: hard
2952 |
2953 | "yallist@npm:^4.0.0":
2954 | version: 4.0.0
2955 | resolution: "yallist@npm:4.0.0"
2956 | checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5
2957 | languageName: node
2958 | linkType: hard
2959 |
2960 | "yaml@npm:^2.3.4":
2961 | version: 2.6.1
2962 | resolution: "yaml@npm:2.6.1"
2963 | bin:
2964 | yaml: bin.mjs
2965 | checksum: 5cf2627f121dcf04ccdebce8e6cbac7c9983d465c4eab314f6fbdc13cda8a07f4e8f9c2252a382b30bcabe05ee3c683647293afd52eb37cbcefbdc7b6ebde9ee
2966 | languageName: node
2967 | linkType: hard
2968 |
--------------------------------------------------------------------------------