From 8ec22b217710758a06bc4cc4c36e926f3ea02411 Mon Sep 17 00:00:00 2001
From: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Date: Wed, 5 Nov 2025 10:36:16 -0600
Subject: [PATCH] v1.8.0 (#429)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Dev 1.8.0 (#399)
* Feature request: Add delete confirmation dialog to file manager (#344)
* Feature request: Add delete confirmation dialog to file manager
- Added confirmation dialog before deleting files/folders
- Users must confirm deletion with a warning message
- Works for both Delete key and right-click delete
- Shows different messages for single file, folder, or multiple items
- Includes permanent deletion warning
- Follows existing design patterns using confirmWithToast
* Adds confirmation for deletion of items including folders
Updates the file deletion confirmation logic to distinguish between
deleting multiple items with or without folders. Introduces a new
translation string for a clearer user prompt when folders and their
contents are included in the deletion.
Improves clarity and reduces user error when performing bulk deletions.
* feat: Add Chinese translations for delete confirmation messages
* Adds camelCase support for encrypted field mappings (#342)
Extends encrypted field mappings to include camelCase variants
to support consistency and compatibility with different naming
conventions. Updates reverse mappings for Drizzle ORM to allow
conversion between camelCase and snake_case field names.
Improves integration with systems using mixed naming styles.
* Run code cleanup, add sidebar persistence, fix OIDC credentials, force SSH password.
* Fix snake case mismatching
* Add real client IP
* Fix OIDC credential persistence issue
The issue was that OIDC users were getting a new random Data Encryption Key (DEK)
on every login, which made previously encrypted credentials inaccessible.
Changes:
- Modified setupOIDCUserEncryption() to persist the DEK encrypted with a system-derived key
- Updated authenticateOIDCUser() to properly retrieve and use the persisted DEK
- Ensured OIDC users now have the same encryption persistence as password-based users
This fix ensures that credentials created by OIDC users remain accessible across
multiple login sessions.
* Fix race condition and remove redundant kekSalt for OIDC users
Critical fixes:
1. Race Condition Mitigation:
- Added read-after-write verification in setupOIDCUserEncryption()
- Ensures session uses the DEK that's actually in the database
- Prevents data loss when concurrent logins occur for new OIDC users
- If race is detected, discards generated DEK and uses stored one
2. Remove Redundant kekSalt Logic:
- Removed unnecessary kekSalt generation and checks for OIDC users
- kekSalt is not used in OIDC key derivation (uses userId as salt)
- Reduces database operations from 4 to 2 per authentication
- Simplifies code and removes potential confusion
3. Improved Error Handling:
- systemKey cleanup moved to finally block
- Ensures sensitive key material is always cleared from memory
These changes ensure data consistency and prevent potential data loss
in high-concurrency scenarios.
* Cleanup OIDC pr and run prettier
* Replace jetbrains mono with caskaydia cove
* Fix alert issues
* Finalize font update
* Feature/german language support (#374)
* v1.7.2 (#364)
* Feature request: Add delete confirmation dialog to file manager (#344)
* Feature request: Add delete confirmation dialog to file manager
- Added confirmation dialog before deleting files/folders
- Users must confirm deletion with a warning message
- Works for both Delete key and right-click delete
- Shows different messages for single file, folder, or multiple items
- Includes permanent deletion warning
- Follows existing design patterns using confirmWithToast
* Adds confirmation for deletion of items including folders
Updates the file deletion confirmation logic to distinguish between
deleting multiple items with or without folders. Introduces a new
translation string for a clearer user prompt when folders and their
contents are included in the deletion.
Improves clarity and reduces user error when performing bulk deletions.
* feat: Add Chinese translations for delete confirmation messages
* Adds camelCase support for encrypted field mappings (#342)
Extends encrypted field mappings to include camelCase variants
to support consistency and compatibility with different naming
conventions. Updates reverse mappings for Drizzle ORM to allow
conversion between camelCase and snake_case field names.
Improves integration with systems using mixed naming styles.
* Run code cleanup, add sidebar persistence, fix OIDC credentials, force SSH password.
* Fix snake case mismatching
* Add real client IP
* Fix OIDC credential persistence issue
The issue was that OIDC users were getting a new random Data Encryption Key (DEK)
on every login, which made previously encrypted credentials inaccessible.
Changes:
- Modified setupOIDCUserEncryption() to persist the DEK encrypted with a system-derived key
- Updated authenticateOIDCUser() to properly retrieve and use the persisted DEK
- Ensured OIDC users now have the same encryption persistence as password-based users
This fix ensures that credentials created by OIDC users remain accessible across
multiple login sessions.
* Fix race condition and remove redundant kekSalt for OIDC users
Critical fixes:
1. Race Condition Mitigation:
- Added read-after-write verification in setupOIDCUserEncryption()
- Ensures session uses the DEK that's actually in the database
- Prevents data loss when concurrent logins occur for new OIDC users
- If race is detected, discards generated DEK and uses stored one
2. Remove Redundant kekSalt Logic:
- Removed unnecessary kekSalt generation and checks for OIDC users
- kekSalt is not used in OIDC key derivation (uses userId as salt)
- Reduces database operations from 4 to 2 per authentication
- Simplifies code and removes potential confusion
3. Improved Error Handling:
- systemKey cleanup moved to finally block
- Ensures sensitive key material is always cleared from memory
These changes ensure data consistency and prevent potential data loss
in high-concurrency scenarios.
* Cleanup OIDC pr and run prettier
---------
Co-authored-by: Ved Prakash <54140516+thorved@users.noreply.github.com>
* Fix typos and improve wording in README.md
Corrected grammar and punctuation in README.
* Image 7.png
* Rename 3gi3b3os5psf1.png to Image 7.png
* Add video demonstration to README
Added a video demonstration to the README.
* Delete repo-images/Image 7.png
* Add files via upload
* Delete repo-images/Image 7.png
* Add files via upload
* Initial German translation
* German translation (#281)
* German translation (#281)
* Implementation of German language support (#281)
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---------
Co-authored-by: Karmaa <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Ved Prakash <54140516+thorved@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Add germanm support
* Fix SSH Key Password (keyPassword) Field Naming Mismatch Between Frontend and Backend (#375)
* Refactor key_password to keyPassword for consistency across SSH routes
* Standardizes keyPassword field handling and simplifies auth field logic
Standardizes the handling of the `keyPassword` field by converting
`key_password` to camelCase and ensuring consistent output while
preserving resolved credentials. Removes redundant snake_case
fields to avoid duplication.
Simplifies UI handling of authentication fields by allowing
non-relevant fields to persist, delegating filtering logic to the
backend for cleaner and more maintainable code.
Improves code clarity and aligns with consistent data handling
practices.
* Cleanup code + resolve conversion logic
---------
Co-authored-by: LukeGus
* Feature disable password login (#378)
* Add admin toggle to disable password login
* Update src/backend/database/routes/users.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/ui/main-axios.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/ui/Desktop/Admin/AdminSettings.tsx
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/backend/database/routes/users.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/backend/database/routes/users.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---------
Co-authored-by: ZacharyZcR
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Add SSH TOTP authentication support (#350)
* Add SSH TOTP authentication support
- Implement keyboard-interactive authentication for SSH connections
- Add TOTP dialog component for Terminal and File Manager
- Handle TOTP prompts in WebSocket and HTTP connections
- Disable Server Stats for TOTP-enabled servers
- Add i18n support for TOTP-related messages
* Update src/backend/ssh/server-stats.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/backend/ssh/file-manager.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---------
Co-authored-by: ZacharyZcR
Co-authored-by: Karmaa <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Add terminal snippets feature with sidebar UI (#377)
* Add terminal snippets feature with sidebar UI
- Add snippets CRUD API endpoints and database schema
- Implement snippets sidebar accessible from TopNavbar
- Add copy to clipboard functionality
- Include tooltips and optimized styling
- Add English and Chinese translations
* Update src/backend/database/routes/snippets.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---------
Co-authored-by: ZacharyZcR
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Feature engineering improvements (#376)
* chore: add engineering improvements
- Configure Prettier with unified code style rules
- Add husky + lint-staged for automated pre-commit checks
- Add commitlint to enforce conventional commit messages
- Add PR check workflow for CI automation
- Auto-format all files with Prettier
- Fix TypeScript any types in field-crypto.ts
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* chore: enhance development environment
- Add .editorconfig for unified editor settings
- Add .nvmrc to specify Node.js version (20)
- Add useful npm scripts: format, format:check, lint, lint:fix, type-check
* chore: add IDE and Git configuration
- Add VS Code workspace settings for consistent development experience
- Add VS Code extension recommendations (ESLint, Prettier, EditorConfig)
- Add .gitattributes to enforce LF line endings
* refactor: clean up unused variables and empty blocks
- database.ts: Remove unused variables (authManager, format, HTTPS_PORT, etc.)
- database.ts: Fix empty catch blocks with descriptive comments
- database.ts: Add eslint-disable for required middleware parameter
- db/index.ts: Remove unused variables and fix empty catch blocks
- Temporarily remove ESLint from pre-commit to allow incremental fixes
Reduced total errors from 947 to 913 (34 fixes)
* refactor: clean up unused variables and empty blocks in routes
Routes updated:
- credentials.ts: Remove 12 unused variables/imports
- alerts.ts: Remove 1 unused variable
- users.ts: Remove 9 unused variables/imports
Changes:
- Remove unused imports (NextFunction, jwt, UserCrypto, detectKeyType)
- Fix empty catch blocks with descriptive comments
- Prefix reserved parameters with underscore
- Clean up unused error variables in catch blocks
Reduced errors from 913 to 886 (27 fixes)
* refactor: clean up unused variables in routes/ssh.ts
- Remove unused imports (NextFunction, jwt)
- Remove 6 unused variables (result, updateResult, name x3)
- All 8 no-unused-vars errors fixed
* refactor: clean up unused variables and empty blocks in file-manager.ts
- Remove 22 unused variables (linkCount, hostId, userId, content, escapedTempFile, index, code)
- Fix 1 empty catch block
- Simplify multiple route handlers by removing unused destructured parameters
Reduced errors from 878 to 855 (23 fixes)
* refactor: clean up unused variables and empty blocks in utils
database-migration.ts:
- Remove 3 unused variables (encryptedSize, totalOriginalRows, totalMemoryRows)
lazy-field-encryption.ts:
- Fix 6 empty catch blocks with descriptive comments
- Keep error variables where they are used in logging
tunnel.ts:
- Fix multiple empty catch blocks
- Remove empty else blocks
- Partially fixed (10/21 issues resolved)
Reduced errors from 855 to 833 (22 fixes)
* fix: restore error variable in catch block for logging
Fix TypeScript error where error variable was removed from catch block
but still used in logging statements. The error variable is needed for
proper error logging and re-throwing.
* fix: clean up tunnel.ts empty blocks and unused variables
移除了 tunnel.ts 中的空块和未使用的变量:
- 移除 2 个空 else 块
- 修复 2 个空 if 块并添加注释
- 修复空错误处理器并添加注释
- 将未使用的 err 参数重命名为 _err
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up empty blocks and unused variables in backend utils
修复了后端工具文件中的空块和未使用的变量:
- auth-manager.ts: 移除空 else 块
- system-crypto.ts: 修复空 catch 块并添加注释
- starter.ts: 修复空 catch 块并添加注释
- server-stats.ts: 将未使用的 reject 参数重命名为 _reject
- credentials.ts: 将 connectionTimeout 从 let 改为 const
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up empty catch blocks in frontend components
修复了前端组件中的空 catch 块:
- Tunnel.tsx: 修复空 catch 块并添加注释
- ServerConfig.tsx: 修复空 catch 块并添加注释
- TerminalKeyboard.tsx: 修复空 catch 块并添加注释
- system-crypto.ts: 修复遗漏的空 catch 块
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up empty catch blocks in backend utilities
修复了后端工具文件中的 10 个空 catch 块:
- system-crypto.ts: 修复 1 个空 catch 块
- server-stats.ts: 修复 4 个空 catch 块
- auto-ssl-setup.ts: 修复 1 个空 catch 块
- ssh-key-utils.ts: 修复 4 个空 catch 块
所有空块都添加了描述性注释说明为何忽略错误。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up empty catch blocks in UI hooks and components
修复了 5 个 UI 组件和 hooks 中的空 catch 块:
- useDragToSystemDesktop.ts: 修复 2 个空 catch 块
- HomepageAuth.tsx: 修复 1 个空 catch 块
- HostManagerEditor.tsx: 修复 2 个空 catch 块
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up empty blocks in file manager and credential editor
修复了 5 个空块:
- FileManagerGrid.tsx: 移除 1 个空 else 块和 1 个空 if 块
- CredentialEditor.tsx: 修复 1 个空 catch 块,移除 2 个空 if/else 块
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up all empty catch blocks in Terminal components
修复了 Terminal 组件中的所有 8 个空 catch 块:
- Desktop/Apps/Terminal/Terminal.tsx: 修复 5 个空 catch 块
- Mobile/Apps/Terminal/Terminal.tsx: 修复 3 个空 catch 块
所有空块都添加了描述性注释。这是空块修复的最后一批。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* refactor: remove useless try/catch wrappers
移除了 3 个无用的 try/catch 包装器:
- users.ts: 移除只重新抛出错误的外层 try/catch
- FileManager.tsx: 移除只重新抛出错误的内层 try/catch
- DiffViewer.tsx: 移除只重新抛出错误的内层 try/catch
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* refactor: remove unused imports and mark unused parameters
移除了未使用的导入和标记未使用的参数:
- auto-ssl-setup.ts: 移除未使用的 crypto 导入
- user-crypto.ts: 移除未使用的 users 导入
- user-data-import.ts: 移除未使用的 nanoid 导入
- simple-db-ops.ts: 标记未使用的 userId 和 tableName 参数
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove unnecessary escape characters in regex patterns
移除了正则表达式中不必要的转义字符:
- users.ts: 修复 5 个 \/ 不必要的转义
- TabContext.tsx: 修复 1 个 \/ 不必要的转义
在字符串形式的正则表达式中,/ 不需要转义。
---------
Co-authored-by: ZacharyZcR
Co-authored-by: Claude
* feat: enhance server stats widgets and fix TypeScript/ESLint errors (#394)
* feat: add draggable server stats dashboard with customizable widgets
* fix: widget deletion and layout persistence issues
* fix: improve widget deletion UX and add debug logs for persistence
* fix: resolve widget deletion and layout persistence issues
- Add drag handles to widget title bars for precise drag control
- Prevent delete button from triggering drag via event stopPropagation
- Include statsConfig field in all GET/PUT API responses
- Remove debug console logs from production code
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: complete statsConfig field support across all API routes
- Add statsConfig to POST /db/host (create) route
- Add statsConfig to all GET routes for consistent API responses
- Remove incorrect statsConfig schema from HostManagerEditor
- statsConfig is now only managed by Server page layout editor
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: add statsConfig to metrics API response
- Add statsConfig field to SSHHostWithCredentials interface
- Include statsConfig in resolveHostCredentials baseHost object
- Ensures /metrics/:id API returns complete host configuration
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: include statsConfig in SSH host create/update requests
The statsConfig field was being dropped by createSSHHost and updateSSHHost
functions in main-axios.ts, preventing layout customization from persisting.
Fixed by adding statsConfig to the submitData object in both functions.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* feat: refactor server stats widgets into modular structure
Created dedicated widgets directory with individual components:
- CpuWidget, MemoryWidget, DiskWidget as separate components
- Widget registry for centralized widget configuration
- AddWidgetDialog for user-friendly widget selection
- Updated Server.tsx to use modular widget system
Benefits:
- Better code organization and maintainability
- Easier to add new widget types in the future
- Centralized widget metadata and configuration
- User can now add widgets via dialog interface
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: exit edit mode after saving layout
* feat: add customizable widget sizes with chart visualizations
Add three-tier size system (small/medium/large) for server stats widgets.
Integrate recharts library for visualizing trends in large widgets with
line charts (CPU), area charts (Memory), and radial bar charts (Disk).
Fix layout overflow issues with proper flexbox patterns.
* refactor: simplify server stats widget system
Replaced complex drag-and-drop grid layout with simple checkbox-based
configuration and static responsive grid display.
- Removed react-grid-layout dependency and 6 related packages
- Simplified StatsConfig from complex Widget objects to simple array
- Added Statistics tab in HostManagerEditor for checkbox selection
- Refactored Server.tsx to use CSS Grid instead of ResponsiveGridLayout
- Simplified widget components by removing edit mode and size selection
- Deleted unused AddWidgetDialog and registry files
- Fixed statsConfig serialization in backend routes
Net result: -787 lines of code, cleaner architecture.
* feat: add system, uptime, network and processes widgets
Add four new server statistics widgets:
- SystemWidget: displays hostname, OS, and kernel information
- UptimeWidget: shows server total uptime with formatted display
- NetworkWidget: lists network interfaces with IP and status
- ProcessesWidget: displays top processes by CPU usage
Backend changes:
- Extended SSH metrics collection to gather network, uptime, process, and system data
- Added commands to parse /proc/uptime, ip addr, ps aux output
Frontend changes:
- Created 4 new widget components with consistent styling
- Updated widget type definitions and HostManagerEditor
- Unified all widget heights to 280px for consistent layout
- Added translations for all new widgets (EN/ZH)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* refactor: improve widget styling and UX consistency
Enhance all server stats widgets with improved styling and user experience:
Widget improvements:
- Fix hardcoded titles, now use i18n translations for all widgets
- Improve data formatting with consistent translation keys
- Enhance empty state displays with better visual hierarchy
- Add smooth hover transitions and visual feedback
- Standardize spacing and layout patterns across widgets
Specific optimizations:
- CPU: Use translated load average display
- Memory: Translate "Free" label
- Disk: Translate "Available" label
- System: Improve icon colors and spacing consistency
- Network: Better empty state, enhanced card styling
- Processes: Improved card borders and spacing
Visual polish:
- Unified icon sizing and opacity for empty states
- Consistent border radius (rounded-lg)
- Better hover states with subtle transitions
- Enhanced font weights for improved readability
* fix: replace explicit any types with proper TypeScript types
- Replace 'any' with 'unknown' in catch blocks and add type assertions
- Create explicit interfaces for complex objects (HostConfig, TabData, TerminalHandle)
- Fix window/document object type extensions
- Update Electron API type definitions
- Improve type safety in database routes and utilities
- Add proper types to Terminal components (Desktop & Mobile)
- Fix navigation component types (TopNavbar, LeftSidebar, AppView)
Reduces TypeScript lint errors from 394 to 358 (-36 errors)
Fixes 45 @typescript-eslint/no-explicit-any violations
* fix: replace explicit any types with proper TypeScript types
- Create explicit interfaces for Request extensions (AuthenticatedRequest, RequestWithHeaders)
- Add type definitions for WebSocket messages and SSH connection data
- Use generic types in DataCrypto methods instead of any return types
- Define proper interfaces for file manager data structures
- Replace catch block any types with unknown and proper type assertions
- Add HostConfig and TabData interfaces for Server component
Fixes 32 @typescript-eslint/no-explicit-any violations across 5 files
* fix: resolve 6 TypeScript compilation errors
Fixed field name mismatches and generic type issues:
- database.ts: Changed camelCase to snake_case for key_password, private_key, public_key fields
- simple-db-ops.ts: Added explicit generic type parameters to DataCrypto method calls
Co-Authored-By: Claude
* fix: resolve unused variables in backend utils
Fixed @typescript-eslint/no-unused-vars errors in:
- starter.ts: removed unused error variables (2 fixes)
- auto-ssl-setup.ts: removed unused error variable (1 fix)
- ssh-key-utils.ts: removed unused error variables (3 fixes)
- user-crypto.ts: removed unused error variables (5 fixes)
- data-crypto.ts: removed unused plaintextFields and error variables (2 fixes)
- simple-db-ops.ts: removed unused parameters _userId and _tableName (2 fixes)
Total: 15 unused variable errors fixed
Co-Authored-By: Claude
* fix: remove unused variable in terminal.ts
Fixed @typescript-eslint/no-unused-vars errors:
- Removed unused userPayload variable (line 123)
- Removed unused cols and rows from destructuring (line 348)
Co-Authored-By: Claude
* fix: resolve unused variables in server-stats.ts
Fixed @typescript-eslint/no-unused-vars errors:
- Removed unused _reject parameter in Promise (line 64)
- Removed shadowed now variable in pollStatusesOnce (line 1130)
Co-Authored-By: Claude
* fix: remove unused variables in tunnel.ts
Removed 5 unused variables:
- Removed unused data parameter from stdout event handler
- Removed hasSourcePassword, hasSourceKey, hasEndpointPassword, hasEndpointKey variables
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove unused variables in main-axios.ts
Removed 8 unused variables:
- Removed unused type imports (Credential, CredentialData, HostInfo, ApiResponse)
- Removed unused apiPort variable
- Removed unused error variables in 3 catch blocks
* fix: remove unused variables in terminal.ts and starter.ts
Removed 2 unused variables:
- Removed unused JWTPayload type import from terminal.ts
- Removed unused _promise parameter from starter.ts
* fix: remove unused variables in sidebar.tsx
Removed 9 unused variables:
- Removed 5 unused Sheet component imports
- Removed unused SIDEBAR_WIDTH_MOBILE constant
- Removed 3 unused variables from useSidebar destructuring
* fix: remove 13 unused variables in frontend files
- version-check-modal.tsx: removed 4 unused imports and functions
- main.tsx: removed unused isMobile state
- AdminSettings.tsx: removed 8 unused imports and error variables
* fix: remove 28 unused variables across frontend components
Cleaned up unused imports, state variables, and function parameters:
- CredentialsManager.tsx: removed 8 unused variables (Sheet/Select imports)
- FileManager.tsx: removed 10 unused variables (icons, state, functions)
- Terminal.tsx (Desktop): removed 5 unused variables (state, handlers)
- Terminal.tsx (Mobile): removed 5 unused variables (imports, state)
Reduced lint errors from 271 to 236 (35 errors fixed)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 10 unused variables in File Manager and config files
Cleaned up more unused imports, parameters, and variables:
- FileManagerGrid.tsx: removed 4 unused variables (params, function)
- FileManagerContextMenu.tsx: removed Share import
- FileManagerSidebar.tsx: removed onLoadDirectory parameter
- DraggableWindow.tsx: removed Square import
- FileWindow.tsx: removed updateWindow variable
- ServerConfig.tsx: removed 2 unused error parameters
Reduced lint errors from 236 to 222 (14 errors fixed total)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 7 unused variables in widgets and Homepage components
Cleaned up unused imports, parameters, and variables:
- DiskWidget.tsx: removed metricsHistory parameter
- FileManagerContextMenu.tsx: removed ExternalLink import
- Homepage.tsx: removed useTranslation import
- HomepageAlertManager.tsx: removed loading variable
- HomepageAuth.tsx: removed setCookie import (Desktop & Mobile)
- HompageUpdateLog.tsx: removed err parameter
Reduced lint errors from 222 to 216 (6 errors fixed)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 8 unused variables in File Manager and Host Manager components
Cleaned up unused imports, state variables, and function parameters:
- DiffViewer.tsx: removed unused error parameter in catch block
- FileViewer.tsx: removed ReactPlayer import, unused originalContent state,
node parameters from markdown code components, audio variable
- HostManager.tsx: removed onSelectView and updatedHost parameters
- TunnelViewer.tsx: removed TunnelConnection import
Reduced lint errors from 271 to 208 (63 errors fixed total)
* fix: remove 7 unused variables in UI hooks and components
Cleaned up unused parameters and functions:
- status/index.tsx: removed unused className parameter from StatusIndicator
- useDragToDesktop.ts: removed unused sshHost parameter and from dependency
arrays (4 occurrences)
- useDragToSystemDesktop.ts: removed unused sshHost parameter and
getLastSaveDirectory function (29 lines removed)
Continued reducing frontend lint errors
* fix: remove 2 unused variables in hooks and TabContext
- useDragToDesktop.ts: removed unused onSuccess in dragFolderToDesktop
- TabContext.tsx: removed unused useTranslation import and t variable
Continued reducing frontend lint errors
* fix: remove 2 unused variables in Homepage component
- Removed unused isAdmin state variable (changed to setter only)
- Removed unused jwt variable by inlining getCookie check
Continued reducing frontend lint errors
* fix: remove 3 unused variables in Mobile navigation components
- Host.tsx: removed unused Server icon import
- LeftSidebar.tsx: removed unused setHostsLoading setter and err parameter
Continued reducing frontend lint errors
* fix: remove 9 unused variables across multiple files
Fixed unused variables in:
- database-file-encryption.ts: removed currentFingerprint (backend)
- FileManagerContextMenu.tsx: removed ExternalLink import, hasDirectories
- frontend-logger.ts: removed 5 unused shortUrl variables
Continued reducing lint errors
* fix: remove 18 unused variables across 4 files
- HostManagerViewer.tsx: remove 9 unused error variables and parameters
- HostManagerEditor.tsx: remove WidgetType import, hosts/loading states, error variable
- CredentialViewer.tsx: remove 3 unused error variables
- Server.tsx: remove 2 unused error variables
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 9 unused variables across 4 files
- SnippetsSidebar.tsx: remove 3 unused err variables in catch blocks
- TunnelViewer.tsx: remove 2 unused parameters from callback
- DesktopApp.tsx: remove getCookie import and unused state variables
- HomepageAlertManager.tsx: remove 2 unused err variables in catch blocks
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 10 unused variables and imports across 4 navigation files
- Homepage.tsx: remove unused username state variable
- AppView.tsx: remove 3 unused Lucide icon imports
- TopNavbar.tsx: remove 4 unused Accordion component imports
- LeftSidebar.tsx: remove 2 unused variables (err, jwt)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 5 unused variables across 4 user/credentials files
- PasswordReset.tsx: remove unused result variable
- UserProfile.tsx: remove unused Key import and err variable
- version-check-modal.tsx: remove unused setVersionDismissed setter
- CredentialsManager.tsx: remove unused e parameter from handleDragLeave
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 2 unused variables in FileViewer and TerminalWindow
- FileViewer.tsx: remove unused node parameter from code component
- TerminalWindow.tsx: remove unused handleMinimize function
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 10 unused variables in HomepageAuth.tsx
Removed unused variables:
- getCookie import
- dbError prop
- visibility state and toggleVisibility
- error state variable
- result variable in handleInitiatePasswordReset
- token URL parameter
- err parameters in catch blocks
- retryDatabaseConnection function
- Multiple setError(null) calls
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 9 unused variables across multiple files
Files fixed:
- DesktopApp.tsx: Removed _nextView parameter
- TerminalWindow.tsx: Removed minimizeWindow
- Mobile Host.tsx: Removed Server import
- Mobile LeftSidebar.tsx: Removed setHostsLoading, err in catch
- Desktop LeftSidebar.tsx: Removed getCookie, setCookie, onSelectView, getView, setHostsLoading
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 10 unused variables in Mobile files
Files fixed:
- MobileApp.tsx: Removed getCookie, removeTab, isAdmin, id, err parameters
- Mobile/HomepageAuth.tsx: Removed getCookie, error state, result, token, err parameters
All @typescript-eslint/no-unused-vars errors in frontend now resolved!
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove unused t variable in TabContext
Removed useTranslation import and unused t variable
in Mobile TabContext.tsx
All @typescript-eslint/no-unused-vars errors now resolved!
Total fixed: 154 unused variables
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: resolve TypeScript and ESLint errors across the codebase
- Fixed @typescript-eslint/no-unused-vars errors (31 instances)
- Fixed @typescript-eslint/no-explicit-any errors in backend (~22 instances)
- Fixed @typescript-eslint/no-explicit-any errors in frontend (~60 instances)
- Fixed prefer-const errors (5 instances)
- Fixed no-empty-object-type and rules-of-hooks errors
- Added proper type assertions for database operations
- Improved type safety in authentication and encryption modules
- Enhanced type definitions for API routes and SSH operations
All TypeScript compilation errors resolved. Application builds and runs successfully.
* fix: disable react-refresh/only-export-components rule for component files
Disable the react-refresh/only-export-components ESLint rule in files
that export both components and related utilities (hooks, types,
constants). This is a pragmatic solution to maintain code organization
without splitting files unnecessarily.
* style: fix prettier formatting issues
Fix code style issues in translation file and TOTP dialog component
to pass CI prettier check.
* chore: fix rollup optional dependencies installation in CI
Add step to force reinstall rollup after npm ci to fix the known npm
bug with optional dependencies on Linux x64 platform.
* chore: fix lightningcss optional dependencies in CI
Add lightningcss to the force reinstall step to fix npm optional
dependencies bug for both rollup and lightningcss on Linux x64.
* chore: fix npm optional dependencies bug in CI
Remove package-lock.json and node_modules before install to properly
handle optional dependencies for rollup, lightningcss, and tailwindcss
native bindings on Linux x64 platform as recommended by npm.
* Update src/types/index.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Set terminal environment variables for SSH
Added environment variables for terminal configuration.
---------
Co-authored-by: Claude
Co-authored-by: Karmaa <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* feat: begin macOS support
* Delete .github/ISSUE_TEMPLATE/bug_report.yml
* Delete .github/ISSUE_TEMPLATE/feature_request.yml
* Add issue template configuration for support links
* Revise support instructions in README.md
Updated support section with new issue reporting instructions and clarified Discord support response times.
* Update repository links and badge URLs in README
* Update links to new orgnanization
* Migrate workflows to Blacksmith (#421)
Co-authored-by: blacksmith-sh[bot] <157653362+blacksmith-sh[bot]@users.noreply.github.com>
* Feature request: Add delete confirmation dialog to file manager (#344)
* Feature request: Add delete confirmation dialog to file manager
- Added confirmation dialog before deleting files/folders
- Users must confirm deletion with a warning message
- Works for both Delete key and right-click delete
- Shows different messages for single file, folder, or multiple items
- Includes permanent deletion warning
- Follows existing design patterns using confirmWithToast
* Adds confirmation for deletion of items including folders
Updates the file deletion confirmation logic to distinguish between
deleting multiple items with or without folders. Introduces a new
translation string for a clearer user prompt when folders and their
contents are included in the deletion.
Improves clarity and reduces user error when performing bulk deletions.
* feat: Add Chinese translations for delete confirmation messages
* Adds camelCase support for encrypted field mappings (#342)
Extends encrypted field mappings to include camelCase variants
to support consistency and compatibility with different naming
conventions. Updates reverse mappings for Drizzle ORM to allow
conversion between camelCase and snake_case field names.
Improves integration with systems using mixed naming styles.
* Run code cleanup, add sidebar persistence, fix OIDC credentials, force SSH password.
* Fix snake case mismatching
* Fix race condition and remove redundant kekSalt for OIDC users
Critical fixes:
1. Race Condition Mitigation:
- Added read-after-write verification in setupOIDCUserEncryption()
- Ensures session uses the DEK that's actually in the database
- Prevents data loss when concurrent logins occur for new OIDC users
- If race is detected, discards generated DEK and uses stored one
2. Remove Redundant kekSalt Logic:
- Removed unnecessary kekSalt generation and checks for OIDC users
- kekSalt is not used in OIDC key derivation (uses userId as salt)
- Reduces database operations from 4 to 2 per authentication
- Simplifies code and removes potential confusion
3. Improved Error Handling:
- systemKey cleanup moved to finally block
- Ensures sensitive key material is always cleared from memory
These changes ensure data consistency and prevent potential data loss
in high-concurrency scenarios.
* Cleanup OIDC pr and run prettier
* Feature/german language support (#374)
* v1.7.2 (#364)
* Feature request: Add delete confirmation dialog to file manager (#344)
* Feature request: Add delete confirmation dialog to file manager
- Added confirmation dialog before deleting files/folders
- Users must confirm deletion with a warning message
- Works for both Delete key and right-click delete
- Shows different messages for single file, folder, or multiple items
- Includes permanent deletion warning
- Follows existing design patterns using confirmWithToast
* Adds confirmation for deletion of items including folders
Updates the file deletion confirmation logic to distinguish between
deleting multiple items with or without folders. Introduces a new
translation string for a clearer user prompt when folders and their
contents are included in the deletion.
Improves clarity and reduces user error when performing bulk deletions.
* feat: Add Chinese translations for delete confirmation messages
* Adds camelCase support for encrypted field mappings (#342)
Extends encrypted field mappings to include camelCase variants
to support consistency and compatibility with different naming
conventions. Updates reverse mappings for Drizzle ORM to allow
conversion between camelCase and snake_case field names.
Improves integration with systems using mixed naming styles.
* Run code cleanup, add sidebar persistence, fix OIDC credentials, force SSH password.
* Fix snake case mismatching
* Add real client IP
* Fix OIDC credential persistence issue
The issue was that OIDC users were getting a new random Data Encryption Key (DEK)
on every login, which made previously encrypted credentials inaccessible.
Changes:
- Modified setupOIDCUserEncryption() to persist the DEK encrypted with a system-derived key
- Updated authenticateOIDCUser() to properly retrieve and use the persisted DEK
- Ensured OIDC users now have the same encryption persistence as password-based users
This fix ensures that credentials created by OIDC users remain accessible across
multiple login sessions.
* Fix race condition and remove redundant kekSalt for OIDC users
Critical fixes:
1. Race Condition Mitigation:
- Added read-after-write verification in setupOIDCUserEncryption()
- Ensures session uses the DEK that's actually in the database
- Prevents data loss when concurrent logins occur for new OIDC users
- If race is detected, discards generated DEK and uses stored one
2. Remove Redundant kekSalt Logic:
- Removed unnecessary kekSalt generation and checks for OIDC users
- kekSalt is not used in OIDC key derivation (uses userId as salt)
- Reduces database operations from 4 to 2 per authentication
- Simplifies code and removes potential confusion
3. Improved Error Handling:
- systemKey cleanup moved to finally block
- Ensures sensitive key material is always cleared from memory
These changes ensure data consistency and prevent potential data loss
in high-concurrency scenarios.
* Cleanup OIDC pr and run prettier
---------
Co-authored-by: Ved Prakash <54140516+thorved@users.noreply.github.com>
* Fix typos and improve wording in README.md
Corrected grammar and punctuation in README.
* Image 7.png
* Rename 3gi3b3os5psf1.png to Image 7.png
* Add video demonstration to README
Added a video demonstration to the README.
* Delete repo-images/Image 7.png
* Add files via upload
* Delete repo-images/Image 7.png
* Add files via upload
* Initial German translation
* German translation (#281)
* German translation (#281)
* Implementation of German language support (#281)
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/locales/de/translation.json
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---------
Co-authored-by: Karmaa <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Ved Prakash <54140516+thorved@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Feature disable password login (#378)
* Add admin toggle to disable password login
* Update src/backend/database/routes/users.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/ui/main-axios.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/ui/Desktop/Admin/AdminSettings.tsx
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/backend/database/routes/users.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/backend/database/routes/users.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---------
Co-authored-by: ZacharyZcR
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Add SSH TOTP authentication support (#350)
* Add SSH TOTP authentication support
- Implement keyboard-interactive authentication for SSH connections
- Add TOTP dialog component for Terminal and File Manager
- Handle TOTP prompts in WebSocket and HTTP connections
- Disable Server Stats for TOTP-enabled servers
- Add i18n support for TOTP-related messages
* Update src/backend/ssh/server-stats.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Update src/backend/ssh/file-manager.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---------
Co-authored-by: ZacharyZcR
Co-authored-by: Karmaa <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Add terminal snippets feature with sidebar UI (#377)
* Add terminal snippets feature with sidebar UI
- Add snippets CRUD API endpoints and database schema
- Implement snippets sidebar accessible from TopNavbar
- Add copy to clipboard functionality
- Include tooltips and optimized styling
- Add English and Chinese translations
* Update src/backend/database/routes/snippets.ts
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---------
Co-authored-by: ZacharyZcR
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* Feature engineering improvements (#376)
* chore: add engineering improvements
- Configure Prettier with unified code style rules
- Add husky + lint-staged for automated pre-commit checks
- Add commitlint to enforce conventional commit messages
- Add PR check workflow for CI automation
- Auto-format all files with Prettier
- Fix TypeScript any types in field-crypto.ts
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* chore: enhance development environment
- Add .editorconfig for unified editor settings
- Add .nvmrc to specify Node.js version (20)
- Add useful npm scripts: format, format:check, lint, lint:fix, type-check
* chore: add IDE and Git configuration
- Add VS Code workspace settings for consistent development experience
- Add VS Code extension recommendations (ESLint, Prettier, EditorConfig)
- Add .gitattributes to enforce LF line endings
* refactor: clean up unused variables and empty blocks
- database.ts: Remove unused variables (authManager, format, HTTPS_PORT, etc.)
- database.ts: Fix empty catch blocks with descriptive comments
- database.ts: Add eslint-disable for required middleware parameter
- db/index.ts: Remove unused variables and fix empty catch blocks
- Temporarily remove ESLint from pre-commit to allow incremental fixes
Reduced total errors from 947 to 913 (34 fixes)
* refactor: clean up unused variables and empty blocks in routes
Routes updated:
- credentials.ts: Remove 12 unused variables/imports
- alerts.ts: Remove 1 unused variable
- users.ts: Remove 9 unused variables/imports
Changes:
- Remove unused imports (NextFunction, jwt, UserCrypto, detectKeyType)
- Fix empty catch blocks with descriptive comments
- Prefix reserved parameters with underscore
- Clean up unused error variables in catch blocks
Reduced errors from 913 to 886 (27 fixes)
* refactor: clean up unused variables in routes/ssh.ts
- Remove unused imports (NextFunction, jwt)
- Remove 6 unused variables (result, updateResult, name x3)
- All 8 no-unused-vars errors fixed
* refactor: clean up unused variables and empty blocks in file-manager.ts
- Remove 22 unused variables (linkCount, hostId, userId, content, escapedTempFile, index, code)
- Fix 1 empty catch block
- Simplify multiple route handlers by removing unused destructured parameters
Reduced errors from 878 to 855 (23 fixes)
* refactor: clean up unused variables and empty blocks in utils
database-migration.ts:
- Remove 3 unused variables (encryptedSize, totalOriginalRows, totalMemoryRows)
lazy-field-encryption.ts:
- Fix 6 empty catch blocks with descriptive comments
- Keep error variables where they are used in logging
tunnel.ts:
- Fix multiple empty catch blocks
- Remove empty else blocks
- Partially fixed (10/21 issues resolved)
Reduced errors from 855 to 833 (22 fixes)
* fix: restore error variable in catch block for logging
Fix TypeScript error where error variable was removed from catch block
but still used in logging statements. The error variable is needed for
proper error logging and re-throwing.
* fix: clean up tunnel.ts empty blocks and unused variables
移除了 tunnel.ts 中的空块和未使用的变量:
- 移除 2 个空 else 块
- 修复 2 个空 if 块并添加注释
- 修复空错误处理器并添加注释
- 将未使用的 err 参数重命名为 _err
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up empty blocks and unused variables in backend utils
修复了后端工具文件中的空块和未使用的变量:
- auth-manager.ts: 移除空 else 块
- system-crypto.ts: 修复空 catch 块并添加注释
- starter.ts: 修复空 catch 块并添加注释
- server-stats.ts: 将未使用的 reject 参数重命名为 _reject
- credentials.ts: 将 connectionTimeout 从 let 改为 const
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up empty catch blocks in frontend components
修复了前端组件中的空 catch 块:
- Tunnel.tsx: 修复空 catch 块并添加注释
- ServerConfig.tsx: 修复空 catch 块并添加注释
- TerminalKeyboard.tsx: 修复空 catch 块并添加注释
- system-crypto.ts: 修复遗漏的空 catch 块
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up empty catch blocks in backend utilities
修复了后端工具文件中的 10 个空 catch 块:
- system-crypto.ts: 修复 1 个空 catch 块
- server-stats.ts: 修复 4 个空 catch 块
- auto-ssl-setup.ts: 修复 1 个空 catch 块
- ssh-key-utils.ts: 修复 4 个空 catch 块
所有空块都添加了描述性注释说明为何忽略错误。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up empty catch blocks in UI hooks and components
修复了 5 个 UI 组件和 hooks 中的空 catch 块:
- useDragToSystemDesktop.ts: 修复 2 个空 catch 块
- HomepageAuth.tsx: 修复 1 个空 catch 块
- HostManagerEditor.tsx: 修复 2 个空 catch 块
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up empty blocks in file manager and credential editor
修复了 5 个空块:
- FileManagerGrid.tsx: 移除 1 个空 else 块和 1 个空 if 块
- CredentialEditor.tsx: 修复 1 个空 catch 块,移除 2 个空 if/else 块
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: clean up all empty catch blocks in Terminal components
修复了 Terminal 组件中的所有 8 个空 catch 块:
- Desktop/Apps/Terminal/Terminal.tsx: 修复 5 个空 catch 块
- Mobile/Apps/Terminal/Terminal.tsx: 修复 3 个空 catch 块
所有空块都添加了描述性注释。这是空块修复的最后一批。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* refactor: remove useless try/catch wrappers
移除了 3 个无用的 try/catch 包装器:
- users.ts: 移除只重新抛出错误的外层 try/catch
- FileManager.tsx: 移除只重新抛出错误的内层 try/catch
- DiffViewer.tsx: 移除只重新抛出错误的内层 try/catch
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* refactor: remove unused imports and mark unused parameters
移除了未使用的导入和标记未使用的参数:
- auto-ssl-setup.ts: 移除未使用的 crypto 导入
- user-crypto.ts: 移除未使用的 users 导入
- user-data-import.ts: 移除未使用的 nanoid 导入
- simple-db-ops.ts: 标记未使用的 userId 和 tableName 参数
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove unnecessary escape characters in regex patterns
移除了正则表达式中不必要的转义字符:
- users.ts: 修复 5 个 \/ 不必要的转义
- TabContext.tsx: 修复 1 个 \/ 不必要的转义
在字符串形式的正则表达式中,/ 不需要转义。
---------
Co-authored-by: ZacharyZcR
Co-authored-by: Claude
* feat: enhance server stats widgets and fix TypeScript/ESLint errors (#394)
* feat: add draggable server stats dashboard with customizable widgets
* fix: widget deletion and layout persistence issues
* fix: improve widget deletion UX and add debug logs for persistence
* fix: resolve widget deletion and layout persistence issues
- Add drag handles to widget title bars for precise drag control
- Prevent delete button from triggering drag via event stopPropagation
- Include statsConfig field in all GET/PUT API responses
- Remove debug console logs from production code
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: complete statsConfig field support across all API routes
- Add statsConfig to POST /db/host (create) route
- Add statsConfig to all GET routes for consistent API responses
- Remove incorrect statsConfig schema from HostManagerEditor
- statsConfig is now only managed by Server page layout editor
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: add statsConfig to metrics API response
- Add statsConfig field to SSHHostWithCredentials interface
- Include statsConfig in resolveHostCredentials baseHost object
- Ensures /metrics/:id API returns complete host configuration
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: include statsConfig in SSH host create/update requests
The statsConfig field was being dropped by createSSHHost and updateSSHHost
functions in main-axios.ts, preventing layout customization from persisting.
Fixed by adding statsConfig to the submitData object in both functions.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* feat: refactor server stats widgets into modular structure
Created dedicated widgets directory with individual components:
- CpuWidget, MemoryWidget, DiskWidget as separate components
- Widget registry for centralized widget configuration
- AddWidgetDialog for user-friendly widget selection
- Updated Server.tsx to use modular widget system
Benefits:
- Better code organization and maintainability
- Easier to add new widget types in the future
- Centralized widget metadata and configuration
- User can now add widgets via dialog interface
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: exit edit mode after saving layout
* feat: add customizable widget sizes with chart visualizations
Add three-tier size system (small/medium/large) for server stats widgets.
Integrate recharts library for visualizing trends in large widgets with
line charts (CPU), area charts (Memory), and radial bar charts (Disk).
Fix layout overflow issues with proper flexbox patterns.
* refactor: simplify server stats widget system
Replaced complex drag-and-drop grid layout with simple checkbox-based
configuration and static responsive grid display.
- Removed react-grid-layout dependency and 6 related packages
- Simplified StatsConfig from complex Widget objects to simple array
- Added Statistics tab in HostManagerEditor for checkbox selection
- Refactored Server.tsx to use CSS Grid instead of ResponsiveGridLayout
- Simplified widget components by removing edit mode and size selection
- Deleted unused AddWidgetDialog and registry files
- Fixed statsConfig serialization in backend routes
Net result: -787 lines of code, cleaner architecture.
* feat: add system, uptime, network and processes widgets
Add four new server statistics widgets:
- SystemWidget: displays hostname, OS, and kernel information
- UptimeWidget: shows server total uptime with formatted display
- NetworkWidget: lists network interfaces with IP and status
- ProcessesWidget: displays top processes by CPU usage
Backend changes:
- Extended SSH metrics collection to gather network, uptime, process, and system data
- Added commands to parse /proc/uptime, ip addr, ps aux output
Frontend changes:
- Created 4 new widget components with consistent styling
- Updated widget type definitions and HostManagerEditor
- Unified all widget heights to 280px for consistent layout
- Added translations for all new widgets (EN/ZH)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* refactor: improve widget styling and UX consistency
Enhance all server stats widgets with improved styling and user experience:
Widget improvements:
- Fix hardcoded titles, now use i18n translations for all widgets
- Improve data formatting with consistent translation keys
- Enhance empty state displays with better visual hierarchy
- Add smooth hover transitions and visual feedback
- Standardize spacing and layout patterns across widgets
Specific optimizations:
- CPU: Use translated load average display
- Memory: Translate "Free" label
- Disk: Translate "Available" label
- System: Improve icon colors and spacing consistency
- Network: Better empty state, enhanced card styling
- Processes: Improved card borders and spacing
Visual polish:
- Unified icon sizing and opacity for empty states
- Consistent border radius (rounded-lg)
- Better hover states with subtle transitions
- Enhanced font weights for improved readability
* fix: replace explicit any types with proper TypeScript types
- Replace 'any' with 'unknown' in catch blocks and add type assertions
- Create explicit interfaces for complex objects (HostConfig, TabData, TerminalHandle)
- Fix window/document object type extensions
- Update Electron API type definitions
- Improve type safety in database routes and utilities
- Add proper types to Terminal components (Desktop & Mobile)
- Fix navigation component types (TopNavbar, LeftSidebar, AppView)
Reduces TypeScript lint errors from 394 to 358 (-36 errors)
Fixes 45 @typescript-eslint/no-explicit-any violations
* fix: replace explicit any types with proper TypeScript types
- Create explicit interfaces for Request extensions (AuthenticatedRequest, RequestWithHeaders)
- Add type definitions for WebSocket messages and SSH connection data
- Use generic types in DataCrypto methods instead of any return types
- Define proper interfaces for file manager data structures
- Replace catch block any types with unknown and proper type assertions
- Add HostConfig and TabData interfaces for Server component
Fixes 32 @typescript-eslint/no-explicit-any violations across 5 files
* fix: resolve 6 TypeScript compilation errors
Fixed field name mismatches and generic type issues:
- database.ts: Changed camelCase to snake_case for key_password, private_key, public_key fields
- simple-db-ops.ts: Added explicit generic type parameters to DataCrypto method calls
Co-Authored-By: Claude
* fix: resolve unused variables in backend utils
Fixed @typescript-eslint/no-unused-vars errors in:
- starter.ts: removed unused error variables (2 fixes)
- auto-ssl-setup.ts: removed unused error variable (1 fix)
- ssh-key-utils.ts: removed unused error variables (3 fixes)
- user-crypto.ts: removed unused error variables (5 fixes)
- data-crypto.ts: removed unused plaintextFields and error variables (2 fixes)
- simple-db-ops.ts: removed unused parameters _userId and _tableName (2 fixes)
Total: 15 unused variable errors fixed
Co-Authored-By: Claude
* fix: remove unused variable in terminal.ts
Fixed @typescript-eslint/no-unused-vars errors:
- Removed unused userPayload variable (line 123)
- Removed unused cols and rows from destructuring (line 348)
Co-Authored-By: Claude
* fix: resolve unused variables in server-stats.ts
Fixed @typescript-eslint/no-unused-vars errors:
- Removed unused _reject parameter in Promise (line 64)
- Removed shadowed now variable in pollStatusesOnce (line 1130)
Co-Authored-By: Claude
* fix: remove unused variables in tunnel.ts
Removed 5 unused variables:
- Removed unused data parameter from stdout event handler
- Removed hasSourcePassword, hasSourceKey, hasEndpointPassword, hasEndpointKey variables
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove unused variables in main-axios.ts
Removed 8 unused variables:
- Removed unused type imports (Credential, CredentialData, HostInfo, ApiResponse)
- Removed unused apiPort variable
- Removed unused error variables in 3 catch blocks
* fix: remove unused variables in terminal.ts and starter.ts
Removed 2 unused variables:
- Removed unused JWTPayload type import from terminal.ts
- Removed unused _promise parameter from starter.ts
* fix: remove unused variables in sidebar.tsx
Removed 9 unused variables:
- Removed 5 unused Sheet component imports
- Removed unused SIDEBAR_WIDTH_MOBILE constant
- Removed 3 unused variables from useSidebar destructuring
* fix: remove 13 unused variables in frontend files
- version-check-modal.tsx: removed 4 unused imports and functions
- main.tsx: removed unused isMobile state
- AdminSettings.tsx: removed 8 unused imports and error variables
* fix: remove 28 unused variables across frontend components
Cleaned up unused imports, state variables, and function parameters:
- CredentialsManager.tsx: removed 8 unused variables (Sheet/Select imports)
- FileManager.tsx: removed 10 unused variables (icons, state, functions)
- Terminal.tsx (Desktop): removed 5 unused variables (state, handlers)
- Terminal.tsx (Mobile): removed 5 unused variables (imports, state)
Reduced lint errors from 271 to 236 (35 errors fixed)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 10 unused variables in File Manager and config files
Cleaned up more unused imports, parameters, and variables:
- FileManagerGrid.tsx: removed 4 unused variables (params, function)
- FileManagerContextMenu.tsx: removed Share import
- FileManagerSidebar.tsx: removed onLoadDirectory parameter
- DraggableWindow.tsx: removed Square import
- FileWindow.tsx: removed updateWindow variable
- ServerConfig.tsx: removed 2 unused error parameters
Reduced lint errors from 236 to 222 (14 errors fixed total)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude
* fix: remove 7 unused variables in widgets and Homepage components
Cleaned up unused imports, p…
* fix: Improve TOTP reliability, move components around, turn homepage update log into a sheet
* fix: Work more on TOTP, renamed homepage to dashboard and began improvements
* fix: test commit
* fix: Fix server stats login
* feat: Complete layout of Termix dashboard
* feat: Update font for reacent activity
* feat: Connect dashboard to backend and update tab system to be similar to a browser (neither are fully finished)
* feat: Improve dashboard API, improve tab system, various other fixes
* fix: Resize dashboard boxes and reduce server stats size to add scrolling
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix: Improve macOS support
* fix(auth): Fix admin user authentication for /users/db-health endpoint by adding cookie JWT support (#422)
Fixed authentication issue for admin users accessing the /users/db-health endpoint:
- Added JWT token extraction from cookies (req.cookies?.jwt)
- Added support for Bearer token from Authorization header
- Improved error handling for missing and invalid tokens
- Ensured consistent authentication flow for admin users
Changes made:
- Check for JWT token in req.cookies?.jwt
- Support Bearer token from Authorization header
- Return 401 error when token is missing
- Return 401 error when token validation fails
Fixes: https://github.com/Termix-SSH/Support/issues/12
* Update Docker login credentials and image names
* Update docker-image.yml
* Refactor Docker image workflow for registry options
Updated workflow to allow selection of Docker registry and simplified tag handling.
* Update Docker login conditions and tag handling
* Enhance Docker image workflow with better tagging
Updated Docker image workflow to improve tag handling and descriptions.
* Update Docker workflow for tag handling and cleanup
* Update docker-image.yml
* Update Docker workflow inputs and tag logic
Refactor Docker workflow to include version and production inputs, and streamline tag determination.
* Update Docker image workflow for multi-platform builds
* Refactor Docker image tags for clarity
Updated Docker image tags to use multi-line syntax for better readability and added latest tag conditionally.
* Fix typo in exposed ports in Dockerfile
* Update docker-image.yml
* Refactor Docker image workflow for registry handling
Removed registry input and adjusted Docker Hub login condition.
* Handle OIDC users during database import (#424)
* Update Docker image name for GitHub registry
* Fix image name casing in Docker workflow
* Remove untagged image cleanup step from workflow
Removed the step to delete untagged image versions from the workflow.
* Change Docker login to use GHCR credentials
Updated Docker login credentials for GitHub Container Registry.
* Remove cache moving step from Docker workflow
Removed the step to move the build cache in the Docker workflow.
* Refactor Docker image workflow for versioning and builds
* Update docker-image.yml
* Allow OIDC users to import database without password
* Skip import password prompt for OIDC users
* docs: clarify OIDC import unlocking flow
* docs: explain admin import password logic
---------
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: Nikola Novoselec
* fix: Fixed various issues with the dashboard, tab bar, and database issues
* feat: Added none password option and fixed some navbar issues (still present)
* fix: Fix tab reload/state loss whenever moving them to the rigbht
* feat: Make tabs auto expand and contract and scroll
* fix: Remove vertical scrolling in the tab bar and dashboard and reduce scrollbar height in tab bar
* feat: Add many terminal customizations
* feat: Add many terminal customizations
* fix: incorrect macOS logo, termix hangs on macOS, and macOS reporting incorrect version
* fix: fix macOS verison build error
* fix: fix macOS build error
* fix: replaced macOS icon
* feat: Added more output types for electron and streamlined the workflow
* fix: Rollup package issue
* fix: Rollup package issue for macOS
* feat: fix macOS/Linux build error
* fix: fix macOS build error
* fix: fix macOS build error and double folder issues
* fix: fix macOS build error
* fix: fix macOS build error
* fix: fix macOS build error
* fix: fix macOS build error
* fix: files uploading as folders instead of raw executable
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing
* fix: macOS build failing and update workflow options
* fix: macOS build failing
* fix: Upload to release not finding a release
* fix: ChaNge platform for upload to release
* fix: Standardize file naming
* fix: Build error with custom tar.gz naming
* fix: Allow .dmg signing
* fix: Fix .dmg signing
* fix: Fix notarize build error
* fix: Fix notarize build error
* fix: Add app specific password
* fix: add developer ID certificate
* fix: macOS app not closing
* fix: cache error
* Add Brazilian Portuguese translation (#425)
* Update Docker image name for GitHub registry
* Fix image name casing in Docker workflow
* Remove untagged image cleanup step from workflow
Removed the step to delete untagged image versions from the workflow.
* Change Docker login to use GHCR credentials
Updated Docker login credentials for GitHub Container Registry.
* Remove cache moving step from Docker workflow
Removed the step to move the build cache in the Docker workflow.
* Refactor Docker image workflow for versioning and builds
* Update docker-image.yml
* Add Brazilian Portuguese translation
---------
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
* feat: add chocolatey support
* feat: add initial flatpak/homebrew support
* fix: incorrect choco URL
* fix: rename choco package
* fix: updated package lock
* fix: move totp dialog
* feat: centralize SSH tools and allow multi terminal snippets
* fix: Squash commit of several fixes and features for many different elements
* fix: Fix some translations
* fix: pt-BR build error
* fix: npm build error
* fix: npm build error
* feat: rename gh actions
* fix: None auth and Host.tsx edit button issues
* fix: macOS dmg fail
* fix: linux not building x64
* fix: linux not uploading x64
* fix: Password reset issues, ODIC admin auth not filling, and electron x64 build issues
* feat: Squashed commit of fixing "none" authentication and adding a sessions system for mobile, electron, and web
* fix: Replace checkbox in docker build with dropdown
* fix: Issue with electron not displaying site
* fix: Issue with electron not displaying se
* fix: Issue with electron not displaying
* fix: Mobile reporting wrong user-agent
* fix: Nginx runtime error
* fix: JWT not persisting after reboot
* feat: add null to gitnore
* feat: remove sessions after reboot
* fix: File cleanup
* fix: Uncapitalize folder titles and finalize file cleanup
* fix: Build errors after cleanup
* fix: GITHUB_TOKEN issue in electron build
* fix: Random macOS build error
* fix: macOS GH token error
* fix: Incorrect desktop user agent and build issues
* fix: Notarize cleanup
* fix: None auth issues and macOS build failure and rename files for consistency
* fix: Run prettier
* feat: Update readme for iPadOS
* fix: Electron desktop not logging in
* fix: Electron desktop not logging in
* fix: Duplicated CORS headers
* fix: Electron login issues
* fix: Sqlite package fix
* fix: Desktop app login issues and rename version check and host manager folder
* fix: Electron HTTP fix + stripped background fix
* fix: Electron security issues and TOTP/None auth issues
* fix: Server config showing in web view
* fix: Update readme
* fix: Update readme
* [FEATURE] Adjustable Left Menu Width in Web Interface (#427)
#234
Added to LeftSidebar.tsx functionality
Update TopNavbar.tsx to use sidebar dynamic width
Co-authored-by: Robert Coroianu
* fix: Sidebar resize issues and issues with TOTP interfering with password auth
* chore: Run prettier
* fix: Tunnels being same name
* fix: Electron build problems
* fix: Type error
* fix: Linux app image and server conifg issue
* fix: Run linter
* fix: Incorrect android user agent
* fix: No x64 appimage and server config displaying in electron webview
* fix: Electron API and terminal websocket issues
* fix: Android user agent edgecase and electron using web view incorrectly
* feat: Added mobile and electron UI redirecting system
* fix: Fix electron login and mobile redirect
* feat: add Russian translation and readme (#428)
* Update Docker image name for GitHub registry
* Fix image name casing in Docker workflow
* Remove untagged image cleanup step from workflow
Removed the step to delete untagged image versions from the workflow.
* Change Docker login to use GHCR credentials
Updated Docker login credentials for GitHub Container Registry.
* Remove cache moving step from Docker workflow
Removed the step to move the build cache in the Docker workflow.
* Refactor Docker image workflow for versioning and builds
* Update docker-image.yml
* Update print statement from 'Hello' to 'Goodbye'
* Update docker build
* Rename docker-image.yml to docker.yml
* Rename electron-build.yml to electron.yml
* feat: add Russian translation and readme
* feat: Added mobile and electron UI redirecting system
* fix: Fix electron login and mobile redirect
* Update Docker image name for GitHub registry
* Fix image name casing in Docker workflow
* Remove untagged image cleanup step from workflow
Removed the step to delete untagged image versions from the workflow.
* Change Docker login to use GHCR credentials
Updated Docker login credentials for GitHub Container Registry.
* Remove cache moving step from Docker workflow
Removed the step to move the build cache in the Docker workflow.
* Refactor Docker image workflow for versioning and builds
* Update docker-image.yml
* Update print statement from 'Hello' to 'Goodbye'
* Update docker build
* Rename docker-image.yml to docker.yml
* Rename electron-build.yml to electron.yml
* feat: add Russian translation and readme
* fix: Add russian
---------
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>
Co-authored-by: root
Co-authored-by: LukeGus
* fix: remove russian readme
* fix: Revert workflows back to normal
* fix: Session invoking all sessions and mobile success redirect not displaying
* fix: Logging out on one device logs out all on same user
* fix: Improve session clearing (possible RC)
* fix: Linux portable naming incorrect
* fix: Linux desktop not opening
* fix: Linux build failure
* fix: Linux build failure
* fix: Linux build failure
* fix: Linux build failure
* fix: Linux sandbox issue
* fix: Linux sandbox issue
* fix: Linux sandbox issue
* fix: Finalize electron
* fix: Database check failure (release cantidate)
* fix: Run cleanup and final fix for electron
---------
Co-authored-by: Ved Prakash <54140516+thorved@users.noreply.github.com>
Co-authored-by: P3RF3CTION
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: ZacharyZcR
Co-authored-by: ZacharyZcR <2903735704@qq.com>
Co-authored-by: Claude
Co-authored-by: blacksmith-sh[bot] <157653362+blacksmith-sh[bot]@users.noreply.github.com>
Co-authored-by: suraimu-team
Co-authored-by: Nikola Novoselec <12149536+nikolanovoselec@users.noreply.github.com>
Co-authored-by: Nikola Novoselec
Co-authored-by: xhemp <13650956+xhemp@users.noreply.github.com>
Co-authored-by: Robert Coroianu
Co-authored-by: Robert Coroianu
Co-authored-by: shizaterrorblade
Co-authored-by: root
---
.commitlintrc.json | 21 +
.dockerignore | 38 +-
.editorconfig | 14 +
.gitattributes | 31 +
.github/workflows/docker.yml | 23 +-
.github/workflows/electron.yml | 550 +-
.github/workflows/pr-check.yml | 35 +
.gitignore | 5 +-
.husky/commit-msg | 1 +
.husky/pre-commit | 1 +
.nvmrc | 2 +-
.prettierignore | 17 +-
.prettierrc | 10 +-
CONTRIBUTING.md | 2 +-
DOWNLOADS.md | 61 +
README-CN.md | 57 +-
README.md | 52 +-
build/Termix_Mac_App_Store.provisionprofile | Bin 0 -> 12224 bytes
build/entitlements.mac.inherit.plist | 14 +
build/entitlements.mac.plist | 14 +
build/entitlements.mas.inherit.plist | 16 +
build/entitlements.mas.plist | 20 +
build/notarize.cjs | 31 +
chocolatey/termix-ssh.nuspec | 35 +
chocolatey/tools/chocolateyinstall.ps1 | 20 +
chocolatey/tools/chocolateyuninstall.ps1 | 33 +
docker/Dockerfile | 20 +-
docker/nginx-https.conf | 65 +-
docker/nginx.conf | 73 +-
electron-builder.json | 78 +-
electron/main.cjs | 205 +-
flatpak/com.karmaa.termix.desktop | 11 +
flatpak/com.karmaa.termix.metainfo.xml | 77 +
flatpak/com.karmaa.termix.yml | 69 +
flatpak/flathub.json | 5 +
flatpak/prepare-flatpak.sh | 34 +
homebrew/termix.rb | 24 +
index.html | 30 +
package-lock.json | 5876 ++++++++++-------
package.json | 32 +-
public/icon-mac.png | Bin 0 -> 15692 bytes
public/icon.icns | Bin 125606 -> 245192 bytes
repo-images/Image 1.png | Bin 794146 -> 701186 bytes
repo-images/Image 2.png | Bin 316161 -> 611879 bytes
repo-images/Image 3.png | Bin 428089 -> 411711 bytes
repo-images/Image 4.png | Bin 798577 -> 416728 bytes
repo-images/Image 5.png | Bin 312311 -> 442790 bytes
repo-images/Image 6.png | Bin 368682 -> 313984 bytes
src/backend/dashboard.ts | 245 +
src/backend/database/database.ts | 181 +-
src/backend/database/db/index.ts | 137 +-
src/backend/database/db/schema.ts | 51 +
src/backend/database/routes/alerts.ts | 40 +-
src/backend/database/routes/credentials.ts | 113 +-
src/backend/database/routes/snippets.ts | 260 +
src/backend/database/routes/ssh.ts | 141 +-
src/backend/database/routes/users.ts | 976 ++-
src/backend/ssh/file-manager.ts | 514 +-
src/backend/ssh/server-stats.ts | 1088 ++-
src/backend/ssh/terminal.ts | 576 +-
src/backend/ssh/tunnel.ts | 168 +-
src/backend/starter.ts | 5 +-
src/backend/utils/auth-manager.ts | 525 +-
src/backend/utils/auto-ssl-setup.ts | 3 +-
src/backend/utils/data-crypto.ts | 148 +-
src/backend/utils/database-file-encryption.ts | 17 +-
src/backend/utils/database-migration.ts | 17 +-
src/backend/utils/database-save-trigger.ts | 9 -
src/backend/utils/field-crypto.ts | 28 +-
src/backend/utils/lazy-field-encryption.ts | 40 +-
src/backend/utils/logger.ts | 3 +-
src/backend/utils/simple-db-ops.ts | 43 +-
src/backend/utils/ssh-key-utils.ts | 14 +-
src/backend/utils/system-crypto.ts | 25 +-
src/backend/utils/user-agent-parser.ts | 239 +
src/backend/utils/user-crypto.ts | 26 +-
src/backend/utils/user-data-export.ts | 49 +-
src/backend/utils/user-data-import.ts | 33 +-
src/components/theme-provider.tsx | 1 +
src/components/ui/badge.tsx | 1 +
src/components/ui/button.tsx | 1 +
src/components/ui/chart.tsx | 24 +
src/components/ui/form.tsx | 1 +
src/components/ui/password-input.tsx | 3 +-
src/components/ui/shadcn-io/status/index.tsx | 5 +-
src/components/ui/sidebar.tsx | 12 +-
src/components/ui/slider.tsx | 61 +
src/components/ui/sonner.tsx | 13 +-
src/components/ui/textarea.tsx | 3 +-
src/constants/terminal-themes.ts | 711 ++
src/i18n/i18n.ts | 10 +-
src/lib/frontend-logger.ts | 8 +-
src/locales/de/translation.json | 103 +-
src/locales/en/translation.json | 214 +-
src/locales/pt-BR/translation.json | 1492 +++++
src/locales/ru/translation.json | 1591 +++++
src/locales/zh/translation.json | 187 +-
src/main.tsx | 60 +-
src/types/electron.d.ts | 43 +-
src/types/index.ts | 176 +-
src/types/stats-widgets.ts | 24 +
.../Apps/Host Manager/HostManagerEditor.tsx | 1550 -----
src/ui/Desktop/Apps/Server/Server.tsx | 480 --
src/ui/Desktop/Apps/Terminal/Terminal.tsx | 802 ---
src/ui/Desktop/Homepage/Homepage.tsx | 171 -
src/ui/Desktop/Homepage/HomepageAuth.tsx | 1082 ---
src/ui/Desktop/Homepage/HompageUpdateLog.tsx | 182 -
src/ui/Desktop/Navigation/Hosts/Host.tsx | 110 -
src/ui/Desktop/Navigation/LeftSidebar.tsx | 585 --
src/ui/Desktop/Navigation/Tabs/Tab.tsx | 165 -
src/ui/Desktop/Navigation/TopNavbar.tsx | 489 --
src/ui/Desktop/User/PasswordReset.tsx | 290 -
src/ui/Desktop/User/UserProfile.tsx | 264 -
src/ui/Mobile/Apps/Terminal/Terminal.tsx | 451 --
src/ui/Mobile/Homepage/HomepageAuth.tsx | 916 ---
src/ui/{Desktop => desktop}/DesktopApp.tsx | 108 +-
.../Admin => desktop/admin}/AdminSettings.tsx | 462 +-
.../apps/credentials}/CredentialEditor.tsx | 18 +-
.../apps/credentials}/CredentialSelector.tsx | 2 +-
.../apps/credentials}/CredentialViewer.tsx | 6 +-
.../apps/credentials}/CredentialsManager.tsx | 50 +-
src/ui/desktop/apps/dashboard/Dashboard.tsx | 704 ++
.../desktop/apps/dashboard/apps/UpdateLog.tsx | 215 +
.../apps/dashboard/apps/alerts/AlertCard.tsx} | 4 +-
.../dashboard/apps/alerts/AlertManager.tsx} | 14 +-
.../apps/file-manager}/DragIndicator.tsx | 0
.../apps/file-manager}/FileManager.tsx | 321 +-
.../file-manager}/FileManagerContextMenu.tsx | 3 -
.../apps/file-manager}/FileManagerGrid.tsx | 18 +-
.../apps/file-manager}/FileManagerSidebar.tsx | 87 +-
.../file-manager}/components/DiffViewer.tsx | 51 +-
.../file-manager}/components/DiffWindow.tsx | 0
.../components/DraggableWindow.tsx | 2 +-
.../file-manager}/components/FileViewer.tsx | 25 +-
.../file-manager}/components/FileWindow.tsx | 51 +-
.../components/TerminalWindow.tsx | 26 +-
.../components/WindowManager.tsx | 0
.../file-manager}/hooks/useDragAndDrop.ts | 0
.../file-manager}/hooks/useFileSelection.ts | 0
.../apps/host-manager}/HostManager.tsx | 64 +-
.../apps/host-manager/HostManagerEditor.tsx | 2676 ++++++++
.../apps/host-manager}/HostManagerViewer.tsx | 113 +-
src/ui/desktop/apps/server/Server.tsx | 506 ++
.../desktop/apps/server/widgets/CpuWidget.tsx | 101 +
.../apps/server/widgets/DiskWidget.tsx | 99 +
.../apps/server/widgets/MemoryWidget.tsx | 117 +
.../apps/server/widgets/NetworkWidget.tsx | 75 +
.../apps/server/widgets/ProcessesWidget.tsx | 87 +
.../apps/server/widgets/SystemWidget.tsx | 71 +
.../apps/server/widgets/UptimeWidget.tsx | 55 +
src/ui/desktop/apps/server/widgets/index.ts | 7 +
.../desktop/apps/terminal/SnippetsSidebar.tsx | 480 ++
src/ui/desktop/apps/terminal/Terminal.tsx | 1167 ++++
.../desktop/apps/terminal/TerminalPreview.tsx | 102 +
src/ui/desktop/apps/tools/SSHToolsSidebar.tsx | 351 +
src/ui/desktop/apps/tools/ToolsMenu.tsx | 55 +
.../Tunnel => desktop/apps/tunnel}/Tunnel.tsx | 8 +-
.../apps/tunnel}/TunnelObject.tsx | 12 +-
.../apps/tunnel}/TunnelViewer.tsx | 10 +-
src/ui/desktop/authentication/Auth.tsx | 1324 ++++
.../authentication/ElectronLoginForm.tsx | 290 +
.../authentication/ElectronServerConfig.tsx} | 114 +-
.../navigation}/AppView.tsx | 183 +-
src/ui/desktop/navigation/LeftSidebar.tsx | 545 ++
src/ui/desktop/navigation/SSHAuthDialog.tsx | 281 +
src/ui/desktop/navigation/TOTPDialog.tsx | 84 +
src/ui/desktop/navigation/TopNavbar.tsx | 521 ++
.../navigation/hosts}/FolderCard.tsx | 11 +-
src/ui/desktop/navigation/hosts/Host.tsx | 205 +
src/ui/desktop/navigation/tabs/Tab.tsx | 261 +
.../navigation/tabs}/TabContext.tsx | 95 +-
.../navigation/tabs}/TabDropdown.tsx | 6 +-
.../desktop/user/ElectronVersionCheck.tsx} | 93 +-
.../user}/LanguageSwitcher.tsx | 6 +
src/ui/desktop/user/PasswordReset.tsx | 161 +
.../User => desktop/user}/TOTPSetup.tsx | 22 +-
src/ui/desktop/user/UserProfile.tsx | 470 ++
src/ui/hooks/useDragToDesktop.ts | 23 +-
src/ui/hooks/useDragToSystemDesktop.ts | 74 +-
src/ui/main-axios.ts | 777 ++-
src/ui/{Mobile => mobile}/MobileApp.tsx | 37 +-
.../apps/navigation}/BottomNavbar.tsx | 2 +-
.../apps/navigation}/LeftSidebar.tsx | 15 +-
.../apps/navigation/hosts}/FolderCard.tsx | 11 +-
.../apps/navigation/hosts}/Host.tsx | 16 +-
.../apps/navigation/tabs}/TabContext.tsx | 4 +-
src/ui/mobile/apps/terminal/Terminal.tsx | 506 ++
.../apps/terminal}/TerminalKeyboard.tsx | 2 +-
.../apps/terminal}/kb-dark-theme.css | 0
src/ui/mobile/authentication/Auth.tsx | 1125 ++++
.../navigation}/BottomNavbar.tsx | 2 +-
.../navigation}/LeftSidebar.tsx | 15 +-
.../navigation/hosts}/FolderCard.tsx | 11 +-
.../navigation/hosts}/Host.tsx | 52 +-
.../navigation/tabs}/TabContext.tsx | 4 +-
vite.config.ts | 5 +-
196 files changed, 28495 insertions(+), 12878 deletions(-)
create mode 100644 .commitlintrc.json
create mode 100644 .editorconfig
create mode 100644 .gitattributes
create mode 100644 .github/workflows/pr-check.yml
create mode 100644 .husky/commit-msg
create mode 100644 .husky/pre-commit
create mode 100644 DOWNLOADS.md
create mode 100644 build/Termix_Mac_App_Store.provisionprofile
create mode 100644 build/entitlements.mac.inherit.plist
create mode 100644 build/entitlements.mac.plist
create mode 100644 build/entitlements.mas.inherit.plist
create mode 100644 build/entitlements.mas.plist
create mode 100644 build/notarize.cjs
create mode 100644 chocolatey/termix-ssh.nuspec
create mode 100644 chocolatey/tools/chocolateyinstall.ps1
create mode 100644 chocolatey/tools/chocolateyuninstall.ps1
create mode 100644 flatpak/com.karmaa.termix.desktop
create mode 100644 flatpak/com.karmaa.termix.metainfo.xml
create mode 100644 flatpak/com.karmaa.termix.yml
create mode 100644 flatpak/flathub.json
create mode 100644 flatpak/prepare-flatpak.sh
create mode 100644 homebrew/termix.rb
create mode 100644 public/icon-mac.png
create mode 100644 src/backend/dashboard.ts
create mode 100644 src/backend/database/routes/snippets.ts
create mode 100644 src/backend/utils/user-agent-parser.ts
create mode 100644 src/components/ui/chart.tsx
create mode 100644 src/components/ui/slider.tsx
create mode 100644 src/constants/terminal-themes.ts
create mode 100644 src/locales/pt-BR/translation.json
create mode 100644 src/locales/ru/translation.json
create mode 100644 src/types/stats-widgets.ts
delete mode 100644 src/ui/Desktop/Apps/Host Manager/HostManagerEditor.tsx
delete mode 100644 src/ui/Desktop/Apps/Server/Server.tsx
delete mode 100644 src/ui/Desktop/Apps/Terminal/Terminal.tsx
delete mode 100644 src/ui/Desktop/Homepage/Homepage.tsx
delete mode 100644 src/ui/Desktop/Homepage/HomepageAuth.tsx
delete mode 100644 src/ui/Desktop/Homepage/HompageUpdateLog.tsx
delete mode 100644 src/ui/Desktop/Navigation/Hosts/Host.tsx
delete mode 100644 src/ui/Desktop/Navigation/LeftSidebar.tsx
delete mode 100644 src/ui/Desktop/Navigation/Tabs/Tab.tsx
delete mode 100644 src/ui/Desktop/Navigation/TopNavbar.tsx
delete mode 100644 src/ui/Desktop/User/PasswordReset.tsx
delete mode 100644 src/ui/Desktop/User/UserProfile.tsx
delete mode 100644 src/ui/Mobile/Apps/Terminal/Terminal.tsx
delete mode 100644 src/ui/Mobile/Homepage/HomepageAuth.tsx
rename src/ui/{Desktop => desktop}/DesktopApp.tsx (62%)
rename src/ui/{Desktop/Admin => desktop/admin}/AdminSettings.tsx (68%)
rename src/ui/{Desktop/Apps/Credentials => desktop/apps/credentials}/CredentialEditor.tsx (99%)
rename src/ui/{Desktop/Apps/Credentials => desktop/apps/credentials}/CredentialSelector.tsx (99%)
rename src/ui/{Desktop/Apps/Credentials => desktop/apps/credentials}/CredentialViewer.tsx (99%)
rename src/ui/{Desktop/Apps/Credentials => desktop/apps/credentials}/CredentialsManager.tsx (98%)
create mode 100644 src/ui/desktop/apps/dashboard/Dashboard.tsx
create mode 100644 src/ui/desktop/apps/dashboard/apps/UpdateLog.tsx
rename src/ui/{Desktop/Homepage/HomepageAlertCard.tsx => desktop/apps/dashboard/apps/alerts/AlertCard.tsx} (97%)
rename src/ui/{Desktop/Homepage/HomepageAlertManager.tsx => desktop/apps/dashboard/apps/alerts/AlertManager.tsx} (94%)
rename src/ui/{Desktop/Homepage => desktop/apps/file-manager}/DragIndicator.tsx (100%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/FileManager.tsx (86%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/FileManagerContextMenu.tsx (99%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/FileManagerGrid.tsx (98%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/FileManagerSidebar.tsx (90%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/components/DiffViewer.tsx (91%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/components/DiffWindow.tsx (100%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/components/DraggableWindow.tsx (99%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/components/FileViewer.tsx (98%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/components/FileWindow.tsx (87%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/components/TerminalWindow.tsx (91%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/components/WindowManager.tsx (100%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/hooks/useDragAndDrop.ts (100%)
rename src/ui/{Desktop/Apps/File Manager => desktop/apps/file-manager}/hooks/useFileSelection.ts (100%)
rename src/ui/{Desktop/Apps/Host Manager => desktop/apps/host-manager}/HostManager.tsx (72%)
create mode 100644 src/ui/desktop/apps/host-manager/HostManagerEditor.tsx
rename src/ui/{Desktop/Apps/Host Manager => desktop/apps/host-manager}/HostManagerViewer.tsx (91%)
create mode 100644 src/ui/desktop/apps/server/Server.tsx
create mode 100644 src/ui/desktop/apps/server/widgets/CpuWidget.tsx
create mode 100644 src/ui/desktop/apps/server/widgets/DiskWidget.tsx
create mode 100644 src/ui/desktop/apps/server/widgets/MemoryWidget.tsx
create mode 100644 src/ui/desktop/apps/server/widgets/NetworkWidget.tsx
create mode 100644 src/ui/desktop/apps/server/widgets/ProcessesWidget.tsx
create mode 100644 src/ui/desktop/apps/server/widgets/SystemWidget.tsx
create mode 100644 src/ui/desktop/apps/server/widgets/UptimeWidget.tsx
create mode 100644 src/ui/desktop/apps/server/widgets/index.ts
create mode 100644 src/ui/desktop/apps/terminal/SnippetsSidebar.tsx
create mode 100644 src/ui/desktop/apps/terminal/Terminal.tsx
create mode 100644 src/ui/desktop/apps/terminal/TerminalPreview.tsx
create mode 100644 src/ui/desktop/apps/tools/SSHToolsSidebar.tsx
create mode 100644 src/ui/desktop/apps/tools/ToolsMenu.tsx
rename src/ui/{Desktop/Apps/Tunnel => desktop/apps/tunnel}/Tunnel.tsx (97%)
rename src/ui/{Desktop/Apps/Tunnel => desktop/apps/tunnel}/TunnelObject.tsx (98%)
rename src/ui/{Desktop/Apps/Tunnel => desktop/apps/tunnel}/TunnelViewer.tsx (92%)
create mode 100644 src/ui/desktop/authentication/Auth.tsx
create mode 100644 src/ui/desktop/authentication/ElectronLoginForm.tsx
rename src/ui/{Desktop/Electron Only/ServerConfig.tsx => desktop/authentication/ElectronServerConfig.tsx} (55%)
rename src/ui/{Desktop/Navigation => desktop/navigation}/AppView.tsx (79%)
create mode 100644 src/ui/desktop/navigation/LeftSidebar.tsx
create mode 100644 src/ui/desktop/navigation/SSHAuthDialog.tsx
create mode 100644 src/ui/desktop/navigation/TOTPDialog.tsx
create mode 100644 src/ui/desktop/navigation/TopNavbar.tsx
rename src/ui/{Desktop/Navigation/Hosts => desktop/navigation/hosts}/FolderCard.tsx (90%)
create mode 100644 src/ui/desktop/navigation/hosts/Host.tsx
create mode 100644 src/ui/desktop/navigation/tabs/Tab.tsx
rename src/ui/{Desktop/Navigation/Tabs => desktop/navigation/tabs}/TabContext.tsx (64%)
rename src/ui/{Desktop/Navigation/Tabs => desktop/navigation/tabs}/TabDropdown.tsx (96%)
rename src/{components/ui/version-check-modal.tsx => ui/desktop/user/ElectronVersionCheck.tsx} (66%)
rename src/ui/{Desktop/User => desktop/user}/LanguageSwitcher.tsx (88%)
create mode 100644 src/ui/desktop/user/PasswordReset.tsx
rename src/ui/{Desktop/User => desktop/user}/TOTPSetup.tsx (95%)
create mode 100644 src/ui/desktop/user/UserProfile.tsx
rename src/ui/{Mobile => mobile}/MobileApp.tsx (86%)
rename src/ui/{Mobile/Apps/Navigation => mobile/apps/navigation}/BottomNavbar.tsx (96%)
rename src/ui/{Mobile/Apps/Navigation => mobile/apps/navigation}/LeftSidebar.tsx (96%)
rename src/ui/{Mobile/Navigation/Hosts => mobile/apps/navigation/hosts}/FolderCard.tsx (90%)
rename src/ui/{Mobile/Apps/Navigation/Hosts => mobile/apps/navigation/hosts}/Host.tsx (86%)
rename src/ui/{Mobile/Apps/Navigation/Tabs => mobile/apps/navigation/tabs}/TabContext.tsx (95%)
create mode 100644 src/ui/mobile/apps/terminal/Terminal.tsx
rename src/ui/{Mobile/Apps/Terminal => mobile/apps/terminal}/TerminalKeyboard.tsx (99%)
rename src/ui/{Mobile/Apps/Terminal => mobile/apps/terminal}/kb-dark-theme.css (100%)
create mode 100644 src/ui/mobile/authentication/Auth.tsx
rename src/ui/{Mobile/Navigation => mobile/navigation}/BottomNavbar.tsx (96%)
rename src/ui/{Mobile/Navigation => mobile/navigation}/LeftSidebar.tsx (96%)
rename src/ui/{Mobile/Apps/Navigation/Hosts => mobile/navigation/hosts}/FolderCard.tsx (91%)
rename src/ui/{Mobile/Navigation/Hosts => mobile/navigation/hosts}/Host.tsx (67%)
rename src/ui/{Mobile/Navigation/Tabs => mobile/navigation/tabs}/TabContext.tsx (95%)
diff --git a/.commitlintrc.json b/.commitlintrc.json
new file mode 100644
index 00000000..cba65ea5
--- /dev/null
+++ b/.commitlintrc.json
@@ -0,0 +1,21 @@
+{
+ "extends": ["@commitlint/config-conventional"],
+ "rules": {
+ "type-enum": [
+ 2,
+ "always",
+ [
+ "feat",
+ "fix",
+ "docs",
+ "style",
+ "refactor",
+ "perf",
+ "test",
+ "chore",
+ "revert"
+ ]
+ ],
+ "subject-case": [0]
+ }
+}
diff --git a/.dockerignore b/.dockerignore
index 628b48d3..46be46b6 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,29 +1,24 @@
-# Dependencies
node_modules
npm-debug.log*
yarn-debug.log*
yarn-error.log*
-# Build outputs
dist
build
.next
.nuxt
-# Development files
.env.local
.env.development.local
.env.test.local
.env.production.local
-# IDE and editor files
.vscode
.idea
*.swp
*.swo
*~
-# OS generated files
.DS_Store
.DS_Store?
._*
@@ -32,98 +27,67 @@ build
ehthumbs.db
Thumbs.db
-# Git
.git
.gitignore
-# Documentation
README.md
README-CN.md
CONTRIBUTING.md
LICENSE
-# Docker files (avoid copying docker files into docker)
-# docker/ - commented out to allow entrypoint.sh to be copied
-
-# Repository images
repo-images/
-# Uploads directory
uploads/
-# Electron files (not needed for Docker)
electron/
electron-builder.json
-# Development and build artifacts
*.log
*.tmp
*.temp
-# Font files (we'll optimize these in Dockerfile)
-# public/fonts/*.ttf
-
-# Logs
logs
*.log
-# Runtime data
pids
*.pid
*.seed
*.pid.lock
-# Coverage directory used by tools like istanbul
coverage
-# nyc test coverage
.nyc_output
-# Dependency directories
jspm_packages/
-# Optional npm cache directory
.npm
-# Optional eslint cache
.eslintcache
-# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
-# Optional REPL history
.node_repl_history
-# Output of 'npm pack'
*.tgz
-# Yarn Integrity file
.yarn-integrity
-# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
-# next.js build output
.next
-# nuxt.js build output
.nuxt
-# vuepress build output
.vuepress/dist
-# Serverless directories
.serverless
-# FuseBox cache
.fusebox/
-# DynamoDB Local files
.dynamodb/
-# TernJS port file
-.tern-port
\ No newline at end of file
+.tern-port
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 00000000..e6478bbc
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,14 @@
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.{js,jsx,ts,tsx,json,css,scss,md,yml,yaml}]
+indent_style = space
+indent_size = 2
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..5350c239
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,31 @@
+* text=auto eol=lf
+
+*.js text eol=lf
+*.jsx text eol=lf
+*.ts text eol=lf
+*.tsx text eol=lf
+*.json text eol=lf
+*.css text eol=lf
+*.scss text eol=lf
+*.html text eol=lf
+*.md text eol=lf
+*.yaml text eol=lf
+*.yml text eol=lf
+
+*.sh text eol=lf
+*.bash text eol=lf
+
+*.bat text eol=crlf
+*.cmd text eol=crlf
+*.ps1 text eol=crlf
+
+*.png binary
+*.jpg binary
+*.jpeg binary
+*.gif binary
+*.ico binary
+*.svg binary
+*.woff binary
+*.woff2 binary
+*.ttf binary
+*.eot binary
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 80ab5da6..a3d02ef9 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -6,11 +6,14 @@ on:
version:
description: "Version to build (e.g., 1.8.0)"
required: true
- production:
- description: "Is this a production build?"
+ build_type:
+ description: "Build type"
required: true
- default: false
- type: boolean
+ default: "Development"
+ type: choice
+ options:
+ - Development
+ - Production
jobs:
build:
@@ -33,29 +36,25 @@ jobs:
id: tags
run: |
VERSION=${{ github.event.inputs.version }}
- PROD=${{ github.event.inputs.production }}
+ BUILD_TYPE=${{ github.event.inputs.build_type }}
TAGS=()
ALL_TAGS=()
- if [ "$PROD" = "true" ]; then
- # Production build → push release + latest to both GHCR and Docker Hub
+ if [ "$BUILD_TYPE" = "Production" ]; then
TAGS+=("release-$VERSION" "latest")
for tag in "${TAGS[@]}"; do
ALL_TAGS+=("ghcr.io/lukegus/termix:$tag")
ALL_TAGS+=("docker.io/bugattiguy527/termix:$tag")
done
else
- # Dev build → push only dev-x.x.x to GHCR
TAGS+=("dev-$VERSION")
for tag in "${TAGS[@]}"; do
ALL_TAGS+=("ghcr.io/lukegus/termix:$tag")
done
fi
- echo "ALL_TAGS=${ALL_TAGS[*]}" >> $GITHUB_ENV
- echo "All tags to build:"
- printf '%s\n' "${ALL_TAGS[@]}"
+ echo "ALL_TAGS=$(printf '%s\n' "${ALL_TAGS[@]}")" >> $GITHUB_ENV
- name: Login to GHCR
uses: docker/login-action@v3
@@ -65,7 +64,7 @@ jobs:
password: ${{ secrets.GHCR_TOKEN }}
- name: Login to Docker Hub (prod only)
- if: ${{ github.event.inputs.production == 'true' }}
+ if: ${{ github.event.inputs.build_type == 'Production' }}
uses: docker/login-action@v3
with:
username: bugattiguy527
diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml
index b50a8905..62bf5769 100644
--- a/.github/workflows/electron.yml
+++ b/.github/workflows/electron.yml
@@ -28,6 +28,8 @@ jobs:
build-windows:
runs-on: windows-latest
if: github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'windows' || github.event.inputs.build_type == ''
+ permissions:
+ contents: write
steps:
- name: Checkout repository
@@ -43,7 +45,6 @@ jobs:
- name: Install dependencies
run: |
- # Retry npm ci up to 3 times on failure
$maxAttempts = 3
$attempt = 1
while ($attempt -le $maxAttempts) {
@@ -55,7 +56,6 @@ jobs:
Write-Error "npm ci failed after $maxAttempts attempts"
exit 1
}
- Write-Host "npm ci attempt $attempt failed, retrying in 10 seconds..."
Start-Sleep -Seconds 10
$attempt++
}
@@ -66,79 +66,79 @@ jobs:
run: |
$VERSION = (Get-Content package.json | ConvertFrom-Json).version
echo "version=$VERSION" >> $env:GITHUB_OUTPUT
- echo "Building version: $VERSION"
- name: Build Windows (All Architectures)
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npm run build && npx electron-builder --win --x64 --ia32
- name: List release files
run: |
- echo "Contents of release directory:"
dir release
- name: Upload Windows x64 NSIS Installer
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_x64_*_nsis.exe') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_windows_x64_nsis.exe') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_windows_x64_nsis
- path: release/*_x64_*_nsis.exe
+ path: release/termix_windows_x64_nsis.exe
retention-days: 30
- name: Upload Windows ia32 NSIS Installer
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_ia32_*_nsis.exe') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_windows_ia32_nsis.exe') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_windows_ia32_nsis
- path: release/*_ia32_*_nsis.exe
+ path: release/termix_windows_ia32_nsis.exe
retention-days: 30
- name: Upload Windows x64 MSI Installer
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_x64_*_msi.msi') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_windows_x64_msi.msi') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_windows_x64_msi
- path: release/*_x64_*_msi.msi
+ path: release/termix_windows_x64_msi.msi
retention-days: 30
- name: Upload Windows ia32 MSI Installer
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_ia32_*_msi.msi') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_windows_ia32_msi.msi') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_windows_ia32_msi
- path: release/*_ia32_*_msi.msi
+ path: release/termix_windows_ia32_msi.msi
retention-days: 30
- name: Create Windows x64 Portable zip
if: hashFiles('release/win-unpacked/*') != ''
run: |
- $VERSION = "${{ steps.package-version.outputs.version }}"
- Compress-Archive -Path "release\win-unpacked\*" -DestinationPath "termix_windows_x64_${VERSION}_portable.zip"
+ Compress-Archive -Path "release\win-unpacked\*" -DestinationPath "termix_windows_x64_portable.zip"
- name: Create Windows ia32 Portable zip
if: hashFiles('release/win-ia32-unpacked/*') != ''
run: |
- $VERSION = "${{ steps.package-version.outputs.version }}"
- Compress-Archive -Path "release\win-ia32-unpacked\*" -DestinationPath "termix_windows_ia32_${VERSION}_portable.zip"
+ Compress-Archive -Path "release\win-ia32-unpacked\*" -DestinationPath "termix_windows_ia32_portable.zip"
- name: Upload Windows x64 Portable
uses: actions/upload-artifact@v4
- if: hashFiles('termix_windows_x64_*_portable.zip') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('termix_windows_x64_portable.zip') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_windows_x64_portable
- path: termix_windows_x64_*_portable.zip
+ path: termix_windows_x64_portable.zip
retention-days: 30
- name: Upload Windows ia32 Portable
uses: actions/upload-artifact@v4
- if: hashFiles('termix_windows_ia32_*_portable.zip') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('termix_windows_ia32_portable.zip') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_windows_ia32_portable
- path: termix_windows_ia32_*_portable.zip
+ path: termix_windows_ia32_portable.zip
retention-days: 30
build-linux:
runs-on: blacksmith-4vcpu-ubuntu-2404
if: github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'linux' || github.event.inputs.build_type == ''
+ permissions:
+ contents: write
steps:
- name: Checkout repository
@@ -152,19 +152,21 @@ jobs:
node-version: "20"
cache: "npm"
+ - name: Install system dependencies for AppImage
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y libfuse2
+
- name: Install dependencies
run: |
- rm -f package-lock.json
- # Retry npm install up to 3 times on failure
- for i in 1 2 3; do
- if npm install; then
+ for i in 1 2 3;
+ do
+ if npm ci; then
break
else
if [ $i -eq 3 ]; then
- echo "npm install failed after 3 attempts"
exit 1
fi
- echo "npm install attempt $i failed, retrying in 10 seconds..."
sleep 10
fi
done
@@ -172,107 +174,120 @@ jobs:
npm install --force @rollup/rollup-linux-arm64-gnu
npm install --force @rollup/rollup-linux-arm-gnueabihf
- - name: Build Linux (All Architectures)
- run: npm run build && npx electron-builder --linux --x64 --arm64 --armv7l
+ - name: Build Linux x64
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ DEBUG: electron-builder
+ run: npm run build && npx electron-builder --linux --x64
- - name: Rename tar.gz files to match convention
+ - name: Build Linux arm64 and armv7l
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: npx electron-builder --linux --arm64 --armv7l
+
+ - name: Rename Linux artifacts for consistency
run: |
- VERSION=$(node -p "require('./package.json').version")
cd release
- # Rename x64 tar.gz if it exists
- if [ -f "termix-${VERSION}-x64.tar.gz" ]; then
- mv "termix-${VERSION}-x64.tar.gz" "termix_linux_x64_${VERSION}_portable.tar.gz"
- echo "Renamed x64 tar.gz"
+ if [ -f "termix_linux_amd64_deb.deb" ]; then
+ mv "termix_linux_amd64_deb.deb" "termix_linux_x64_deb.deb"
fi
- # Rename arm64 tar.gz if it exists
- if [ -f "termix-${VERSION}-arm64.tar.gz" ]; then
- mv "termix-${VERSION}-arm64.tar.gz" "termix_linux_arm64_${VERSION}_portable.tar.gz"
- echo "Renamed arm64 tar.gz"
- fi
-
- # Rename armv7l tar.gz if it exists
- if [ -f "termix-${VERSION}-armv7l.tar.gz" ]; then
- mv "termix-${VERSION}-armv7l.tar.gz" "termix_linux_armv7l_${VERSION}_portable.tar.gz"
- echo "Renamed armv7l tar.gz"
+ if [ -f "termix_linux_x86_64_appimage.AppImage" ]; then
+ mv "termix_linux_x86_64_appimage.AppImage" "termix_linux_x64_appimage.AppImage"
fi
cd ..
- name: List release files
run: |
- echo "Contents of release directory:"
ls -la release/
+ - name: Debug electron-builder output
+ if: always()
+ run: |
+ if [ -f "release/builder-debug.yml" ]; then
+ cat release/builder-debug.yml
+ fi
+
- name: Upload Linux x64 AppImage
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_x64_*_appimage.AppImage') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_linux_x64_appimage.AppImage') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_linux_x64_appimage
- path: release/*_x64_*_appimage.AppImage
+ path: release/termix_linux_x64_appimage.AppImage
retention-days: 30
- name: Upload Linux arm64 AppImage
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_arm64_*_appimage.AppImage') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_linux_arm64_appimage.AppImage') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_linux_arm64_appimage
- path: release/*_arm64_*_appimage.AppImage
+ path: release/termix_linux_arm64_appimage.AppImage
+ retention-days: 30
+
+ - name: Upload Linux armv7l AppImage
+ uses: actions/upload-artifact@v4
+ if: hashFiles('release/termix_linux_armv7l_appimage.AppImage') != '' && github.event.inputs.artifact_destination != 'none'
+ with:
+ name: termix_linux_armv7l_appimage
+ path: release/termix_linux_armv7l_appimage.AppImage
retention-days: 30
- name: Upload Linux x64 DEB
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_x64_*_deb.deb') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_linux_x64_deb.deb') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_linux_x64_deb
- path: release/*_x64_*_deb.deb
+ path: release/termix_linux_x64_deb.deb
retention-days: 30
- name: Upload Linux arm64 DEB
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_arm64_*_deb.deb') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_linux_arm64_deb.deb') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_linux_arm64_deb
- path: release/*_arm64_*_deb.deb
+ path: release/termix_linux_arm64_deb.deb
retention-days: 30
- name: Upload Linux armv7l DEB
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_armv7l_*_deb.deb') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_linux_armv7l_deb.deb') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_linux_armv7l_deb
- path: release/*_armv7l_*_deb.deb
+ path: release/termix_linux_armv7l_deb.deb
retention-days: 30
- name: Upload Linux x64 tar.gz
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_x64_*_portable.tar.gz') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_linux_x64_portable.tar.gz') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_linux_x64_portable
- path: release/*_x64_*_portable.tar.gz
+ path: release/termix_linux_x64_portable.tar.gz
retention-days: 30
- name: Upload Linux arm64 tar.gz
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_arm64_*_portable.tar.gz') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_linux_arm64_portable.tar.gz') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_linux_arm64_portable
- path: release/*_arm64_*_portable.tar.gz
+ path: release/termix_linux_arm64_portable.tar.gz
retention-days: 30
- name: Upload Linux armv7l tar.gz
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_armv7l_*_portable.tar.gz') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_linux_armv7l_portable.tar.gz') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_linux_armv7l_portable
- path: release/*_armv7l_*_portable.tar.gz
+ path: release/termix_linux_armv7l_portable.tar.gz
retention-days: 30
build-macos:
runs-on: macos-latest
if: github.event.inputs.build_type == 'macos' || github.event.inputs.build_type == 'all'
needs: []
+ permissions:
+ contents: write
steps:
- name: Checkout repository
@@ -288,16 +303,14 @@ jobs:
- name: Install dependencies
run: |
- # Retry npm ci up to 3 times on failure
- for i in 1 2 3; do
+ for i in 1 2 3;
+ do
if npm ci; then
break
else
if [ $i -eq 3 ]; then
- echo "npm ci failed after 3 attempts"
exit 1
fi
- echo "npm ci attempt $i failed, retrying in 10 seconds..."
sleep 10
fi
done
@@ -309,9 +322,6 @@ jobs:
run: |
if [ -n "${{ secrets.MAC_BUILD_CERTIFICATE_BASE64 }}" ] && [ -n "${{ secrets.MAC_P12_PASSWORD }}" ]; then
echo "has_certs=true" >> $GITHUB_OUTPUT
- else
- echo "has_certs=false" >> $GITHUB_OUTPUT
- echo "⚠️ Code signing certificates not configured. MAS build will be unsigned."
fi
- name: Import Code Signing Certificates
@@ -326,69 +336,47 @@ jobs:
INSTALLER_CERT_PATH=$RUNNER_TEMP/installer_certificate.p12
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
- # Decode certificates
echo -n "$MAC_BUILD_CERTIFICATE_BASE64" | base64 --decode -o $APP_CERT_PATH
if [ -n "$MAC_INSTALLER_CERTIFICATE_BASE64" ]; then
- echo "Decoding installer certificate..."
echo -n "$MAC_INSTALLER_CERTIFICATE_BASE64" | base64 --decode -o $INSTALLER_CERT_PATH
- else
- echo "⚠️ MAC_INSTALLER_CERTIFICATE_BASE64 is empty"
fi
- # Create and configure keychain
security create-keychain -p "$MAC_KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$MAC_KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
- # Import application certificate
- echo "Importing application certificate..."
security import $APP_CERT_PATH -P "$MAC_P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
- # Import installer certificate if it exists
if [ -f "$INSTALLER_CERT_PATH" ]; then
- echo "Importing installer certificate..."
security import $INSTALLER_CERT_PATH -P "$MAC_P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
- else
- echo "⚠️ Installer certificate file not found, skipping import"
fi
security list-keychain -d user -s $KEYCHAIN_PATH
- echo "Imported certificates:"
security find-identity -v -p codesigning $KEYCHAIN_PATH
- name: Build macOS App Store Package
if: steps.check_certs.outputs.has_certs == 'true'
env:
ELECTRON_BUILDER_ALLOW_UNRESOLVED_DEPENDENCIES: true
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
- # Get current version for display
CURRENT_VERSION=$(node -p "require('./package.json').version")
BUILD_VERSION="${{ github.run_number }}"
- echo "✅ Package version: $CURRENT_VERSION (unchanged)"
- echo "✅ Build number for Apple: $BUILD_VERSION"
-
- # Build MAS with custom buildVersion
npm run build && npx electron-builder --mac mas --universal --config.buildVersion="$BUILD_VERSION"
- name: Clean up MAS keychain before DMG build
if: steps.check_certs.outputs.has_certs == 'true'
run: |
security delete-keychain $RUNNER_TEMP/app-signing.keychain-db || true
- echo "Cleaned up MAS keychain"
- name: Check for Developer ID Certificates
id: check_dev_id_certs
run: |
if [ -n "${{ secrets.DEVELOPER_ID_CERTIFICATE_BASE64 }}" ] && [ -n "${{ secrets.DEVELOPER_ID_P12_PASSWORD }}" ]; then
echo "has_dev_id_certs=true" >> $GITHUB_OUTPUT
- echo "✅ Developer ID certificates configured for DMG signing"
- else
- echo "has_dev_id_certs=false" >> $GITHUB_OUTPUT
- echo "⚠️ Developer ID certificates not configured. DMG will be unsigned."
- echo "Add DEVELOPER_ID_CERTIFICATE_BASE64 and DEVELOPER_ID_P12_PASSWORD secrets to enable DMG signing."
fi
- name: Import Developer ID Certificates
@@ -403,34 +391,24 @@ jobs:
DEV_INSTALLER_CERT_PATH=$RUNNER_TEMP/dev_installer_certificate.p12
KEYCHAIN_PATH=$RUNNER_TEMP/dev-signing.keychain-db
- # Decode Developer ID certificate
echo -n "$DEVELOPER_ID_CERTIFICATE_BASE64" | base64 --decode -o $DEV_CERT_PATH
if [ -n "$DEVELOPER_ID_INSTALLER_CERTIFICATE_BASE64" ]; then
- echo "Decoding Developer ID installer certificate..."
echo -n "$DEVELOPER_ID_INSTALLER_CERTIFICATE_BASE64" | base64 --decode -o $DEV_INSTALLER_CERT_PATH
- else
- echo "⚠️ DEVELOPER_ID_INSTALLER_CERTIFICATE_BASE64 is empty (optional)"
fi
- # Create and configure keychain
security create-keychain -p "$MAC_KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$MAC_KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
- # Import Developer ID Application certificate
- echo "Importing Developer ID Application certificate..."
security import $DEV_CERT_PATH -P "$DEVELOPER_ID_P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
- # Import Developer ID Installer certificate if it exists
if [ -f "$DEV_INSTALLER_CERT_PATH" ]; then
- echo "Importing Developer ID Installer certificate..."
security import $DEV_INSTALLER_CERT_PATH -P "$DEVELOPER_ID_P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
fi
security list-keychain -d user -s $KEYCHAIN_PATH
- echo "Imported Developer ID certificates:"
security find-identity -v -p codesigning $KEYCHAIN_PATH
- name: Build macOS DMG
@@ -441,52 +419,48 @@ jobs:
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
run: |
- # Build DMG without running npm run build again (already built above or skip if no certs)
- if [ "${{ steps.check_certs.outputs.has_certs }}" == "true" ]; then
- # Frontend already built, just package DMG
- npx electron-builder --mac dmg --universal --x64 --arm64
- else
- # No certs, need to build frontend first
- npm run build && npx electron-builder --mac dmg --universal --x64 --arm64
+ if [ "${{ steps.check_certs.outputs.has_certs }}" != "true" ]; then
+ npm run build
fi
+ export GH_TOKEN="${{ secrets.GITHUB_TOKEN }}"
+ npx electron-builder --mac dmg --universal --x64 --arm64 --publish never
- name: List release directory
if: steps.check_certs.outputs.has_certs == 'true'
run: |
- echo "Contents of release directory:"
ls -R release/ || echo "Release directory not found"
- name: Upload macOS MAS PKG
- if: steps.check_certs.outputs.has_certs == 'true' && hashFiles('release/*_*_*_mas.pkg') != '' && (github.event.inputs.artifact_destination == 'file' || github.event.inputs.artifact_destination == 'release' || github.event.inputs.artifact_destination == 'submit')
+ if: steps.check_certs.outputs.has_certs == 'true' && hashFiles('release/termix_macos_universal_mas.pkg') != '' && (github.event.inputs.artifact_destination == 'file' || github.event.inputs.artifact_destination == 'release' || github.event.inputs.artifact_destination == 'submit')
uses: actions/upload-artifact@v4
with:
- name: termix_macos_mas
- path: release/*_*_*_mas.pkg
+ name: termix_macos_universal_mas
+ path: release/termix_macos_universal_mas.pkg
retention-days: 30
if-no-files-found: warn
- name: Upload macOS Universal DMG
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_universal_*_dmg.dmg') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_macos_universal_dmg.dmg') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_macos_universal_dmg
- path: release/*_universal_*_dmg.dmg
+ path: release/termix_macos_universal_dmg.dmg
retention-days: 30
- name: Upload macOS x64 DMG
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_x64_*_dmg.dmg') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_macos_x64_dmg.dmg') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_macos_x64_dmg
- path: release/*_x64_*_dmg.dmg
+ path: release/termix_macos_x64_dmg.dmg
retention-days: 30
- name: Upload macOS arm64 DMG
uses: actions/upload-artifact@v4
- if: hashFiles('release/*_arm64_*_dmg.dmg') != '' && github.event.inputs.artifact_destination != 'none'
+ if: hashFiles('release/termix_macos_arm64_dmg.dmg') != '' && github.event.inputs.artifact_destination != 'none'
with:
name: termix_macos_arm64_dmg
- path: release/*_arm64_*_dmg.dmg
+ path: release/termix_macos_arm64_dmg.dmg
retention-days: 30
- name: Check for App Store Connect API credentials
@@ -495,51 +469,35 @@ jobs:
run: |
if [ -n "${{ secrets.APPLE_KEY_ID }}" ] && [ -n "${{ secrets.APPLE_ISSUER_ID }}" ] && [ -n "${{ secrets.APPLE_KEY_CONTENT }}" ]; then
echo "has_credentials=true" >> $GITHUB_OUTPUT
- if [ "${{ github.event.inputs.artifact_destination }}" == "submit" ]; then
- echo "✅ App Store Connect API credentials found. Will deploy to TestFlight."
- else
- echo "ℹ️ App Store Connect API credentials found, but store submission is disabled."
- fi
- else
- echo "has_credentials=false" >> $GITHUB_OUTPUT
- echo "⚠️ App Store Connect API credentials not configured. Skipping deployment."
- echo "Add APPLE_KEY_ID, APPLE_ISSUER_ID, and APPLE_KEY_CONTENT secrets to enable automatic deployment."
fi
- name: Setup Ruby for Fastlane
if: steps.check_asc_creds.outputs.has_credentials == 'true' && github.event.inputs.artifact_destination == 'submit'
uses: ruby/setup-ruby@v1
with:
- ruby-version: '3.2'
+ ruby-version: "3.2"
bundler-cache: false
- name: Install Fastlane
if: steps.check_asc_creds.outputs.has_credentials == 'true' && github.event.inputs.artifact_destination == 'submit'
run: |
gem install fastlane -N
- fastlane --version
- name: Deploy to App Store Connect (TestFlight)
if: steps.check_asc_creds.outputs.has_credentials == 'true' && github.event.inputs.artifact_destination == 'submit'
run: |
PKG_FILE=$(find release -name "*.pkg" -type f | head -n 1)
if [ -z "$PKG_FILE" ]; then
- echo "Error: No .pkg file found in release directory"
exit 1
fi
- echo "Found package: $PKG_FILE"
- # Create API key file
mkdir -p ~/private_keys
echo "${{ secrets.APPLE_KEY_CONTENT }}" | base64 --decode > ~/private_keys/AuthKey_${{ secrets.APPLE_KEY_ID }}.p8
- # Upload to App Store Connect using xcrun altool
xcrun altool --upload-app -f "$PKG_FILE" \
--type macos \
--apiKey "${{ secrets.APPLE_KEY_ID }}" \
--apiIssuer "${{ secrets.APPLE_ISSUER_ID }}"
-
- echo "✅ Upload complete! Build will appear in App Store Connect after processing (10-30 minutes)"
continue-on-error: true
- name: Clean up keychains
@@ -566,7 +524,6 @@ jobs:
run: |
$VERSION = (Get-Content package.json | ConvertFrom-Json).version
echo "version=$VERSION" >> $env:GITHUB_OUTPUT
- echo "Building Chocolatey package for version: $VERSION"
- name: Download Windows x64 MSI artifact
uses: actions/download-artifact@v4
@@ -584,8 +541,6 @@ jobs:
echo "msi_name=$MSI_NAME" >> $env:GITHUB_OUTPUT
echo "checksum=$CHECKSUM" >> $env:GITHUB_OUTPUT
- echo "MSI File: $MSI_NAME"
- echo "SHA256: $CHECKSUM"
- name: Prepare Chocolatey package
run: |
@@ -593,33 +548,20 @@ jobs:
$CHECKSUM = "${{ steps.msi-info.outputs.checksum }}"
$MSI_NAME = "${{ steps.msi-info.outputs.msi_name }}"
- # Construct the download URL with the actual release tag format
$DOWNLOAD_URL = "https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$MSI_NAME"
- # Copy chocolatey files to build directory
New-Item -ItemType Directory -Force -Path "choco-build"
Copy-Item -Path "chocolatey\*" -Destination "choco-build" -Recurse -Force
- # Update chocolateyinstall.ps1 with actual values
$installScript = Get-Content "choco-build\tools\chocolateyinstall.ps1" -Raw -Encoding UTF8
$installScript = $installScript -replace 'DOWNLOAD_URL_PLACEHOLDER', $DOWNLOAD_URL
$installScript = $installScript -replace 'CHECKSUM_PLACEHOLDER', $CHECKSUM
[System.IO.File]::WriteAllText("$PWD\choco-build\tools\chocolateyinstall.ps1", $installScript, [System.Text.UTF8Encoding]::new($false))
- # Update nuspec with version (preserve UTF-8 encoding without BOM)
$nuspec = Get-Content "choco-build\termix-ssh.nuspec" -Raw -Encoding UTF8
$nuspec = $nuspec -replace 'VERSION_PLACEHOLDER', $VERSION
[System.IO.File]::WriteAllText("$PWD\choco-build\termix-ssh.nuspec", $nuspec, [System.Text.UTF8Encoding]::new($false))
- echo "Chocolatey package prepared for version $VERSION"
- echo "Download URL: $DOWNLOAD_URL"
-
- # Verify the nuspec is valid
- echo ""
- echo "Verifying nuspec content:"
- Get-Content "choco-build\termix-ssh.nuspec" -Head 10
- echo ""
-
- name: Install Chocolatey
run: |
Set-ExecutionPolicy Bypass -Scope Process -Force
@@ -629,29 +571,17 @@ jobs:
- name: Pack Chocolatey package
run: |
cd choco-build
- echo "Packing Chocolatey package..."
choco pack termix-ssh.nuspec
if ($LASTEXITCODE -ne 0) {
- echo "❌ Failed to pack Chocolatey package"
- exit 1
+ throw "Chocolatey push failed with exit code $LASTEXITCODE"
}
- echo ""
- echo "✅ Package created successfully"
- echo "Package contents:"
- Get-ChildItem *.nupkg | ForEach-Object { echo $_.Name }
-
- name: Check for Chocolatey API Key
id: check_choco_key
run: |
if ("${{ secrets.CHOCOLATEY_API_KEY }}" -ne "") {
echo "has_key=true" >> $env:GITHUB_OUTPUT
- echo "✅ Chocolatey API key found. Will push to Chocolatey."
- } else {
- echo "has_key=false" >> $env:GITHUB_OUTPUT
- echo "⚠️ Chocolatey API key not configured. Package will be created but not pushed."
- echo "Add CHOCOLATEY_API_KEY secret to enable automatic submission."
}
- name: Push to Chocolatey
@@ -664,29 +594,10 @@ jobs:
try {
choco push "termix-ssh.$VERSION.nupkg" --source https://push.chocolatey.org/
if ($LASTEXITCODE -eq 0) {
- echo ""
- echo "✅ Package pushed to Chocolatey successfully!"
- echo "View at: https://community.chocolatey.org/packages/termix-ssh/$VERSION"
} else {
throw "Chocolatey push failed with exit code $LASTEXITCODE"
}
} catch {
- echo ""
- echo "❌ Failed to push to Chocolatey"
- echo ""
- echo "Common reasons:"
- echo "1. Package ID 'termix-ssh' is already owned by another user"
- echo "2. You need to register/claim the package ID first"
- echo "3. API key doesn't have push permissions"
- echo ""
- echo "Solutions:"
- echo "1. Check if package exists: https://community.chocolatey.org/packages/termix-ssh"
- echo "2. If it exists and is yours, contact Chocolatey support to claim it"
- echo "3. Register a new package ID at: https://community.chocolatey.org/"
- echo ""
- echo "The package artifact has been saved for manual submission."
- echo ""
- exit 1
}
- name: Upload Chocolatey package as artifact
@@ -716,7 +627,6 @@ jobs:
RELEASE_DATE=$(date +%Y-%m-%d)
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "release_date=$RELEASE_DATE" >> $GITHUB_OUTPUT
- echo "Building Flatpak submission for version: $VERSION"
- name: Download Linux x64 AppImage artifact
uses: actions/download-artifact@v4
@@ -735,12 +645,10 @@ jobs:
run: |
VERSION="${{ steps.package-version.outputs.version }}"
- # x64 AppImage
APPIMAGE_X64_FILE=$(find artifact-x64 -name "*.AppImage" -type f | head -n 1)
APPIMAGE_X64_NAME=$(basename "$APPIMAGE_X64_FILE")
CHECKSUM_X64=$(sha256sum "$APPIMAGE_X64_FILE" | awk '{print $1}')
- # arm64 AppImage
APPIMAGE_ARM64_FILE=$(find artifact-arm64 -name "*.AppImage" -type f | head -n 1)
APPIMAGE_ARM64_NAME=$(basename "$APPIMAGE_ARM64_FILE")
CHECKSUM_ARM64=$(sha256sum "$APPIMAGE_ARM64_FILE" | awk '{print $1}')
@@ -750,11 +658,6 @@ jobs:
echo "appimage_arm64_name=$APPIMAGE_ARM64_NAME" >> $GITHUB_OUTPUT
echo "checksum_arm64=$CHECKSUM_ARM64" >> $GITHUB_OUTPUT
- echo "x64 AppImage: $APPIMAGE_X64_NAME"
- echo "x64 SHA256: $CHECKSUM_X64"
- echo "arm64 AppImage: $APPIMAGE_ARM64_NAME"
- echo "arm64 SHA256: $CHECKSUM_ARM64"
-
- name: Install ImageMagick for icon generation
run: |
sudo apt-get update
@@ -769,101 +672,26 @@ jobs:
APPIMAGE_X64_NAME="${{ steps.appimage-info.outputs.appimage_x64_name }}"
APPIMAGE_ARM64_NAME="${{ steps.appimage-info.outputs.appimage_arm64_name }}"
- # Create submission directory
mkdir -p flatpak-submission
- # Copy Flatpak files to submission directory
cp flatpak/com.karmaa.termix.yml flatpak-submission/
cp flatpak/com.karmaa.termix.desktop flatpak-submission/
cp flatpak/com.karmaa.termix.metainfo.xml flatpak-submission/
cp flatpak/flathub.json flatpak-submission/
- # Copy and prepare icons
cp public/icon.svg flatpak-submission/com.karmaa.termix.svg
convert public/icon.png -resize 256x256 flatpak-submission/icon-256.png
convert public/icon.png -resize 128x128 flatpak-submission/icon-128.png
- # Update manifest with version and checksums
sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" flatpak-submission/com.karmaa.termix.yml
sed -i "s/CHECKSUM_X64_PLACEHOLDER/$CHECKSUM_X64/g" flatpak-submission/com.karmaa.termix.yml
sed -i "s/CHECKSUM_ARM64_PLACEHOLDER/$CHECKSUM_ARM64/g" flatpak-submission/com.karmaa.termix.yml
- # Update metainfo with version and date
sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" flatpak-submission/com.karmaa.termix.metainfo.xml
sed -i "s/DATE_PLACEHOLDER/$RELEASE_DATE/g" flatpak-submission/com.karmaa.termix.metainfo.xml
- echo "✅ Flatpak submission files prepared for version $VERSION"
- echo "x64 Download URL: https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$APPIMAGE_X64_NAME"
- echo "arm64 Download URL: https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$APPIMAGE_ARM64_NAME"
-
- - name: Create submission instructions
- run: |
- cat > flatpak-submission/SUBMISSION_INSTRUCTIONS.md << 'EOF'
- # Flathub Submission Instructions for Termix
-
- ## Automatic Submission (Recommended)
-
- All files needed for Flathub submission are in this artifact. Follow these steps:
-
- 1. **Fork the Flathub repository**:
- - Go to https://github.com/flathub/flathub
- - Click "Fork" button
-
- 2. **Clone your fork**:
- ```bash
- git clone https://github.com/YOUR-USERNAME/flathub.git
- cd flathub
- git checkout -b com.karmaa.termix
- ```
-
- 3. **Copy all files from this artifact** to the root of your flathub fork
-
- 4. **Commit and push**:
- ```bash
- git add .
- git commit -m "Add Termix ${{ steps.package-version.outputs.version }}"
- git push origin com.karmaa.termix
- ```
-
- 5. **Create Pull Request**:
- - Go to https://github.com/YOUR-USERNAME/flathub
- - Click "Compare & pull request"
- - Submit PR to flathub/flathub
-
- ## Files in this submission:
-
- - `com.karmaa.termix.yml` - Flatpak manifest
- - `com.karmaa.termix.desktop` - Desktop entry
- - `com.karmaa.termix.metainfo.xml` - AppStream metadata
- - `flathub.json` - Flathub configuration
- - `com.karmaa.termix.svg` - SVG icon
- - `icon-256.png` - 256x256 icon
- - `icon-128.png` - 128x128 icon
-
- ## Version Information:
-
- - Version: ${{ steps.package-version.outputs.version }}
- - Release Date: ${{ steps.package-version.outputs.release_date }}
- - x64 AppImage SHA256: ${{ steps.appimage-info.outputs.checksum_x64 }}
- - arm64 AppImage SHA256: ${{ steps.appimage-info.outputs.checksum_arm64 }}
-
- ## After Submission:
-
- 1. Flathub maintainers will review your submission (usually 1-5 days)
- 2. They may request changes - be responsive to feedback
- 3. Once approved, Termix will be available via: `flatpak install flathub com.karmaa.termix`
-
- ## Resources:
-
- - [Flathub Submission Guidelines](https://docs.flathub.org/docs/for-app-authors/submission)
- - [Flatpak Documentation](https://docs.flatpak.org/)
- EOF
-
- echo "✅ Created submission instructions"
-
- name: List submission files
run: |
- echo "Flatpak submission files:"
ls -la flatpak-submission/
- name: Upload Flatpak submission as artifact
@@ -873,19 +701,6 @@ jobs:
path: flatpak-submission/*
retention-days: 30
- - name: Display next steps
- run: |
- echo ""
- echo "🎉 Flatpak submission files ready!"
- echo ""
- echo "📦 Download the 'flatpak-submission' artifact and follow SUBMISSION_INSTRUCTIONS.md"
- echo ""
- echo "Quick summary:"
- echo "1. Fork https://github.com/flathub/flathub"
- echo "2. Copy artifact files to your fork"
- echo "3. Create PR to flathub/flathub"
- echo ""
-
submit-to-homebrew:
runs-on: macos-latest
if: github.event.inputs.artifact_destination == 'submit'
@@ -904,7 +719,6 @@ jobs:
run: |
VERSION=$(node -p "require('./package.json').version")
echo "version=$VERSION" >> $GITHUB_OUTPUT
- echo "Building Homebrew Cask for version: $VERSION"
- name: Download macOS Universal DMG artifact
uses: actions/download-artifact@v4
@@ -922,8 +736,6 @@ jobs:
echo "dmg_name=$DMG_NAME" >> $GITHUB_OUTPUT
echo "checksum=$CHECKSUM" >> $GITHUB_OUTPUT
- echo "DMG File: $DMG_NAME"
- echo "SHA256: $CHECKSUM"
- name: Prepare Homebrew submission files
run: |
@@ -931,155 +743,24 @@ jobs:
CHECKSUM="${{ steps.dmg-info.outputs.checksum }}"
DMG_NAME="${{ steps.dmg-info.outputs.dmg_name }}"
- # Create submission directory
mkdir -p homebrew-submission/Casks/t
- # Copy Homebrew cask file
cp homebrew/termix.rb homebrew-submission/Casks/t/termix.rb
cp homebrew/README.md homebrew-submission/
- # Update cask with version and checksum
sed -i '' "s/VERSION_PLACEHOLDER/$VERSION/g" homebrew-submission/Casks/t/termix.rb
sed -i '' "s/CHECKSUM_PLACEHOLDER/$CHECKSUM/g" homebrew-submission/Casks/t/termix.rb
- echo "✅ Homebrew Cask prepared for version $VERSION"
- echo "Download URL: https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$DMG_NAME"
-
- name: Verify Cask syntax
run: |
- # Install Homebrew if not present (should be on macos-latest)
if ! command -v brew &> /dev/null; then
- echo "Installing Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
- # Basic syntax check
ruby -c homebrew-submission/Casks/t/termix.rb
- echo "✅ Cask syntax is valid"
-
- - name: Create submission instructions
- run: |
- cat > homebrew-submission/SUBMISSION_INSTRUCTIONS.md << 'EOF'
- # Homebrew Cask Submission Instructions for Termix
-
- ## Option 1: Submit to Official Homebrew Cask (Recommended)
-
- ### Prerequisites
- - macOS with Homebrew installed
- - GitHub account
-
- ### Steps
-
- 1. **Fork the Homebrew Cask repository**:
- - Go to https://github.com/Homebrew/homebrew-cask
- - Click "Fork" button
-
- 2. **Clone your fork**:
- ```bash
- git clone https://github.com/YOUR-USERNAME/homebrew-cask.git
- cd homebrew-cask
- git checkout -b termix
- ```
-
- 3. **Copy the cask file**:
- - Copy `Casks/t/termix.rb` from this artifact to your fork at `Casks/t/termix.rb`
- - Note: Casks are organized by first letter in subdirectories
-
- 4. **Test the cask locally**:
- ```bash
- brew install --cask ./Casks/t/termix.rb
- brew uninstall --cask termix
- ```
-
- 5. **Run audit checks**:
- ```bash
- brew audit --cask --online ./Casks/t/termix.rb
- brew style ./Casks/t/termix.rb
- ```
-
- 6. **Commit and push**:
- ```bash
- git add Casks/t/termix.rb
- git commit -m "Add Termix ${{ steps.package-version.outputs.version }}"
- git push origin termix
- ```
-
- 7. **Create Pull Request**:
- - Go to https://github.com/YOUR-USERNAME/homebrew-cask
- - Click "Compare & pull request"
- - Fill in the PR template
- - Submit to Homebrew/homebrew-cask
-
- ### PR Requirements
-
- Your PR should include:
- - Clear commit message: "Add Termix X.Y.Z" or "Update Termix to X.Y.Z"
- - All audit checks passing
- - Working download URL
- - Valid SHA256 checksum
-
- ## Option 2: Create Your Own Tap (Alternative)
-
- If you want more control and faster updates:
-
- 1. **Create a tap repository**:
- - Create repo: `Termix-SSH/homebrew-termix`
- - Add `Casks/termix.rb` to the repo
-
- 2. **Users install with**:
- ```bash
- brew tap termix-ssh/termix
- brew install --cask termix
- ```
-
- ### Advantages of Custom Tap
- - No approval process
- - Instant updates
- - Full control
- - Can include beta versions
-
- ### Disadvantages
- - Less discoverable
- - Users must add tap first
- - You maintain it yourself
-
- ## Files in this submission:
-
- - `Casks/t/termix.rb` - Homebrew Cask formula
- - `README.md` - Detailed documentation
- - `SUBMISSION_INSTRUCTIONS.md` - This file
-
- ## Version Information:
-
- - Version: ${{ steps.package-version.outputs.version }}
- - DMG SHA256: ${{ steps.dmg-info.outputs.checksum }}
- - DMG URL: https://github.com/Termix-SSH/Termix/releases/download/release-${{ steps.package-version.outputs.version }}-tag/${{ steps.dmg-info.outputs.dmg_name }}
-
- ## After Submission:
-
- ### Official Homebrew Cask:
- 1. Maintainers will review (usually 24-48 hours)
- 2. May request changes or fixes
- 3. Once merged, users can install with: `brew install --cask termix`
- 4. Homebrew bot will auto-update for future releases
-
- ### Custom Tap:
- 1. Push to your tap repository
- 2. Immediately available to users
- 3. Update the cask file for each new release
-
- ## Resources:
-
- - [Homebrew Cask Documentation](https://docs.brew.sh/Cask-Cookbook)
- - [Acceptable Casks](https://docs.brew.sh/Acceptable-Casks)
- - [How to Open a PR](https://docs.brew.sh/How-To-Open-a-Homebrew-Pull-Request)
- EOF
-
- echo "✅ Created submission instructions"
- name: List submission files
run: |
- echo "Homebrew submission files:"
find homebrew-submission -type f
- name: Upload Homebrew submission as artifact
@@ -1089,18 +770,6 @@ jobs:
path: homebrew-submission/*
retention-days: 30
- - name: Display next steps
- run: |
- echo ""
- echo "🍺 Homebrew Cask ready!"
- echo ""
- echo "📦 Download the 'homebrew-submission' artifact and follow SUBMISSION_INSTRUCTIONS.md"
- echo ""
- echo "Quick summary:"
- echo "Option 1 (Recommended): Fork https://github.com/Homebrew/homebrew-cask and submit PR"
- echo "Option 2 (Alternative): Create your own tap at Termix-SSH/homebrew-termix"
- echo ""
-
upload-to-release:
runs-on: blacksmith-4vcpu-ubuntu-2404
if: github.event.inputs.artifact_destination == 'release'
@@ -1114,52 +783,29 @@ jobs:
with:
path: artifacts
- - name: Get latest release
+ - name: Get latest release tag
id: get_release
run: |
- echo "Fetching latest release from ${{ github.repository }}..."
- LATEST_RELEASE=$(gh release list --repo ${{ github.repository }} --limit 1 --json tagName,name,isLatest -q '.[0]')
-
- if [ -z "$LATEST_RELEASE" ]; then
- echo "ERROR: No releases found in ${{ github.repository }}"
- exit 1
- fi
-
- RELEASE_TAG=$(echo "$LATEST_RELEASE" | jq -r '.tagName')
- RELEASE_NAME=$(echo "$LATEST_RELEASE" | jq -r '.name')
-
- echo "tag=$RELEASE_TAG" >> $GITHUB_OUTPUT
- echo "name=$RELEASE_NAME" >> $GITHUB_OUTPUT
- echo "Latest release: $RELEASE_NAME ($RELEASE_TAG)"
+ echo "RELEASE_TAG=$(gh release list --repo ${{ github.repository }} --limit 1 --json tagName -q '.[0].tagName')" >> $GITHUB_ENV
env:
GH_TOKEN: ${{ github.token }}
- name: Display artifact structure
run: |
- echo "Artifact structure:"
ls -R artifacts/
- name: Upload artifacts to latest release
run: |
- RELEASE_TAG="${{ steps.get_release.outputs.tag }}"
- echo "Uploading artifacts to release: $RELEASE_TAG"
- echo ""
-
cd artifacts
for dir in */; do
- echo "Processing directory: $dir"
cd "$dir"
- for file in *; do
+ for file in *;
+ do
if [ -f "$file" ]; then
- echo "Uploading: $file"
gh release upload "$RELEASE_TAG" "$file" --repo ${{ github.repository }} --clobber
- echo "✓ $file uploaded successfully"
fi
done
cd ..
done
-
- echo ""
- echo "All artifacts uploaded to: https://github.com/${{ github.repository }}/releases/tag/$RELEASE_TAG"
env:
GH_TOKEN: ${{ github.token }}
diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml
new file mode 100644
index 00000000..5d0df61f
--- /dev/null
+++ b/.github/workflows/pr-check.yml
@@ -0,0 +1,35 @@
+name: PR Check
+
+on:
+ pull_request:
+ branches: [main, dev-*]
+
+jobs:
+ lint-and-build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: "20"
+
+ - name: Install dependencies
+ run: |
+ rm -rf node_modules package-lock.json
+ npm install
+
+ - name: Run ESLint
+ run: npx eslint .
+
+ - name: Run Prettier check
+ run: npx prettier --check .
+
+ - name: Type check
+ run: npx tsc --noEmit
+
+ - name: Build
+ run: npm run build
diff --git a/.gitignore b/.gitignore
index a3188d42..af4f217b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
-# Logs
logs
*.log
npm-debug.log*
@@ -12,7 +11,6 @@ dist
dist-ssr
*.local
-# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
@@ -27,3 +25,6 @@ dist-ssr
/.claude/
/ssl/
.env
+/.mcp.json
+/nul
+/.vscode/
diff --git a/.husky/commit-msg b/.husky/commit-msg
new file mode 100644
index 00000000..0a4b97de
--- /dev/null
+++ b/.husky/commit-msg
@@ -0,0 +1 @@
+npx --no -- commitlint --edit $1
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100644
index 00000000..2312dc58
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1 @@
+npx lint-staged
diff --git a/.nvmrc b/.nvmrc
index 2bd5a0a9..209e3ef4 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-22
+20
diff --git a/.prettierignore b/.prettierignore
index 1b8ac889..12156ff6 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,3 +1,18 @@
-# Ignore artifacts:
build
coverage
+dist
+dist-ssr
+release
+
+node_modules
+package-lock.json
+pnpm-lock.yaml
+yarn.lock
+
+db
+
+.env
+
+*.min.js
+*.min.css
+openapi.json
diff --git a/.prettierrc b/.prettierrc
index 0967ef42..fd873cbb 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -1 +1,9 @@
-{}
+{
+ "semi": true,
+ "singleQuote": false,
+ "tabWidth": 2,
+ "trailingComma": "all",
+ "printWidth": 80,
+ "arrowParens": "always",
+ "endOfLine": "lf"
+}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 3760e9d9..9db7959d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -103,4 +103,4 @@ This will start the backend and the frontend Vite server. You can access Termix
If you need help or want to request a feature with Termix, visit the [Issues](https://github.com/Termix-SSH/Support/issues) page, log in, and press `New Issue`.
Please be as detailed as possible in your issue, preferably written in English. You can also join the [Discord](https://discord.gg/jVQGdvHDrf) server and visit the support
-channel, however, response times may be longer.
\ No newline at end of file
+channel, however, response times may be longer.
diff --git a/DOWNLOADS.md b/DOWNLOADS.md
new file mode 100644
index 00000000..9aab0077
--- /dev/null
+++ b/DOWNLOADS.md
@@ -0,0 +1,61 @@
+# Termix Download Links
+
+## Windows
+
+| Architecture | Type | Download Link |
+| ------------ | -------- | ---------------------------------------------------------------------------------------------------------- |
+| x64 | NSIS | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_x64_nsis.exe) |
+| x64 | MSI | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_x64_msi.msi) |
+| x64 | Portable | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_x64_portable.zip) |
+| ia32 | NSIS | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_ia32_nsis.exe) |
+| ia32 | MSI | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_ia32_msi.msi) |
+| ia32 | Portable | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_ia32_portable.zip) |
+
+## Linux
+
+| Architecture | Type | Download Link |
+| ------------ | -------- | --------------------------------------------------------------------------------------------------------------- |
+| x64 | AppImage | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_x64_appimage.AppImage) |
+| x64 | DEB | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_x64_deb.deb) |
+| x64 | Portable | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_x64_portable.tar.gz) |
+| arm64 | AppImage | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_arm64_appimage.AppImage) |
+| arm64 | DEB | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_arm64_deb.deb) |
+| arm64 | Portable | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_arm64_portable.tar.gz) |
+| armv7l | AppImage | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_armv7l_appimage.AppImage) |
+| armv7l | DEB | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_armv7l_deb.deb) |
+| armv7l | Portable | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_armv7l_portable.tar.gz) |
+
+## macOS
+
+| Architecture | Type | Download Link |
+| ------------ | ------------- | -------------------------------------------------------------------------------------------------------- |
+| Universal | DMG | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_macos_universal_dmg.dmg) |
+| Universal | Mac App Store | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_macos_universal_mas.pkg) |
+| x64 | DMG | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_macos_x64_dmg.dmg) |
+| arm64 | DMG | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_macos_arm64_dmg.dmg) |
+
+---
+
+## All Platforms - Complete Download List
+
+| Platform | Architecture | Type | Download Link |
+| -------- | ------------ | ------------- | --------------------------------------------------------------------------------------------------------------- |
+| Windows | x64 | NSIS | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_x64_nsis.exe) |
+| Windows | x64 | MSI | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_x64_msi.msi) |
+| Windows | x64 | Portable | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_x64_portable.zip) |
+| Windows | ia32 | NSIS | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_ia32_nsis.exe) |
+| Windows | ia32 | MSI | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_ia32_msi.msi) |
+| Windows | ia32 | Portable | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_windows_ia32_portable.zip) |
+| Linux | x64 | AppImage | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_x64_appimage.AppImage) |
+| Linux | x64 | DEB | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_x64_deb.deb) |
+| Linux | x64 | Portable | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_x64_portable.tar.gz) |
+| Linux | arm64 | AppImage | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_arm64_appimage.AppImage) |
+| Linux | arm64 | DEB | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_arm64_deb.deb) |
+| Linux | arm64 | Portable | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_arm64_portable.tar.gz) |
+| Linux | armv7l | AppImage | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_armv7l_appimage.AppImage) |
+| Linux | armv7l | DEB | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_armv7l_deb.deb) |
+| Linux | armv7l | Portable | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_linux_armv7l_portable.tar.gz) |
+| macOS | Universal | DMG | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_macos_universal_dmg.dmg) |
+| macOS | Universal | Mac App Store | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_macos_universal_mas.pkg) |
+| macOS | x64 | DMG | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_macos_x64_dmg.dmg) |
+| macOS | arm64 | DMG | [Download](https://github.com/Termix-SSH/Termix/releases/latest/download/termix_macos_arm64_dmg.dmg) |
diff --git a/README-CN.md b/README-CN.md
index 65b82cb0..ea7fdde1 100644
--- a/README-CN.md
+++ b/README-CN.md
@@ -1,7 +1,7 @@
# 仓库统计
- 英文 |
+ 英文 |
中文
@@ -44,22 +44,24 @@
Termix 是一个开源、永久免费、自托管的一体化服务器管理平台。它提供了一个基于网页的解决方案,通过一个直观的界面管理你的服务器和基础设施。Termix
-提供 SSH 终端访问、SSH 隧道功能以及远程文件管理,还会陆续添加更多工具。
+提供 SSH 终端访问、SSH 隧道功能以及远程文件管理,还会陆续添加更多工具。Termix 是适用于所有平台的完美免费自托管 Termius 替代品。
# 功能
-- **SSH 终端访问** - 功能完整的终端,支持分屏(最多 4 个面板)和标签系统
-- **SSH 隧道管理** - 创建和管理 SSH 隧道,支持自动重连和健康监控
-- **远程文件管理器** - 直接在远程服务器上管理文件,支持查看和编辑代码、图片、音频和视频。无缝上传、下载、重命名、删除和移动文件。
-- **SSH 主机管理器** - 保存、组织和管理 SSH 连接,支持标签和文件夹,轻松保存可重用的登录信息,同时能够自动部署 SSH 密钥
-- **服务器统计** - 查看任意 SSH 服务器的 CPU、内存和硬盘使用情况
-- **用户认证** - 安全的用户管理,支持管理员控制、OIDC 和双因素认证(TOTP)
-- **数据库加密** - SQLite 数据库文件在静态时加密,支持自动加密/解密
-- **数据导出/导入** - 导出和导入 SSH 主机、凭据和文件管理器数据,支持增量同步
+- **SSH 终端访问** - 功能齐全的终端,具有分屏支持(最多 4 个面板)和类似浏览器的选项卡系统。包括对自定义终端的支持,包括常见终端主题、字体和其他组件
+- **SSH 隧道管理** - 创建和管理 SSH 隧道,具有自动重新连接和健康监控功能
+- **远程文件管理器** - 直接在远程服务器上管理文件,支持查看和编辑代码、图像、音频和视频。无缝上传、下载、重命名、删除和移动文件
+- **SSH 主机管理器** - 保存、组织和管理您的 SSH 连接,支持标签和文件夹,并轻松保存可重用的登录信息,同时能够自动部署 SSH 密钥
+- **服务器统计** - 在任何 SSH 服务器上查看 CPU、内存和磁盘使用情况以及网络、正常运行时间和系统信息
+- **仪表板** - 在仪表板上一目了然地查看服务器信息
+- **用户认证** - 安全的用户管理,具有管理员控制以及 OIDC 和 2FA (TOTP) 支持。查看所有平台上的活动用户会话并撤销权限。
+- **数据库加密** - 后端存储为加密的 SQLite 数据库文件
+- **数据导出/导入** - 导出和导入 SSH 主机、凭据和文件管理器数据
- **自动 SSL 设置** - 内置 SSL 证书生成和管理,支持 HTTPS 重定向
-- **现代化界面** - 使用 React、Tailwind CSS 和 Shadcn 构建的简洁桌面/移动友好界面
-- **语言支持** - 内置英语、中文和德语支持
-- **平台支持** - 提供 Web 应用、桌面应用程序(Windows 和 Linux)以及 iOS 和 Android 专用移动应用。计划支持 macOS 和 iPadOS。
+- **现代用户界面** - 使用 React、Tailwind CSS 和 Shadcn 构建的简洁的桌面/移动设备友好界面
+- **语言** - 内置支持英语、中文、德语和葡萄牙语
+- **平台支持** - 可作为 Web 应用程序、桌面应用程序(Windows、Linux 和 macOS)以及适用于 iOS 和 Android 的专用移动/平板电脑应用程序。
+- **SSH 工具** - 创建可重用的命令片段,单击即可执行。在多个打开的终端上同时运行一个命令。
# 计划功能
@@ -69,14 +71,28 @@ Termix 是一个开源、永久免费、自托管的一体化服务器管理平
支持的设备:
-- 网站(任何现代浏览器,如 Google、Safari 和 Firefox)
-- Windows(应用程序)
-- Linux(应用程序)
-- iOS(应用程序)
-- Android(应用程序)
-- iPadOS 和 macOS 正在开发中
+- 网站(任何平台上的任何现代浏览器,如 Chrome、Safari 和 Firefox)
+- Windows(x64/ia32)
+ - 便携版
+ - MSI 安装程序
+ - Chocolatey 软件包管理器
+- Linux(x64/ia32)
+ - 便携版
+ - AppImage
+ - Deb
+ - Flatpak
+- macOS(x64/ia32 on v12.0+)
+ - Apple App Store
+ - DMG
+ - Homebrew
+- iOS/iPadOS(v15.1+)
+ - Apple App Store
+ - ISO
+- Android(v7.0+)
+ - Google Play 商店
+ - APK
-访问 Termix [文档](https://docs.termix.site/install) 获取所有平台的安装信息。或者可以参考以下示例 docker-compose 文件:
+访问 Termix [文档](https://docs.termix.site/install) 了解有关如何在所有平台上安装 Termix 的更多信息。或者,在此处查看示例 Docker Compose 文件:
```yaml
services:
@@ -128,6 +144,7 @@ volumes:
你的浏览器不支持 video 标签。
+视频和图像可能已过时。
# 许可证
diff --git a/README.md b/README.md
index 071af00d..81af5534 100644
--- a/README.md
+++ b/README.md
@@ -43,24 +43,27 @@ If you would like, you can support the project here!\
-Termix is an open-source, forever-free, self-hosted all-in-one server management platform. It provides a web-based
+Termix is an open-source, forever-free, self-hosted all-in-one server management platform. It provides a multi-platform
solution for managing your servers and infrastructure through a single, intuitive interface. Termix offers SSH terminal
-access, SSH tunneling capabilities, and remote file management, with many more tools to come.
+access, SSH tunneling capabilities, and remote file management, with many more tools to come. Termix is the perfect
+free and self-hosted alternative to Termius available for all platforms.
# Features
-- **SSH Terminal Access** - Full-featured terminal with split-screen support (up to 4 panels) and tab system
+- **SSH Terminal Access** - Full-featured terminal with split-screen support (up to 4 panels) with a browser-like tab system. Includes support for customizing the terminal including common terminal themes, fonts, and other components
- **SSH Tunnel Management** - Create and manage SSH tunnels with automatic reconnection and health monitoring
-- **Remote File Manager** - Manage files directly on remote servers with support for viewing and editing code, images, audio, and video. Upload, download, rename, delete, and move files seamlessly.
-- **SSH Host Manager** - Save, organize, and manage your SSH connections with tags and folders and easily save reusable login info while being able to automate the deploying of SSH keys
-- **Server Stats** - View CPU, memory, and HDD usage on any SSH server
-- **User Authentication** - Secure user management with admin controls and OIDC and 2FA (TOTP) support
-- **Database Encryption** - SQLite database files encrypted at rest with automatic encryption/decryption
-- **Data Export/Import** - Export and import SSH hosts, credentials, and file manager data with incremental sync
+- **Remote File Manager** - Manage files directly on remote servers with support for viewing and editing code, images, audio, and video. Upload, download, rename, delete, and move files seamlessly
+- **SSH Host Manager** - Save, organize, and manage your SSH connections with tags and folders, and easily save reusable login info while being able to automate the deployment of SSH keys
+- **Server Stats** - View CPU, memory, and disk usage along with network, uptime, and system information on any SSH server
+- **Dashboard** - View server information at a glance on your dashboard
+- **User Authentication** - Secure user management with admin controls and OIDC and 2FA (TOTP) support. View active user sessions across all platforms and revoke permissions.
+- **Database Encryption** - Backend stored as encrypted SQLite database files
+- **Data Export/Import** - Export and import SSH hosts, credentials, and file manager data
- **Automatic SSL Setup** - Built-in SSL certificate generation and management with HTTPS redirects
- **Modern UI** - Clean desktop/mobile-friendly interface built with React, Tailwind CSS, and Shadcn
-- **Languages** - Built-in support for English, Chinese, and German
-- **Platform Support** - Available as a web app, desktop application (Windows & Linux), and dedicated mobile app for iOS and Android. macOS and iPadOS support is planned.
+- **Languages** - Built-in support for English, Chinese, German, and Portuguese
+- **Platform Support** - Available as a web app, desktop application (Windows, Linux, and macOS), and dedicated mobile/tablet app for iOS and Android.
+- **SSH Tools** - Create reusable command snippets that execute with a single click. Run one command simultaneously across multiple open terminals.
# Planned Features
@@ -70,12 +73,26 @@ See [Projects](https://github.com/orgs/Termix-SSH/projects/2) for all planned fe
Supported Devices:
-- Website (any modern browser like Google, Safari, and Firefox)
-- Windows (app)
-- Linux (app)
-- iOS (app)
-- Android (app)
-- iPadOS and macOS are in progress
+- Website (any modern browser on any platform like Chrome, Safari, and Firefox)
+- Windows (x64/ia32)
+ - Portable
+ - MSI Installer
+ - Chocolatey Package Manager
+- Linux (x64/ia32)
+ - Portable
+ - AppImage
+ - Deb
+ - Flatpak
+- macOS (x64/ia32 on v12.0+)
+ - Apple App Store
+ - DMG
+ - Homebrew
+- iOS/iPadOS (v15.1+)
+ - Apple App Store
+ - ISO
+- Android (v7.0+)
+ - Google Play Store
+ - APK
Visit the Termix [Docs](https://docs.termix.site/install) for more information on how to install Termix on all platforms. Otherwise, view
a sample Docker Compose file here:
@@ -130,6 +147,7 @@ channel, however, response times may be longer.
Your browser does not support the video tag.
+Videos and images may be out of date.
# License
diff --git a/build/Termix_Mac_App_Store.provisionprofile b/build/Termix_Mac_App_Store.provisionprofile
new file mode 100644
index 0000000000000000000000000000000000000000..8e87f4056fdffccddb9d67cacdf5435cd41cc67c
GIT binary patch
literal 12224
zcmdUV378XQ)-K&NOS7sds0f6{mDr>zTPK1@ZK+g}N>bTVDpILRDobVQY?Z`O=vHx{
zoe{-lMi>NjT#(UmLB|b6{YSwKTu@N)SKLOx6$cf?|Er`|&^!OV&wb{+Gf0r3c41jcQ)ot@#Vot+}hYsRL2o-n-mD%X2uT
z)f_&XRvH#G?tC^E%@?Z@UMgCh52mAVCzp=S
z(RL%jdblBWW==
zW(c!ki*xX3n*L@=H!L5m4~lceft3iLFkcI44ec=04x4>i_#B9Ic6+r>Vc{U6Whl
zim_}yebfT__u}$~etl}H5CZoTrMV0zMuq-CVw_ZnYWj`|kCvm7a>f`qX0T~+1kpl&
z+rF)|&I9Y>=F=2qsn#$Ib+|-Crcgwr7$W3!8fz{ljm$UIq*C_*ZQtNIF7Lu`$AVILv|d^D;L;XVqceMrUSBXl(Guh4K-snZUrld`hN
z5*0Fugi$eTOC>m4N<$S`gg|j5TV-GrcLpRb=x1HDPn4Z~`^C(C`z5%L69Q{a2q8}{
zqSYHIq5^YTuy3qCHjF}P|HLk&}tX|)N_`(dIO$3TAV@EaNOBJaqU(HJ{y-0cT
zSs_E4B&O`14CNd@DOU`33MsyV6X6JIsN8+vF+Mzl~_&jbyC5D3r17$_ye8yv-NK1{^1&XZFHs}OqG%MpN
zYpC}-3csvq6|4zh8rYLEU&tdxf`O7?rAsuZCrb&lgVuVrHZ|!lBf4BfEW(1bidKn2
z&YHkdTCqB1HMpw<6s6Fmy^VXcx
z9|PnoSy6inc|0um!=7M89}DZ<=9nplS!`5JU(-48P?fR=6CR6+@t<3#7o1}H`$$SJ
z)4&N&JE5?-sL&25S1ch7AuDyuPeVwbwko&9V_Ax#WuV=-15&I+1@|EiRFuScN<>+P
zCJ>PTnr>$XGXYd4MNo&L6otinB!*;C0QF>RARVakTB#fn0jmJ)0Y~CM?kzY+29g|*
zCV+$tj^zAY5S9X@ndU;Q1lR`}!4Z$rR$&Qj+FXtJ5DSht-F{dEQYqUQfKFb}x+s
zaD?>(4J>k@`a8g#oMC`kDb^1IRIy~(AOlbn0V|ZL02zo!{DycW=%?}2(bkzpWnhdO
z?=6-(I^?1l>I?^IQJIsnI3b{Y63{FfC!AF_*kCLkWt|@0NhbljzzGA;vKn2Z^uZ(&
z#Sw!av@3dp00lCh9GjLD1g4K-6{rcUDWK;`sR|GSFbD&oAcsYUs?H=K)4o*2SwjGm
zv2iqp&=wf2Mzm}$LI#dt9tM9jgo1Mk_yUC4>+vCZ9Br_&2AYEVNJ%L+XsEL;aCQuz
z4y2Xy19x@=13?PlDgpt&MBo@>2x~nOOIqSi434{SDdq4nFkMR(T{xO_d11-rqYO@8
z7-q>Z>>|UmOO^wJnIAI*)dMveqX-I(x^hOnmy>0Jf!eb$WyLPP+$?1}zf_#Bzml
zQ3#58L?9ve&ymyMW
z;x^n*&~Px2V?8N-!{VijabOwZVXpz|lP#K&lS9Y#NJ2VLi0Dv>Pk?sdj*lE0OAZ-Z
zwj*+o(+0pf#^YR2Uu;+|XU!25su5iPSOLTZ?qCQ*bR;@~ZiyyfSuqB%bc9d$v2@D8
zhfE2l!{P-9go%I=0IOR|LIfhyGFu}eG}>U!h%9>*`2`kT^ry{b0Ru+bixeq>uhHJH
zY*QEt!#Dt$?_;z7ij@zrR#CS1jqL>%*pVDy>}Z_E0s&gK#({457}<%_K#oPg#1U;!
zsjH=i)+Nyl?J3A4)9X#3w!ZavBU&>=5l)oCAW`uGY)K^5VEP5x>hJRcoDyIMijE~4
zI;01B8vty;Tm_chKznGJXpC(KxYIYbEs_S7nJLIv;~h!Jwt&BeYH1W9(P}5@rS)cj
zdnD>Dp(uhR5G{qEwq(vxgAu;dS4>rHRnbH9Iu8~w@xi1o1FRPsVewKhje2uB)>@4D
zl1X2wQXz^V4Q%ZQSHqIdW(<2Gz8dN#0$D^8h=*}|2*#@wCkpXCLFf!g2BAy`YDK#N
z?x65;xD@cQpdqXM;&J_6^toj%Y=MCjA)AV7QUD5*A6%
zg?vm{8`YJ~r0hZn)=_e*tDd;kf@^f?Xto;9rOPf^bo(>zps$kg>bau2ld6C*NI0E{
z<8~O)`F$p>lc^b@MA{|M+KyyI$cBnqCRVl3X>~ZB5b%`40+$_rPNa>fh#QRds$F5#
zr7*BTwqh1A6@;OHv7((F<%GsZilrmhPLq6vtRZYeR%n{&^B66*azw|73`B?y;8oEz
zB28nAaz=`$DfG$oP|O0@nLyD&EbRZl8&$kes!Au7A6=y-#Ty0xajK#yKR9ifwq#{K
zIj|m}zy0g+>m=Y!27vBLCGbDPr~ABSpc^>z@6ZdDM(H7XfnmKmA``$L0=j{)`J9C<
z$5>Ma;`Q2Oj*0{du-}>X*sH83n~vpel(i#a4v21@%hqYENLEL+qwF#=Xb~ZN9&3fO
zb!x>7mXZ>sP#R5}-7!mNQjGDk7y}-aT$kBikIF9tK8k8;M|xG>j)Kz|58^H=-RZTb
z1*5tgEtR!}LaMWdl7qYvzz-NBjn}>UL0%O}+SC1BRXMD4$^$mVS&n$k^*X?_0q0b(
zH300f83Iv^3|&KXbw=$m5#T;cG*%Vuok%vGVC!t(l`w(6w!#tPH9WSEBA1?IIH-7Q
z&MM$SLW7;_35&@1qp7G7xT^shAtpQptvXrBrlK_lx2FN;`XyZk7=|Ul{ZJ8ISPSGk
zP5=()M~>7JM9TvmXD|?PpgY4IWZuB$IAb&hf){=SmI`^v;SbZCLnvXo3g@U`p_-Tm
z-gY7CG|@bhiFQU^iI_Go$dnxR(W1$l(Wt|~O;2Pf7KgP_m`p(;RTlCFk;+*surCMe
z9KJ*)(HYbf!Zsa|bHiSrtf4!rz}DfYV(Wkm^hTs8iyq55Nj7CH0Gu9T>!|;Sbp?sm
z`5R7D=p@kV8U^fKfK%#RI8g;Qv7z%dl%olK#hyg6eK(Qmbtg|t*tqGepr
zkfAJnybsuNt(1wRr4q39|6BGLMDl#7$b(2;(&c6-6zD?lGYz~vCx#$CSh5scvf%N%
zE19S#jYy%I(Pih&1)sqkusQ^DQL@FXYGBD^vMR<)*{t6PL26w&kWYnRThbYJ#9Y44
zw9X|7TEAMXF-Ef)L`6`aaX#wyj
z5cMcWGPDTpTH&6ha8L%33{&0zsPi`<53Dti1knT~B9a2pnJS2wHlm;)@(|Gi4x|IW
zs(vUpa7o^psFf>Okz@Ux`gDbKn*=%Psd!8@(um~X4Q>Ef1!Wa+#NF@XX`Lw?ReZmr
za05dizzqmLMlpCfov#R4OD-KDy@r}E>gx=+Ag3v0jkri$9p^cnSTMt##VjjQVia?;
zvR<@$eL7gJPrFm3A*{DVV_}UstQR3K7z#RY#@46x7iBch5ij(7lhHHNGI+|v#vadTo*_zh>>2zA|W6;
zf^ZmWs3{TVfhao0&=pJ`;)A2W4<#{g1G904u%SM}UB?k$-46t~LD%SH9Qc9akakYI
z&iQ3!yfDR5NYIaih$EV1l*mv&pTlU(G^8Jj6A2VUd<8R9vW0=~s(0%-GiyfJ&Y~a~
z>>9|_A=qVOpd9qbl$j6vQ18$^m?|D0iuciMC)doP;VBr(6xEBq3gc(xtpvZTCjq`jppL
z@$dstmDaw$G2o$|gmSwXEFR@k{Rx%6uR0XpA7dl@Fnr8N(Ow>StN!h_KZA0kGJApNE>HpqN22Y^Gum-35h)OPz
z|Mg6pu{YBOcbo$m&VjW@WZHf`PpG0fUIlWADsM5H2SKr+SwkOK`#`#|?-B+M>gZz{
zJVIX(u5rc6SiiImM=2Fmk)=YBixsk&!Tpu|qA!t-`m&Bhc_3hy$P}YuG(TTw)X&rO
z6?z5E@2BwoW%lmH%!9BW$LZTSlUZoj8+7J&6U3X_qaXrmFdBrI!4x}k+CU=_+&@&`
zH1MDq`z~mnrk<^xzqWhA9Z+|RAL<@{?%LtaP0h{6&%JcXn9pBpUib07w{P6Jb;Fsf
zze-#OjqguCH;o1P=tw<1J>1_ia#FM33r~WM9SI6!CXE5NB1KhHhMxnU4xOr0j-52E
zQ8|#z1o>PQQYyx?`9!e_Plk?H+6|vHzR}K;%@$R_FioE_UJJom*a(|-CWDckGG3
zp~fEzm0%n~>pjQKZS)Lg^O7I~1yuECP*t8NNZ5i23#wn6UrDqp>m1ii8v1uKZtzZe
zTh#XobvLyQK8>ak!-jV^O#~_WrZLUkO-;jYzHrx!Lq9ye&E7WexgDqfFy-KZo2Sng
zj*Z>)#llT@>z`PE_RP$V>DSG?;_Tw)3CD2j=kc~nZF`D}IKZ=7uEK4;sX_FQ<@#rJi6
zcGekV4=wu5(&G+&8F7vL#Ib$G&h(o7g8;DJA1
zU^s5MdGwyYmY@mB>xs%vT7Z^}gpL_GrvB9iFN|z%YH0>4F;qi)3k2N0+7+9JBDy`9yL2m$gfNd(F$c
z`5tuHt0%sPJP=wla`ctfcNg3{>y7<;&tCM=-rE+R@{iS*?YQnDN5s6`dC#QZU4s4X
zorN1Vow(rZk0+je;iQ#cT^zmh>9}?G&kx?PYTO~Mam||X*I#5B({sbC$4L+OjQ#za
z^Y>+&*1t>>i{8GxGZy*iq$u>#@}CLsq0FJ*%Gfhj{`-T>1Nnv34+5_|{@CS@nApla
z$67s)jW_gMxBJE7P4RE3Mb~Zk`pySVSh`}{ix9T-wU2Vm%!6G|-Ff5dpMCb%t6CR)
zVOn|rOKrpVidgh{0szZn09bBq083Nz;4>QW??VwqhO`DPtcP@U6frg;D`T)(C^?l!XL{MRRU=w5hsBK`95iS1iX%71&|gf|vn
zwCd~AhCk}Rn!a%SSAt>I3HB4h(;m3);6GQddBy$c=8#*wdh~;;gD-42Tb0c{bY2s5
z)x+2;6aRGXH)`t4lb=8Q^2SFd>|A)tju+0|c+OuAOq?+6+OhY|oII!a#=P-wM<(BW
zYv;A3*T4B*4f4QuhxX)N`uJ7{ap??4%6$W}?Ac;u>@k-iSL&8`-3NvCu`SxG;tyOs
zZFjWrv$!z&IQ3TfX5I18b@Fvv+8dD3-Bbf0T0TnECMv2|2ayrbaG-&MRP`6}<6i)xn16G*H(w{f(QU
zu7^(UdH~p*1ef8XDq!b|@kBwz4}8a?id0oxrmD(u;0r1hS16Ry(Sk}Lce!GtPYm>l
zD!+_MnFH|32r#LDYGed1FQ^o{2s&g06`#!riH2><##E(3^z0!M<+7l!G8t&uKfhvn
zb9s(0CcyH*n8gOqopXe0*5T^{;~yREm529Vwd$R3D2r=B0R?-KK6Jzmvorf2Va@+Q}q
z)X(Z4!*`5m{mqmGfn%o^UwgP`)?D(|H?pUGuy^~zx%Va#@1L>tt8``mCmW|sx$~V%
z+YDPzdt>Ls9jVuEId#^t2iI-5y3n=g?^Dlj)m(f3cewS-MW!_;e0%QcqH4J=d2oF9
zE4%mJs`=iVJYRT<*U1OZ8FhAG@2-h6C+vE(aFT1|PUGUuSNeC}@yAEB=%KgX=v;H@
zI?uyXpIC{Wdfe>iCQf^ZUcHci-o9jtd;Rh^c76Ecw$@P{e=U_}Lfs>J0E879@O8{d
z;(tuJ@qPNKGiEL?e&sFK1|ONiiT;Q9h(eR}Fd#;-0n$SXz-djOWY$6utkbiQ2YjJ-
zHjww0;p0wIc(co^3aLOoxtvhG8U!ETDFr3DtnwyArTl+^13mZtVr;7Cp{HKyfXu7*
zYea{G
zv-dsk#~*L|a3wx|{2#WBdr*Jdi)TFEv!iEDa>jw1-u+Cy`^^j1uYI%YZq=a@@SW>S8`q7E3a@Ox>Dmh&cg@nAJk^P3M_1fE%=#}rXTF${
zGIjm)KY!{4v}P03-K>Yk^#fQlG?f4RBGt(C!3p3$0u+JT`^r%B(wTiE1}Jo45RCyD
zhP-H)BSiBM+~2%u>1qEezq})ma`y0C)WZxxpYR~Jq#g}y|*xwP8v)jE_~*S(4|}GzpR}-
z|Hk63{cGnAwQ-}CKok3qyJhUJvB}cuk>$oC*SNJ7qvb4`0wSPUYgQ9_wMac&FhAjKl$Y3
zu1_vTG-v*E*~=R**t?=_-JuD8|8%Zu<9R=pyM{lzV?@j5_@6SjX%?-zXdT?$yaMRc
zRp8@jsB78(5ZpE&Z3YHD(_Y*44s>F_que?i9@}3S)dZc=UuYcxPXsV+fFS_Wuuca)
zGKOXiylsJj7qZ%L&8~aa&w5dP#g6W8kqu{_ap2SUptA-V>ETnLlLvhwzHX5J0en)(
zGthJ*Oh6bkX5{F`cjm)K0rBg5ZfH4Wb(X6(kr3DaVH%7Zt??z~|0MexDMqAd^H#V7L%-~W!UJU86C>$2aHcl4~i
za@iy6pFHh{>>JJV!n>MQT2#5)Pp$q#So)G?9lih1a}zf0IsWo(KOT3*L+^f*J9A6>
zgNG+oHx-yy;v2WFSheGu@`Gb8`RetlPoDBj$~<#&^N-K0zpQrV;Tu{PRbKt+Ghxi9
Zhj*;|c};Pvqxd*Jw@n8NnJ_!H-
literal 0
HcmV?d00001
diff --git a/build/entitlements.mac.inherit.plist b/build/entitlements.mac.inherit.plist
new file mode 100644
index 00000000..ee90b853
--- /dev/null
+++ b/build/entitlements.mac.inherit.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+ com.apple.security.cs.disable-library-validation
+
+ com.apple.security.cs.allow-dyld-environment-variables
+
+
+
diff --git a/build/entitlements.mac.plist b/build/entitlements.mac.plist
new file mode 100644
index 00000000..ee90b853
--- /dev/null
+++ b/build/entitlements.mac.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+ com.apple.security.cs.disable-library-validation
+
+ com.apple.security.cs.allow-dyld-environment-variables
+
+
+
diff --git a/build/entitlements.mas.inherit.plist b/build/entitlements.mas.inherit.plist
new file mode 100644
index 00000000..eb23e9ac
--- /dev/null
+++ b/build/entitlements.mas.inherit.plist
@@ -0,0 +1,16 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.inherit
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+ com.apple.security.cs.disable-library-validation
+
+
+
diff --git a/build/entitlements.mas.plist b/build/entitlements.mas.plist
new file mode 100644
index 00000000..c9ac7c4a
--- /dev/null
+++ b/build/entitlements.mas.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.network.client
+
+ com.apple.security.network.server
+
+ com.apple.security.files.user-selected.read-write
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+ com.apple.security.cs.disable-library-validation
+
+
+
diff --git a/build/notarize.cjs b/build/notarize.cjs
new file mode 100644
index 00000000..60067d22
--- /dev/null
+++ b/build/notarize.cjs
@@ -0,0 +1,31 @@
+const { notarize } = require('@electron/notarize');
+
+exports.default = async function notarizing(context) {
+ const { electronPlatformName, appOutDir } = context;
+
+ if (electronPlatformName !== 'darwin') {
+ return;
+ }
+
+ const appleId = process.env.APPLE_ID;
+ const appleIdPassword = process.env.APPLE_ID_PASSWORD;
+ const teamId = process.env.APPLE_TEAM_ID;
+
+ if (!appleId || !appleIdPassword || !teamId) {
+ return;
+ }
+
+ const appName = context.packager.appInfo.productFilename;
+
+ try {
+ await notarize({
+ appBundleId: 'com.karmaa.termix',
+ appPath: `${appOutDir}/${appName}.app`,
+ appleId: appleId,
+ appleIdPassword: appleIdPassword,
+ teamId: teamId,
+ });
+ } catch (error) {
+ console.error('Notarization failed:', error);
+ }
+};
diff --git a/chocolatey/termix-ssh.nuspec b/chocolatey/termix-ssh.nuspec
new file mode 100644
index 00000000..b5de0b13
--- /dev/null
+++ b/chocolatey/termix-ssh.nuspec
@@ -0,0 +1,35 @@
+
+
+
+ termix-ssh
+ VERSION_PLACEHOLDER
+ https://github.com/Termix-SSH/Termix
+ bugattiguy527
+ Termix SSH
+ bugattiguy527
+ https://github.com/Termix-SSH/Termix
+ https://raw.githubusercontent.com/Termix-SSH/Termix/main/public/icon.png
+ https://raw.githubusercontent.com/Termix-SSH/Termix/refs/heads/main/LICENSE
+ false
+ https://github.com/Termix-SSH/Termix
+ https://docs.termix.site/install
+ https://github.com/Termix-SSH/Support/issues
+ docker ssh self-hosted file-management ssh-tunnel termix server-management terminal
+ Termix is a web-based server management platform with SSH terminal, tunneling, and file editing capabilities.
+
+Termix is an open-source, forever-free, self-hosted all-in-one server management platform. It provides a web-based solution for managing your servers and infrastructure through a single, intuitive interface.
+
+Termix offers:
+- SSH terminal access
+- SSH tunneling capabilities
+- Remote file management
+- Server monitoring and management
+
+This package installs the desktop application version of Termix.
+
+ https://github.com/Termix-SSH/Termix/releases
+
+
+
+
+
diff --git a/chocolatey/tools/chocolateyinstall.ps1 b/chocolatey/tools/chocolateyinstall.ps1
new file mode 100644
index 00000000..c2335167
--- /dev/null
+++ b/chocolatey/tools/chocolateyinstall.ps1
@@ -0,0 +1,20 @@
+$ErrorActionPreference = 'Stop'
+
+$packageName = 'termix-ssh'
+$toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
+$url64 = 'DOWNLOAD_URL_PLACEHOLDER'
+$checksum64 = 'CHECKSUM_PLACEHOLDER'
+$checksumType64 = 'sha256'
+
+$packageArgs = @{
+ packageName = $packageName
+ fileType = 'msi'
+ url64bit = $url64
+ softwareName = 'Termix*'
+ checksum64 = $checksum64
+ checksumType64 = $checksumType64
+ silentArgs = "/qn /norestart /l*v `"$($env:TEMP)\$($packageName).$($env:chocolateyPackageVersion).MsiInstall.log`""
+ validExitCodes = @(0, 3010, 1641)
+}
+
+Install-ChocolateyPackage @packageArgs
diff --git a/chocolatey/tools/chocolateyuninstall.ps1 b/chocolatey/tools/chocolateyuninstall.ps1
new file mode 100644
index 00000000..48a5e18c
--- /dev/null
+++ b/chocolatey/tools/chocolateyuninstall.ps1
@@ -0,0 +1,33 @@
+$ErrorActionPreference = 'Stop'
+
+$packageName = 'termix-ssh'
+$softwareName = 'Termix*'
+$installerType = 'msi'
+
+$silentArgs = '/qn /norestart'
+$validExitCodes = @(0, 3010, 1605, 1614, 1641)
+
+[array]$key = Get-UninstallRegistryKey -SoftwareName $softwareName
+
+if ($key.Count -eq 1) {
+ $key | % {
+ $file = "$($_.UninstallString)"
+
+ if ($installerType -eq 'msi') {
+ $silentArgs = "$($_.PSChildName) $silentArgs"
+ $file = ''
+ }
+
+ Uninstall-ChocolateyPackage -PackageName $packageName `
+ -FileType $installerType `
+ -SilentArgs "$silentArgs" `
+ -ValidExitCodes $validExitCodes `
+ -File "$file"
+ }
+} elseif ($key.Count -eq 0) {
+ Write-Warning "$packageName has already been uninstalled by other means."
+} elseif ($key.Count -gt 1) {
+ Write-Warning "$($key.Count) matches found!"
+ Write-Warning "To prevent accidental data loss, no programs will be uninstalled."
+ $key | % {Write-Warning "- $($_.DisplayName)"}
+}
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 8bf66283..c67b6686 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -2,16 +2,12 @@
FROM node:22-slim AS deps
WORKDIR /app
-RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/*
+RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/*
COPY package*.json ./
-ENV npm_config_target_platform=linux
-ENV npm_config_target_arch=x64
-ENV npm_config_target_libc=glibc
-
RUN rm -rf node_modules package-lock.json && \
- npm install --force && \
+ npm install --ignore-scripts --force && \
npm cache clean --force
# Stage 2: Build frontend
@@ -31,10 +27,6 @@ WORKDIR /app
COPY . .
-ENV npm_config_target_platform=linux
-ENV npm_config_target_arch=x64
-ENV npm_config_target_libc=glibc
-
RUN npm rebuild better-sqlite3 --force
RUN npm run build:backend
@@ -47,10 +39,6 @@ RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt
COPY package*.json ./
-ENV npm_config_target_platform=linux
-ENV npm_config_target_arch=x64
-ENV npm_config_target_libc=glibc
-
RUN npm ci --only=production --ignore-scripts --force && \
npm rebuild better-sqlite3 bcryptjs --force && \
npm cache clean --force
@@ -82,8 +70,8 @@ COPY --chown=node:node package.json ./
VOLUME ["/app/data"]
-EXPOSE ${PORT} 30001 30002 30003 30004 30005
+EXPOSE ${PORT} 30001 30002 30003 30004 30005 30006
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
-CMD ["/entrypoint.sh"]
\ No newline at end of file
+CMD ["/entrypoint.sh"]
diff --git a/docker/nginx-https.conf b/docker/nginx-https.conf
index f64e8e4e..e27032b0 100644
--- a/docker/nginx-https.conf
+++ b/docker/nginx-https.conf
@@ -34,7 +34,6 @@ http {
ssl_certificate_key ${SSL_KEY_PATH};
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
- add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
@@ -49,6 +48,15 @@ http {
log_not_found off;
}
+ location ~ ^/users/sessions(/.*)?$ {
+ proxy_pass http://127.0.0.1:30001;
+ proxy_http_version 1.1;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+
location ~ ^/users(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
@@ -92,27 +100,36 @@ http {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
-
+
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
- location ~ ^/database(/.*)?$ {
- client_max_body_size 5G;
- client_body_timeout 300s;
-
+ location ~ ^/snippets(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
-
+ }
+
+ location ~ ^/database(/.*)?$ {
+ client_max_body_size 5G;
+ client_body_timeout 300s;
+
+ proxy_pass http://127.0.0.1:30001;
+ proxy_http_version 1.1;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
-
+
proxy_request_buffering off;
proxy_buffering off;
}
@@ -120,18 +137,18 @@ http {
location ~ ^/db(/.*)?$ {
client_max_body_size 5G;
client_body_timeout 300s;
-
+
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
-
+
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
-
+
proxy_request_buffering off;
proxy_buffering off;
}
@@ -216,18 +233,18 @@ http {
location /ssh/file_manager/ssh/ {
client_max_body_size 5G;
client_body_timeout 300s;
-
+
proxy_pass http://127.0.0.1:30004;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
-
+
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
-
+
proxy_request_buffering off;
proxy_buffering off;
}
@@ -259,9 +276,27 @@ http {
proxy_set_header X-Forwarded-Proto $scheme;
}
+ location ~ ^/uptime(/.*)?$ {
+ proxy_pass http://127.0.0.1:30006;
+ proxy_http_version 1.1;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+
+ location ~ ^/activity(/.*)?$ {
+ proxy_pass http://127.0.0.1:30006;
+ proxy_http_version 1.1;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
-}
\ No newline at end of file
+}
diff --git a/docker/nginx.conf b/docker/nginx.conf
index c180c180..cf078022 100644
--- a/docker/nginx.conf
+++ b/docker/nginx.conf
@@ -23,13 +23,20 @@ http {
listen ${PORT};
server_name localhost;
- add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
+ location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
+ root /usr/share/nginx/html;
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+ try_files $uri =404;
+ }
+
location / {
root /usr/share/nginx/html;
index index.html index.htm;
+ try_files $uri $uri/ /index.html;
}
location ~* \.map$ {
@@ -38,6 +45,15 @@ http {
log_not_found off;
}
+ location ~ ^/users/sessions(/.*)?$ {
+ proxy_pass http://127.0.0.1:30001;
+ proxy_http_version 1.1;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+
location ~ ^/users(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
@@ -81,27 +97,36 @@ http {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
-
+
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
- location ~ ^/database(/.*)?$ {
- client_max_body_size 5G;
- client_body_timeout 300s;
-
+ location ~ ^/snippets(/.*)?$ {
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
-
+ }
+
+ location ~ ^/database(/.*)?$ {
+ client_max_body_size 5G;
+ client_body_timeout 300s;
+
+ proxy_pass http://127.0.0.1:30001;
+ proxy_http_version 1.1;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
-
+
proxy_request_buffering off;
proxy_buffering off;
}
@@ -109,18 +134,18 @@ http {
location ~ ^/db(/.*)?$ {
client_max_body_size 5G;
client_body_timeout 300s;
-
+
proxy_pass http://127.0.0.1:30001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
-
+
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
-
+
proxy_request_buffering off;
proxy_buffering off;
}
@@ -205,18 +230,18 @@ http {
location /ssh/file_manager/ssh/ {
client_max_body_size 5G;
client_body_timeout 300s;
-
+
proxy_pass http://127.0.0.1:30004;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
-
+
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
-
+
proxy_request_buffering off;
proxy_buffering off;
}
@@ -248,9 +273,27 @@ http {
proxy_set_header X-Forwarded-Proto $scheme;
}
+ location ~ ^/uptime(/.*)?$ {
+ proxy_pass http://127.0.0.1:30006;
+ proxy_http_version 1.1;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+
+ location ~ ^/activity(/.*)?$ {
+ proxy_pass http://127.0.0.1:30006;
+ proxy_http_version 1.1;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
-}
\ No newline at end of file
+}
diff --git a/electron-builder.json b/electron-builder.json
index 9fb6d36b..218153e1 100644
--- a/electron-builder.json
+++ b/electron-builder.json
@@ -1,6 +1,7 @@
{
- "appId": "com.termix.app",
+ "appId": "com.karmaa.termix",
"productName": "Termix",
+ "publish": null,
"directories": {
"output": "release"
},
@@ -21,35 +22,53 @@
},
"buildDependenciesFromSource": false,
"nodeGypRebuild": false,
- "npmRebuild": false,
+ "npmRebuild": true,
"win": {
- "target": "nsis",
+ "target": [
+ {
+ "target": "nsis",
+ "arch": ["x64", "ia32"]
+ },
+ {
+ "target": "msi",
+ "arch": ["x64", "ia32"]
+ }
+ ],
"icon": "public/icon.ico",
"executableName": "Termix"
},
"nsis": {
"oneClick": false,
"allowToChangeInstallationDirectory": true,
- "artifactName": "${productName}-Setup-${version}.${ext}",
+ "artifactName": "termix_windows_${arch}_nsis.${ext}",
"createDesktopShortcut": true,
"createStartMenuShortcut": true,
"shortcutName": "Termix",
"uninstallDisplayName": "Termix"
},
+ "msi": {
+ "artifactName": "termix_windows_${arch}_msi.${ext}"
+ },
"linux": {
+ "artifactName": "termix_linux_${arch}_portable.${ext}",
"target": [
{
"target": "AppImage",
- "arch": ["x64"]
+ "arch": ["x64", "arm64", "armv7l"]
+ },
+ {
+ "target": "deb",
+ "arch": ["x64", "arm64", "armv7l"]
},
{
"target": "tar.gz",
- "arch": ["x64"]
+ "arch": ["x64", "arm64", "armv7l"]
}
],
"icon": "public/icon.png",
"category": "Development",
"executableName": "termix",
+ "maintainer": "Termix ",
"desktop": {
"entry": {
"Name": "Termix",
@@ -58,5 +77,52 @@
"StartupWMClass": "termix"
}
}
+ },
+ "appImage": {
+ "artifactName": "termix_linux_${arch}_appimage.${ext}"
+ },
+ "deb": {
+ "artifactName": "termix_linux_${arch}_deb.${ext}"
+ },
+
+ "mac": {
+ "target": [
+ {
+ "target": "mas",
+ "arch": "universal"
+ },
+ {
+ "target": "dmg",
+ "arch": ["universal", "x64", "arm64"]
+ }
+ ],
+ "icon": "public/icon.icns",
+ "category": "public.app-category.developer-tools",
+ "hardenedRuntime": true,
+ "gatekeeperAssess": false,
+ "entitlements": "build/entitlements.mac.plist",
+ "entitlementsInherit": "build/entitlements.mac.inherit.plist",
+ "type": "distribution",
+ "minimumSystemVersion": "10.15"
+ },
+ "dmg": {
+ "artifactName": "termix_macos_${arch}_dmg.${ext}",
+ "sign": true
+ },
+ "afterSign": "build/notarize.cjs",
+ "mas": {
+ "provisioningProfile": "build/Termix_Mac_App_Store.provisionprofile",
+ "entitlements": "build/entitlements.mas.plist",
+ "entitlementsInherit": "build/entitlements.mas.inherit.plist",
+ "hardenedRuntime": false,
+ "gatekeeperAssess": false,
+ "asarUnpack": ["**/*.node"],
+ "type": "distribution",
+ "category": "public.app-category.developer-tools",
+ "artifactName": "termix_macos_${arch}_mas.${ext}",
+ "extendInfo": {
+ "ITSAppUsesNonExemptEncryption": false,
+ "NSAppleEventsUsageDescription": "Termix needs access to control other applications for terminal operations."
+ }
}
}
diff --git a/electron/main.cjs b/electron/main.cjs
index dadeee4b..8f623912 100644
--- a/electron/main.cjs
+++ b/electron/main.cjs
@@ -1,22 +1,34 @@
-const { app, BrowserWindow, shell, ipcMain, dialog } = require("electron");
+const {
+ app,
+ BrowserWindow,
+ shell,
+ ipcMain,
+ dialog,
+ Menu,
+} = require("electron");
const path = require("path");
const fs = require("fs");
const os = require("os");
+if (process.platform === "linux") {
+ app.commandLine.appendSwitch("--no-sandbox");
+ app.commandLine.appendSwitch("--disable-setuid-sandbox");
+ app.commandLine.appendSwitch("--disable-dev-shm-usage");
+
+ app.disableHardwareAcceleration();
+ app.commandLine.appendSwitch("--disable-gpu");
+ app.commandLine.appendSwitch("--disable-gpu-compositing");
+}
+
app.commandLine.appendSwitch("--ignore-certificate-errors");
app.commandLine.appendSwitch("--ignore-ssl-errors");
app.commandLine.appendSwitch("--ignore-certificate-errors-spki-list");
app.commandLine.appendSwitch("--enable-features=NetworkService");
-if (process.platform === "linux") {
- app.commandLine.appendSwitch("--no-sandbox");
- app.commandLine.appendSwitch("--disable-setuid-sandbox");
- app.commandLine.appendSwitch("--disable-dev-shm-usage");
-}
-
let mainWindow = null;
const isDev = process.env.NODE_ENV === "development" || !app.isPackaged;
+const appRoot = isDev ? process.cwd() : path.join(__dirname, "..");
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
@@ -34,40 +46,131 @@ if (!gotTheLock) {
}
function createWindow() {
+ const appVersion = app.getVersion();
+ const electronVersion = process.versions.electron;
+ const platform =
+ process.platform === "win32"
+ ? "Windows"
+ : process.platform === "darwin"
+ ? "macOS"
+ : "Linux";
+
mainWindow = new BrowserWindow({
width: 1200,
height: 800,
minWidth: 800,
minHeight: 600,
title: "Termix",
- icon: isDev
- ? path.join(__dirname, "..", "public", "icon.png")
- : path.join(process.resourcesPath, "public", "icon.png"),
+ icon: path.join(appRoot, "public", "icon.png"),
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
- webSecurity: true,
+ webSecurity: false,
preload: path.join(__dirname, "preload.js"),
+ partition: "persist:termix",
+ allowRunningInsecureContent: true,
+ webviewTag: true,
+ offscreen: false,
},
- show: false,
+ show: true,
});
if (process.platform !== "darwin") {
mainWindow.setMenuBarVisibility(false);
}
+ const customUserAgent = `Termix-Desktop/${appVersion} (${platform}; Electron/${electronVersion})`;
+ mainWindow.webContents.setUserAgent(customUserAgent);
+
+ mainWindow.webContents.session.webRequest.onBeforeSendHeaders(
+ (details, callback) => {
+ details.requestHeaders["X-Electron-App"] = "true";
+
+ details.requestHeaders["User-Agent"] = customUserAgent;
+
+ callback({ requestHeaders: details.requestHeaders });
+ },
+ );
+
if (isDev) {
mainWindow.loadURL("http://localhost:5173");
mainWindow.webContents.openDevTools();
} else {
- const indexPath = path.join(__dirname, "..", "dist", "index.html");
- mainWindow.loadFile(indexPath);
+ const indexPath = path.join(appRoot, "dist", "index.html");
+ mainWindow.loadFile(indexPath).catch((err) => {
+ console.error("Failed to load file:", err);
+ });
}
+ mainWindow.webContents.session.webRequest.onHeadersReceived(
+ (details, callback) => {
+ const headers = details.responseHeaders;
+
+ if (headers) {
+ delete headers["x-frame-options"];
+ delete headers["X-Frame-Options"];
+
+ if (headers["content-security-policy"]) {
+ headers["content-security-policy"] = headers[
+ "content-security-policy"
+ ]
+ .map((value) => value.replace(/frame-ancestors[^;]*/gi, ""))
+ .filter((value) => value.trim().length > 0);
+
+ if (headers["content-security-policy"].length === 0) {
+ delete headers["content-security-policy"];
+ }
+ }
+ if (headers["Content-Security-Policy"]) {
+ headers["Content-Security-Policy"] = headers[
+ "Content-Security-Policy"
+ ]
+ .map((value) => value.replace(/frame-ancestors[^;]*/gi, ""))
+ .filter((value) => value.trim().length > 0);
+
+ if (headers["Content-Security-Policy"].length === 0) {
+ delete headers["Content-Security-Policy"];
+ }
+ }
+
+ if (headers["set-cookie"]) {
+ headers["set-cookie"] = headers["set-cookie"].map((cookie) => {
+ let modified = cookie.replace(
+ /;\s*SameSite=Strict/gi,
+ "; SameSite=None",
+ );
+ modified = modified.replace(
+ /;\s*SameSite=Lax/gi,
+ "; SameSite=None",
+ );
+ if (!modified.includes("SameSite=")) {
+ modified += "; SameSite=None";
+ }
+ if (
+ !modified.includes("Secure") &&
+ details.url.startsWith("https")
+ ) {
+ modified += "; Secure";
+ }
+ return modified;
+ });
+ }
+ }
+
+ callback({ responseHeaders: headers });
+ },
+ );
+
mainWindow.once("ready-to-show", () => {
mainWindow.show();
});
+ setTimeout(() => {
+ if (mainWindow && !mainWindow.isVisible()) {
+ mainWindow.show();
+ }
+ }, 3000);
+
mainWindow.webContents.on(
"did-fail-load",
(event, errorCode, errorDescription, validatedURL) => {
@@ -84,13 +187,6 @@ function createWindow() {
console.log("Frontend loaded successfully");
});
- mainWindow.on("close", (event) => {
- if (process.platform === "darwin") {
- event.preventDefault();
- mainWindow.hide();
- }
- });
-
mainWindow.on("closed", () => {
mainWindow = null;
});
@@ -462,21 +558,78 @@ ipcMain.handle("test-server-connection", async (event, serverUrl) => {
}
});
+function createMenu() {
+ if (process.platform === "darwin") {
+ const template = [
+ {
+ label: app.name,
+ submenu: [
+ { role: "about" },
+ { type: "separator" },
+ { role: "services" },
+ { type: "separator" },
+ { role: "hide" },
+ { role: "hideOthers" },
+ { role: "unhide" },
+ { type: "separator" },
+ { role: "quit" },
+ ],
+ },
+ {
+ label: "Edit",
+ submenu: [
+ { role: "undo" },
+ { role: "redo" },
+ { type: "separator" },
+ { role: "cut" },
+ { role: "copy" },
+ { role: "paste" },
+ { role: "selectAll" },
+ ],
+ },
+ {
+ label: "View",
+ submenu: [
+ { role: "reload" },
+ { role: "forceReload" },
+ { role: "toggleDevTools" },
+ { type: "separator" },
+ { role: "resetZoom" },
+ { role: "zoomIn" },
+ { role: "zoomOut" },
+ { type: "separator" },
+ { role: "togglefullscreen" },
+ ],
+ },
+ {
+ label: "Window",
+ submenu: [
+ { role: "minimize" },
+ { role: "zoom" },
+ { type: "separator" },
+ { role: "front" },
+ { type: "separator" },
+ { role: "window" },
+ ],
+ },
+ ];
+ const menu = Menu.buildFromTemplate(template);
+ Menu.setApplicationMenu(menu);
+ }
+}
+
app.whenReady().then(() => {
+ createMenu();
createWindow();
});
app.on("window-all-closed", () => {
- if (process.platform !== "darwin") {
- app.quit();
- }
+ app.quit();
});
app.on("activate", () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
- } else if (mainWindow) {
- mainWindow.show();
}
});
diff --git a/flatpak/com.karmaa.termix.desktop b/flatpak/com.karmaa.termix.desktop
new file mode 100644
index 00000000..3aabfd06
--- /dev/null
+++ b/flatpak/com.karmaa.termix.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Name=Termix
+Comment=Web-based server management platform with SSH terminal, tunneling, and file editing
+Exec=termix %U
+Icon=com.karmaa.termix
+Terminal=false
+Type=Application
+Categories=Development;Network;System;
+Keywords=ssh;terminal;server;management;tunnel;
+StartupWMClass=termix
+StartupNotify=true
diff --git a/flatpak/com.karmaa.termix.metainfo.xml b/flatpak/com.karmaa.termix.metainfo.xml
new file mode 100644
index 00000000..0c3c6895
--- /dev/null
+++ b/flatpak/com.karmaa.termix.metainfo.xml
@@ -0,0 +1,77 @@
+
+
+ com.karmaa.termix
+ Termix
+ Web-based server management platform with SSH terminal, tunneling, and file editing
+
+ CC0-1.0
+ GPL-3.0-or-later
+
+ bugattiguy527
+
+
+
+ Termix is an open-source, forever-free, self-hosted all-in-one server management platform.
+ It provides a web-based solution for managing your servers and infrastructure through a single, intuitive interface.
+
+ Features:
+
+ SSH terminal access with full terminal emulation
+ SSH tunneling capabilities for secure port forwarding
+ Remote file management with editor support
+ Server monitoring and management tools
+ Self-hosted solution - keep your data private
+ Modern, intuitive web interface
+
+
+
+ com.karmaa.termix.desktop
+
+
+
+ https://raw.githubusercontent.com/Termix-SSH/Termix/main/public/screenshots/terminal.png
+ SSH Terminal Interface
+
+
+
+ https://github.com/Termix-SSH/Termix
+ https://github.com/Termix-SSH/Support/issues
+ https://docs.termix.site
+ https://github.com/Termix-SSH/Termix
+
+
+ moderate
+
+
+
+
+
+ Latest release of Termix
+
+ https://github.com/Termix-SSH/Termix/releases
+
+
+
+
+ Development
+ Network
+ System
+
+
+
+ ssh
+ terminal
+ server
+ management
+ tunnel
+ file-manager
+
+
+
+ termix
+
+
+
+ always
+
+
diff --git a/flatpak/com.karmaa.termix.yml b/flatpak/com.karmaa.termix.yml
new file mode 100644
index 00000000..4405a10f
--- /dev/null
+++ b/flatpak/com.karmaa.termix.yml
@@ -0,0 +1,69 @@
+app-id: com.karmaa.termix
+runtime: org.freedesktop.Platform
+runtime-version: "23.08"
+sdk: org.freedesktop.Sdk
+base: org.electronjs.Electron2.BaseApp
+base-version: "23.08"
+command: termix
+separate-locales: false
+
+finish-args:
+ - --socket=x11
+ - --socket=wayland
+ - --socket=pulseaudio
+ - --share=network
+ - --share=ipc
+ - --device=dri
+ - --filesystem=home
+ - --socket=ssh-auth
+ - --talk-name=org.freedesktop.Notifications
+ - --talk-name=org.freedesktop.secrets
+
+modules:
+ - name: termix
+ buildsystem: simple
+ build-commands:
+ - chmod +x termix.AppImage
+ - ./termix.AppImage --appimage-extract
+
+ - install -Dm755 squashfs-root/termix /app/bin/termix
+ - cp -r squashfs-root/resources /app/bin/
+ - cp -r squashfs-root/locales /app/bin/ || true
+
+ - install -Dm644 com.karmaa.termix.desktop /app/share/applications/com.karmaa.termix.desktop
+
+ - install -Dm644 com.karmaa.termix.metainfo.xml /app/share/metainfo/com.karmaa.termix.metainfo.xml
+
+ - install -Dm644 com.karmaa.termix.svg /app/share/icons/hicolor/scalable/apps/com.karmaa.termix.svg
+ - install -Dm644 icon-256.png /app/share/icons/hicolor/256x256/apps/com.karmaa.termix.png || true
+ - install -Dm644 icon-128.png /app/share/icons/hicolor/128x128/apps/com.karmaa.termix.png || true
+
+ sources:
+ - type: file
+ url: https://github.com/Termix-SSH/Termix/releases/download/release-VERSION_PLACEHOLDER-tag/termix_linux_x64_VERSION_PLACEHOLDER_appimage.AppImage
+ sha256: CHECKSUM_X64_PLACEHOLDER
+ dest-filename: termix.AppImage
+ only-arches:
+ - x86_64
+
+ - type: file
+ url: https://github.com/Termix-SSH/Termix/releases/download/release-VERSION_PLACEHOLDER-tag/termix_linux_arm64_VERSION_PLACEHOLDER_appimage.AppImage
+ sha256: CHECKSUM_ARM64_PLACEHOLDER
+ dest-filename: termix.AppImage
+ only-arches:
+ - aarch64
+
+ - type: file
+ path: com.karmaa.termix.desktop
+
+ - type: file
+ path: com.karmaa.termix.metainfo.xml
+
+ - type: file
+ path: com.karmaa.termix.svg
+
+ - type: file
+ path: icon-256.png
+
+ - type: file
+ path: icon-128.png
diff --git a/flatpak/flathub.json b/flatpak/flathub.json
new file mode 100644
index 00000000..43c4074e
--- /dev/null
+++ b/flatpak/flathub.json
@@ -0,0 +1,5 @@
+{
+ "only-arches": ["x86_64", "aarch64"],
+ "skip-icons-check": false,
+ "skip-appstream-check": false
+}
diff --git a/flatpak/prepare-flatpak.sh b/flatpak/prepare-flatpak.sh
new file mode 100644
index 00000000..05162b64
--- /dev/null
+++ b/flatpak/prepare-flatpak.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+set -e
+
+VERSION="$1"
+CHECKSUM="$2"
+RELEASE_DATE="$3"
+
+if [ -z "$VERSION" ] || [ -z "$CHECKSUM" ] || [ -z "$RELEASE_DATE" ]; then
+ echo "Usage: $0 "
+ echo "Example: $0 1.8.0 abc123... 2025-10-26"
+ exit 1
+fi
+
+echo "Preparing Flatpak submission for version $VERSION"
+
+cp public/icon.svg flatpak/com.karmaa.termix.svg
+echo "✓ Copied SVG icon"
+
+if command -v convert &> /dev/null; then
+ convert public/icon.png -resize 256x256 flatpak/icon-256.png
+ convert public/icon.png -resize 128x128 flatpak/icon-128.png
+ echo "✓ Generated PNG icons"
+else
+ cp public/icon.png flatpak/icon-256.png
+ cp public/icon.png flatpak/icon-128.png
+ echo "⚠ ImageMagick not found, using original icon"
+fi
+
+sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" flatpak/com.karmaa.termix.yml
+sed -i "s/CHECKSUM_PLACEHOLDER/$CHECKSUM/g" flatpak/com.karmaa.termix.yml
+echo "✓ Updated manifest with version $VERSION"
+
+sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" flatpak/com.karmaa.termix.metainfo.xml
+sed -i "s/DATE_PLACEHOLDER/$RELEASE_DATE/g" flatpak/com.karmaa.termix.metainfo.xml
diff --git a/homebrew/termix.rb b/homebrew/termix.rb
new file mode 100644
index 00000000..9522fa73
--- /dev/null
+++ b/homebrew/termix.rb
@@ -0,0 +1,24 @@
+cask "termix" do
+ version "VERSION_PLACEHOLDER"
+ sha256 "CHECKSUM_PLACEHOLDER"
+
+ url "https://github.com/Termix-SSH/Termix/releases/download/release-#{version}-tag/termix_macos_universal_#{version}_dmg.dmg"
+ name "Termix"
+ desc "Web-based server management platform with SSH terminal, tunneling, and file editing"
+ homepage "https://github.com/Termix-SSH/Termix"
+
+ livecheck do
+ url :url
+ strategy :github_latest
+ end
+
+ app "Termix.app"
+
+ zap trash: [
+ "~/Library/Application Support/termix",
+ "~/Library/Caches/com.karmaa.termix",
+ "~/Library/Caches/com.karmaa.termix.ShipIt",
+ "~/Library/Preferences/com.karmaa.termix.plist",
+ "~/Library/Saved Application State/com.karmaa.termix.savedState",
+ ]
+end
diff --git a/index.html b/index.html
index 5c925758..b376f7cd 100644
--- a/index.html
+++ b/index.html
@@ -5,6 +5,36 @@
Termix
+
diff --git a/package-lock.json b/package-lock.json
index bd087a93..011b4f07 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "termix",
- "version": "1.7.2",
+ "version": "1.8.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "termix",
- "version": "1.7.2",
+ "version": "1.8.0",
"dependencies": {
"@codemirror/autocomplete": "^6.18.7",
"@codemirror/commands": "^6.3.3",
@@ -25,11 +25,12 @@
"@radix-ui/react-scroll-area": "^1.2.9",
"@radix-ui/react-select": "^2.2.5",
"@radix-ui/react-separator": "^1.1.7",
+ "@radix-ui/react-slider": "^1.3.6",
"@radix-ui/react-slot": "^1.2.3",
"@radix-ui/react-switch": "^1.2.5",
"@radix-ui/react-tabs": "^1.1.12",
"@radix-ui/react-tooltip": "^1.2.8",
- "@tailwindcss/vite": "^4.1.11",
+ "@tailwindcss/vite": "^4.1.14",
"@types/bcryptjs": "^2.4.6",
"@types/cookie-parser": "^1.4.9",
"@types/jszip": "^3.4.0",
@@ -80,16 +81,21 @@
"react-simple-keyboard": "^3.8.120",
"react-syntax-highlighter": "^15.6.6",
"react-xtermjs": "^1.0.10",
+ "recharts": "^3.2.1",
"remark-gfm": "^4.0.1",
"sonner": "^2.0.7",
"speakeasy": "^2.0.0",
"ssh2": "^1.16.0",
"tailwind-merge": "^3.3.1",
+ "tailwindcss": "^4.1.14",
"wait-on": "^9.0.1",
"ws": "^8.18.3",
"zod": "^4.0.5"
},
"devDependencies": {
+ "@commitlint/cli": "^20.1.0",
+ "@commitlint/config-conventional": "^20.0.0",
+ "@electron/notarize": "^2.5.0",
"@eslint/js": "^9.34.0",
"@types/better-sqlite3": "^7.6.13",
"@types/cors": "^2.8.19",
@@ -100,7 +106,7 @@
"@types/react-dom": "^19.1.6",
"@types/ssh2": "^1.15.5",
"@types/ws": "^8.18.1",
- "@vitejs/plugin-react-swc": "^3.10.2",
+ "@vitejs/plugin-react": "^4.3.4",
"concurrently": "^9.2.1",
"electron": "^38.0.0",
"electron-builder": "^26.0.12",
@@ -108,12 +114,269 @@
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.3.0",
+ "husky": "^9.1.7",
+ "lint-staged": "^16.2.3",
"prettier": "3.6.2",
"typescript": "~5.9.2",
"typescript-eslint": "^8.40.0",
"vite": "^7.1.5"
}
},
+ "node_modules/@babel/code-frame": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz",
+ "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
+ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.28.5",
+ "@babel/helper-compilation-targets": "^7.27.2",
+ "@babel/helper-module-transforms": "^7.28.3",
+ "@babel/helpers": "^7.28.4",
+ "@babel/parser": "^7.28.5",
+ "@babel/template": "^7.27.2",
+ "@babel/traverse": "^7.28.5",
+ "@babel/types": "^7.28.5",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
+ "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.28.5",
+ "@babel/types": "^7.28.5",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
+ "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.27.2",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
+ "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
+ "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/traverse": "^7.28.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
+ "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
+ "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.27.2",
+ "@babel/types": "^7.28.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
+ "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.5"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
+ "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
+ "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/runtime": {
"version": "7.28.4",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
@@ -123,11 +386,60 @@
"node": ">=6.9.0"
}
},
- "node_modules/@codemirror/autocomplete": {
- "version": "6.19.0",
- "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.19.0.tgz",
- "integrity": "sha512-61Hfv3cF07XvUxNeC3E7jhG8XNi1Yom1G0lRC936oLnlF+jrbrv8rc/J98XlYzcsAoTVupfsf5fLej1aI8kyIg==",
+ "node_modules/@babel/template": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
+ "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/parser": "^7.27.2",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz",
+ "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.28.5",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.28.5",
+ "@babel/template": "^7.27.2",
+ "@babel/types": "^7.28.5",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
+ "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@codemirror/autocomplete": {
+ "version": "6.19.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.19.1.tgz",
+ "integrity": "sha512-q6NenYkEy2fn9+JyjIxMWcNjzTL/IhwqfzOut1/G3PrIFkrbl4AL7Wkse5tLrQUUyqGoAKU5+Pi5jnnXxH5HGw==",
+ "license": "MIT",
+ "peer": true,
"dependencies": {
"@codemirror/language": "^6.0.0",
"@codemirror/state": "^6.0.0",
@@ -136,9 +448,9 @@
}
},
"node_modules/@codemirror/commands": {
- "version": "6.8.1",
- "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.1.tgz",
- "integrity": "sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==",
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.0.tgz",
+ "integrity": "sha512-2xUIc5mHXQzT16JnyOFkh8PvfeXuIut3pslWGfsGOhxP/lpgRm9HOl/mpzLErgt5mXDovqA0d11P21gofRLb9w==",
"license": "MIT",
"dependencies": {
"@codemirror/language": "^6.0.0",
@@ -176,6 +488,7 @@
"resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.3.1.tgz",
"integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@codemirror/autocomplete": "^6.0.0",
"@codemirror/language": "^6.0.0",
@@ -198,10 +511,11 @@
}
},
"node_modules/@codemirror/lang-html": {
- "version": "6.4.10",
- "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.10.tgz",
- "integrity": "sha512-h/SceTVsN5r+WE+TVP2g3KDvNoSzbSrtZXCKo4vkKdbfT5t4otuVgngGdFukOO/rwRD2++pCxoh6xD4TEVMkQA==",
+ "version": "6.4.11",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.11.tgz",
+ "integrity": "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@codemirror/autocomplete": "^6.0.0",
"@codemirror/lang-css": "^6.0.0",
@@ -211,7 +525,7 @@
"@codemirror/view": "^6.17.0",
"@lezer/common": "^1.0.0",
"@lezer/css": "^1.1.0",
- "@lezer/html": "^1.3.0"
+ "@lezer/html": "^1.3.12"
}
},
"node_modules/@codemirror/lang-java": {
@@ -229,6 +543,7 @@
"resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.4.tgz",
"integrity": "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@codemirror/autocomplete": "^6.0.0",
"@codemirror/language": "^6.6.0",
@@ -239,6 +554,19 @@
"@lezer/javascript": "^1.0.0"
}
},
+ "node_modules/@codemirror/lang-jinja": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-jinja/-/lang-jinja-6.0.0.tgz",
+ "integrity": "sha512-47MFmRcR8UAxd8DReVgj7WJN1WSAMT7OJnewwugZM4XiHWkOjgJQqvEM1NpMj9ALMPyxmlziEI1opH9IaEvmaw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/lang-html": "^6.0.0",
+ "@codemirror/language": "^6.0.0",
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.2.0",
+ "@lezer/lr": "^1.4.0"
+ }
+ },
"node_modules/@codemirror/lang-json": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.2.tgz",
@@ -279,9 +607,9 @@
}
},
"node_modules/@codemirror/lang-markdown": {
- "version": "6.3.4",
- "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.3.4.tgz",
- "integrity": "sha512-fBm0BO03azXnTAsxhONDYHi/qWSI+uSEIpzKM7h/bkIc9fHnFp9y7KTMXKON0teNT97pFhc1a9DQTtWBYEZ7ug==",
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.5.0.tgz",
+ "integrity": "sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==",
"license": "MIT",
"dependencies": {
"@codemirror/autocomplete": "^6.7.1",
@@ -416,6 +744,7 @@
"resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.3.tgz",
"integrity": "sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@codemirror/state": "^6.0.0",
"@codemirror/view": "^6.23.0",
@@ -426,9 +755,9 @@
}
},
"node_modules/@codemirror/language-data": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/@codemirror/language-data/-/language-data-6.5.1.tgz",
- "integrity": "sha512-0sWxeUSNlBr6OmkqybUTImADFUP0M3P0IiSde4nc24bz/6jIYzqYSgkOSLS+CBIoW1vU8Q9KUWXscBXeoMVC9w==",
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/language-data/-/language-data-6.5.2.tgz",
+ "integrity": "sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg==",
"license": "MIT",
"dependencies": {
"@codemirror/lang-angular": "^0.1.0",
@@ -438,6 +767,7 @@
"@codemirror/lang-html": "^6.0.0",
"@codemirror/lang-java": "^6.0.0",
"@codemirror/lang-javascript": "^6.0.0",
+ "@codemirror/lang-jinja": "^6.0.0",
"@codemirror/lang-json": "^6.0.0",
"@codemirror/lang-less": "^6.0.0",
"@codemirror/lang-liquid": "^6.0.0",
@@ -465,9 +795,9 @@
}
},
"node_modules/@codemirror/lint": {
- "version": "6.8.5",
- "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.5.tgz",
- "integrity": "sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==",
+ "version": "6.9.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.1.tgz",
+ "integrity": "sha512-te7To1EQHePBQQzasDKWmK2xKINIXpk+xAiSYr9ZN+VB4KaT+/Hi2PEkeErTk5BV3PTz1TLyQL4MtJfPkKZ9sw==",
"license": "MIT",
"dependencies": {
"@codemirror/state": "^6.0.0",
@@ -491,6 +821,7 @@
"resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz",
"integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@marijn/find-cluster-break": "^1.0.0"
}
@@ -508,10 +839,11 @@
}
},
"node_modules/@codemirror/view": {
- "version": "6.38.4",
- "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.4.tgz",
- "integrity": "sha512-hduz0suCcUSC/kM8Fq3A9iLwInJDl8fD1xLpTIk+5xkNm8z/FT7UsIa9sOXrkpChh+XXc18RzswE8QqELsVl+g==",
+ "version": "6.38.6",
+ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz",
+ "integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@codemirror/state": "^6.5.0",
"crelt": "^1.0.6",
@@ -519,6 +851,302 @@
"w3c-keyname": "^2.2.4"
}
},
+ "node_modules/@commitlint/cli": {
+ "version": "20.1.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.1.0.tgz",
+ "integrity": "sha512-pW5ujjrOovhq5RcYv5xCpb4GkZxkO2+GtOdBW2/qrr0Ll9tl3PX0aBBobGQl3mdZUbOBgwAexEQLeH6uxL0VYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/format": "^20.0.0",
+ "@commitlint/lint": "^20.0.0",
+ "@commitlint/load": "^20.1.0",
+ "@commitlint/read": "^20.0.0",
+ "@commitlint/types": "^20.0.0",
+ "tinyexec": "^1.0.0",
+ "yargs": "^17.0.0"
+ },
+ "bin": {
+ "commitlint": "cli.js"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/config-conventional": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.0.0.tgz",
+ "integrity": "sha512-q7JroPIkDBtyOkVe9Bca0p7kAUYxZMxkrBArCfuD3yN4KjRAenP9PmYwnn7rsw8Q+hHq1QB2BRmBh0/Z19ZoJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/types": "^20.0.0",
+ "conventional-changelog-conventionalcommits": "^7.0.2"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/config-validator": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.0.0.tgz",
+ "integrity": "sha512-BeyLMaRIJDdroJuYM2EGhDMGwVBMZna9UiIqV9hxj+J551Ctc6yoGuGSmghOy/qPhBSuhA6oMtbEiTmxECafsg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/types": "^20.0.0",
+ "ajv": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/ensure": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.0.0.tgz",
+ "integrity": "sha512-WBV47Fffvabe68n+13HJNFBqiMH5U1Ryls4W3ieGwPC0C7kJqp3OVQQzG2GXqOALmzrgAB+7GXmyy8N9ct8/Fg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/types": "^20.0.0",
+ "lodash.camelcase": "^4.3.0",
+ "lodash.kebabcase": "^4.1.1",
+ "lodash.snakecase": "^4.1.1",
+ "lodash.startcase": "^4.4.0",
+ "lodash.upperfirst": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/execute-rule": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-20.0.0.tgz",
+ "integrity": "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/format": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.0.0.tgz",
+ "integrity": "sha512-zrZQXUcSDmQ4eGGrd+gFESiX0Rw+WFJk7nW4VFOmxub4mAATNKBQ4vNw5FgMCVehLUKG2OT2LjOqD0Hk8HvcRg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/types": "^20.0.0",
+ "chalk": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/format/node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@commitlint/is-ignored": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.0.0.tgz",
+ "integrity": "sha512-ayPLicsqqGAphYIQwh9LdAYOVAQ9Oe5QCgTNTj+BfxZb9b/JW222V5taPoIBzYnAP0z9EfUtljgBk+0BN4T4Cw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/types": "^20.0.0",
+ "semver": "^7.6.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/lint": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.0.0.tgz",
+ "integrity": "sha512-kWrX8SfWk4+4nCexfLaQT3f3EcNjJwJBsSZ5rMBw6JCd6OzXufFHgel2Curos4LKIxwec9WSvs2YUD87rXlxNQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/is-ignored": "^20.0.0",
+ "@commitlint/parse": "^20.0.0",
+ "@commitlint/rules": "^20.0.0",
+ "@commitlint/types": "^20.0.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/load": {
+ "version": "20.1.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.1.0.tgz",
+ "integrity": "sha512-qo9ER0XiAimATQR5QhvvzePfeDfApi/AFlC1G+YN+ZAY8/Ua6IRrDrxRvQAr+YXUKAxUsTDSp9KXeXLBPsNRWg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/config-validator": "^20.0.0",
+ "@commitlint/execute-rule": "^20.0.0",
+ "@commitlint/resolve-extends": "^20.1.0",
+ "@commitlint/types": "^20.0.0",
+ "chalk": "^5.3.0",
+ "cosmiconfig": "^9.0.0",
+ "cosmiconfig-typescript-loader": "^6.1.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "lodash.uniq": "^4.5.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/load/node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@commitlint/message": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.0.0.tgz",
+ "integrity": "sha512-gLX4YmKnZqSwkmSB9OckQUrI5VyXEYiv3J5JKZRxIp8jOQsWjZgHSG/OgEfMQBK9ibdclEdAyIPYggwXoFGXjQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/parse": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.0.0.tgz",
+ "integrity": "sha512-j/PHCDX2bGM5xGcWObOvpOc54cXjn9g6xScXzAeOLwTsScaL4Y+qd0pFC6HBwTtrH92NvJQc+2Lx9HFkVi48cg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/types": "^20.0.0",
+ "conventional-changelog-angular": "^7.0.0",
+ "conventional-commits-parser": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/read": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.0.0.tgz",
+ "integrity": "sha512-Ti7Y7aEgxsM1nkwA4ZIJczkTFRX/+USMjNrL9NXwWQHqNqrBX2iMi+zfuzZXqfZ327WXBjdkRaytJ+z5vNqTOA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/top-level": "^20.0.0",
+ "@commitlint/types": "^20.0.0",
+ "git-raw-commits": "^4.0.0",
+ "minimist": "^1.2.8",
+ "tinyexec": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/resolve-extends": {
+ "version": "20.1.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.1.0.tgz",
+ "integrity": "sha512-cxKXQrqHjZT3o+XPdqDCwOWVFQiae++uwd9dUBC7f2MdV58ons3uUvASdW7m55eat5sRiQ6xUHyMWMRm6atZWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/config-validator": "^20.0.0",
+ "@commitlint/types": "^20.0.0",
+ "global-directory": "^4.0.1",
+ "import-meta-resolve": "^4.0.0",
+ "lodash.mergewith": "^4.6.2",
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/rules": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.0.0.tgz",
+ "integrity": "sha512-gvg2k10I/RfvHn5I5sxvVZKM1fl72Sqrv2YY/BnM7lMHcYqO0E2jnRWoYguvBfEcZ39t+rbATlciggVe77E4zA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@commitlint/ensure": "^20.0.0",
+ "@commitlint/message": "^20.0.0",
+ "@commitlint/to-lines": "^20.0.0",
+ "@commitlint/types": "^20.0.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/to-lines": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-20.0.0.tgz",
+ "integrity": "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/top-level": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.0.0.tgz",
+ "integrity": "sha512-drXaPSP2EcopukrUXvUXmsQMu3Ey/FuJDc/5oiW4heoCfoE5BdLQyuc7veGeE3aoQaTVqZnh4D5WTWe2vefYKg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/types": {
+ "version": "20.0.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.0.0.tgz",
+ "integrity": "sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/conventional-commits-parser": "^5.0.0",
+ "chalk": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=v18"
+ }
+ },
+ "node_modules/@commitlint/types/node_modules/chalk": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
"node_modules/@develar/schema-utils": {
"version": "2.6.5",
"resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz",
@@ -537,6 +1165,41 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/@develar/schema-utils/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/@develar/schema-utils/node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/@develar/schema-utils/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@electron/asar": {
"version": "3.2.18",
"resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.18.tgz",
@@ -583,45 +1246,6 @@
"electron-fuses": "dist/bin.js"
}
},
- "node_modules/@electron/fuses/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@electron/fuses/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@electron/fuses/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/@electron/get": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz",
@@ -644,30 +1268,50 @@
"global-agent": "^3.0.0"
}
},
- "node_modules/@electron/get/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "node_modules/@electron/get/node_modules/fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ms": "^2.1.3"
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
},
"engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "node": ">=6 <7 || >=8"
}
},
- "node_modules/@electron/get/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "node_modules/@electron/get/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/@electron/get/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@electron/get/node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
},
"node_modules/@electron/node-gyp": {
"version": "10.2.0-electron.1",
@@ -738,47 +1382,6 @@
"node": ">=10"
}
},
- "node_modules/@electron/node-gyp/node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@electron/node-gyp/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@electron/node-gyp/node_modules/tar": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
- "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^5.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@electron/notarize": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz",
@@ -794,70 +1397,6 @@
"node": ">= 10.0.0"
}
},
- "node_modules/@electron/notarize/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@electron/notarize/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@electron/notarize/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@electron/notarize/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@electron/notarize/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/@electron/osx-sign": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.1.tgz",
@@ -880,24 +1419,6 @@
"node": ">=12.0.0"
}
},
- "node_modules/@electron/osx-sign/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/@electron/osx-sign/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -926,36 +1447,6 @@
"url": "https://github.com/sponsors/gjtorikian/"
}
},
- "node_modules/@electron/osx-sign/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@electron/osx-sign/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@electron/osx-sign/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/@electron/rebuild": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.0.tgz",
@@ -985,24 +1476,6 @@
"node": ">=12.13.0"
}
},
- "node_modules/@electron/rebuild/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/@electron/rebuild/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -1018,77 +1491,6 @@
"node": ">=12"
}
},
- "node_modules/@electron/rebuild/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@electron/rebuild/node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@electron/rebuild/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@electron/rebuild/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@electron/rebuild/node_modules/tar": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
- "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^5.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@electron/rebuild/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/@electron/universal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.1.tgz",
@@ -1118,24 +1520,6 @@
"balanced-match": "^1.0.0"
}
},
- "node_modules/@electron/universal/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/@electron/universal/node_modules/fs-extra": {
"version": "11.3.2",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz",
@@ -1151,19 +1535,6 @@
"node": ">=14.14"
}
},
- "node_modules/@electron/universal/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
"node_modules/@electron/universal/node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -1180,23 +1551,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@electron/universal/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@electron/universal/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/@electron/windows-sign": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz",
@@ -1204,7 +1558,6 @@
"dev": true,
"license": "BSD-2-Clause",
"optional": true,
- "peer": true,
"dependencies": {
"cross-dirname": "^0.1.0",
"debug": "^4.3.4",
@@ -1219,26 +1572,6 @@
"node": ">=14.14"
}
},
- "node_modules/@electron/windows-sign/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/@electron/windows-sign/node_modules/fs-extra": {
"version": "11.3.2",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz",
@@ -1246,7 +1579,6 @@
"dev": true,
"license": "MIT",
"optional": true,
- "peer": true,
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -1256,46 +1588,10 @@
"node": ">=14.14"
}
},
- "node_modules/@electron/windows-sign/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@electron/windows-sign/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true
- },
- "node_modules/@electron/windows-sign/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz",
- "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz",
+ "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==",
"cpu": [
"ppc64"
],
@@ -1309,9 +1605,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz",
- "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz",
+ "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==",
"cpu": [
"arm"
],
@@ -1325,9 +1621,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz",
- "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz",
+ "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==",
"cpu": [
"arm64"
],
@@ -1341,9 +1637,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz",
- "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz",
+ "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==",
"cpu": [
"x64"
],
@@ -1357,9 +1653,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz",
- "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz",
+ "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==",
"cpu": [
"arm64"
],
@@ -1373,9 +1669,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz",
- "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz",
+ "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==",
"cpu": [
"x64"
],
@@ -1389,9 +1685,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz",
- "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz",
+ "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==",
"cpu": [
"arm64"
],
@@ -1405,9 +1701,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz",
- "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz",
+ "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==",
"cpu": [
"x64"
],
@@ -1421,9 +1717,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz",
- "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz",
+ "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==",
"cpu": [
"arm"
],
@@ -1437,9 +1733,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz",
- "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz",
+ "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==",
"cpu": [
"arm64"
],
@@ -1453,9 +1749,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz",
- "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz",
+ "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==",
"cpu": [
"ia32"
],
@@ -1469,9 +1765,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz",
- "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz",
+ "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==",
"cpu": [
"loong64"
],
@@ -1485,9 +1781,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz",
- "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz",
+ "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==",
"cpu": [
"mips64el"
],
@@ -1501,9 +1797,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz",
- "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz",
+ "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==",
"cpu": [
"ppc64"
],
@@ -1517,9 +1813,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz",
- "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz",
+ "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==",
"cpu": [
"riscv64"
],
@@ -1533,9 +1829,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz",
- "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz",
+ "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==",
"cpu": [
"s390x"
],
@@ -1549,9 +1845,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz",
- "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz",
+ "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==",
"cpu": [
"x64"
],
@@ -1565,9 +1861,9 @@
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz",
- "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz",
+ "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==",
"cpu": [
"arm64"
],
@@ -1581,9 +1877,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz",
- "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz",
+ "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==",
"cpu": [
"x64"
],
@@ -1597,9 +1893,9 @@
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz",
- "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz",
+ "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==",
"cpu": [
"arm64"
],
@@ -1613,9 +1909,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz",
- "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz",
+ "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==",
"cpu": [
"x64"
],
@@ -1629,9 +1925,9 @@
}
},
"node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz",
- "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz",
+ "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==",
"cpu": [
"arm64"
],
@@ -1645,9 +1941,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz",
- "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz",
+ "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==",
"cpu": [
"x64"
],
@@ -1661,9 +1957,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz",
- "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz",
+ "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==",
"cpu": [
"arm64"
],
@@ -1677,9 +1973,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz",
- "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz",
+ "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==",
"cpu": [
"ia32"
],
@@ -1693,9 +1989,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz",
- "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz",
+ "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==",
"cpu": [
"x64"
],
@@ -1741,9 +2037,9 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
- "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1751,13 +2047,13 @@
}
},
"node_modules/@eslint/config-array": {
- "version": "0.21.0",
- "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
- "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
+ "version": "0.21.1",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
+ "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/object-schema": "^2.1.6",
+ "@eslint/object-schema": "^2.1.7",
"debug": "^4.3.1",
"minimatch": "^3.1.2"
},
@@ -1765,24 +2061,6 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@eslint/config-array/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/@eslint/config-array/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -1796,27 +2074,23 @@
"node": "*"
}
},
- "node_modules/@eslint/config-array/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@eslint/config-helpers": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz",
- "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==",
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
"dev": true,
"license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/core": "^0.17.0"
+ },
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/core": {
- "version": "0.15.2",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz",
- "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==",
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -1850,22 +2124,21 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/@eslint/eslintrc/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "node_modules/@eslint/eslintrc/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ms": "^2.1.3"
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
},
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
@@ -1881,6 +2154,13 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@eslint/eslintrc/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -1894,17 +2174,10 @@
"node": "*"
}
},
- "node_modules/@eslint/eslintrc/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@eslint/js": {
- "version": "9.36.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz",
- "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==",
+ "version": "9.39.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.0.tgz",
+ "integrity": "sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1915,9 +2188,9 @@
}
},
"node_modules/@eslint/object-schema": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
- "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
+ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -1925,13 +2198,13 @@
}
},
"node_modules/@eslint/plugin-kit": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz",
- "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^0.15.2",
+ "@eslint/core": "^0.17.0",
"levn": "^0.4.1"
},
"engines": {
@@ -2014,9 +2287,9 @@
"license": "BSD-3-Clause"
},
"node_modules/@hapi/tlds": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.3.tgz",
- "integrity": "sha512-QIvUMB5VZ8HMLZF9A2oWr3AFM430QC8oGd0L35y2jHpuW6bIIca6x/xL7zUf4J7L9WJ3qjz+iJII8ncaeMbpSg==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz",
+ "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=14.0.0"
@@ -2157,19 +2430,6 @@
"node": ">=12"
}
},
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
- "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
"node_modules/@isaacs/cliui/node_modules/ansi-styles": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
@@ -2208,22 +2468,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
- "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
"node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
@@ -2242,27 +2486,6 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/@isaacs/fs-minipass": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
- "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
- "license": "ISC",
- "dependencies": {
- "minipass": "^7.0.4"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@isaacs/fs-minipass/node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "license": "ISC",
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.13",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
@@ -2309,10 +2532,11 @@
}
},
"node_modules/@lezer/common": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz",
- "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==",
- "license": "MIT"
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.3.0.tgz",
+ "integrity": "sha512-L9X8uHCYU310o99L3/MpJKYxPzXPOS7S0NmBaM7UO/x2Kb2WbmMLSkfvdr1KxRIFYOpbY0Jhn7CfLSUDzL8arQ==",
+ "license": "MIT",
+ "peer": true
},
"node_modules/@lezer/cpp": {
"version": "1.1.3",
@@ -2348,12 +2572,13 @@
}
},
"node_modules/@lezer/highlight": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz",
- "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz",
+ "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==",
"license": "MIT",
+ "peer": true,
"dependencies": {
- "@lezer/common": "^1.0.0"
+ "@lezer/common": "^1.3.0"
}
},
"node_modules/@lezer/html": {
@@ -2383,6 +2608,7 @@
"resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.4.tgz",
"integrity": "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@lezer/common": "^1.2.0",
"@lezer/highlight": "^1.1.3",
@@ -2405,14 +2631,15 @@
"resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz",
"integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@lezer/common": "^1.0.0"
}
},
"node_modules/@lezer/markdown": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.4.3.tgz",
- "integrity": "sha512-kfw+2uMrQ/wy/+ONfrH83OkdFNM0ye5Xq96cLlaCy7h5UT9FO54DU4oRoIc0CSBh5NWmWuiIJA7NGLMJbQ+Oxg==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.5.1.tgz",
+ "integrity": "sha512-F3ZFnIfNAOy/jPSk6Q0e3bs7e9grfK/n5zerkKoc5COH6Guy3Zb0vrJwXzdck79K16goBhYBRAvhf+ksqe0cMg==",
"license": "MIT",
"dependencies": {
"@lezer/common": "^1.0.0",
@@ -2524,70 +2751,6 @@
"node": ">= 10.0.0"
}
},
- "node_modules/@malept/flatpak-bundler/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/@malept/flatpak-bundler/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@malept/flatpak-bundler/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/@marijn/find-cluster-break": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz",
@@ -2595,9 +2758,9 @@
"license": "MIT"
},
"node_modules/@monaco-editor/loader": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.5.0.tgz",
- "integrity": "sha512-hKoGSM+7aAc7eRTRjpqAZucPmoNOC4UUbknb/VNoTkEIkCPhqV8LfbsgM1webRM7S/z21eHEx9Fkwx8Z/C/+Xw==",
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.6.1.tgz",
+ "integrity": "sha512-w3tEnj9HYEC73wtjdpR089AqkUPskFRcdkxsiSFt3SoUc3OHpmu+leP94CXBm4mHfefmhsdfI0ZQu6qJ0wgtPg==",
"license": "MIT",
"dependencies": {
"state-local": "^1.0.6"
@@ -2627,25 +2790,25 @@
}
},
"node_modules/@mux/mux-player": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@mux/mux-player/-/mux-player-3.6.1.tgz",
- "integrity": "sha512-QidL9CSkRBwa49ItphuDXWtarAiskP8AG/+vj5u0LsCa+VqObQxPfxE9t5S9YO/SDYHXqDMviMpmSzotSROGUQ==",
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/@mux/mux-player/-/mux-player-3.8.0.tgz",
+ "integrity": "sha512-2KcJdW4BBX8JDcXpclFKaNBsqpebtaEfTzwm5lPP1Lf6y5OMILvf2tqVCOczurREVFyaEoVD71vL0I5Vvqb1dA==",
"license": "MIT",
"dependencies": {
- "@mux/mux-video": "0.27.0",
- "@mux/playback-core": "0.31.0",
- "media-chrome": "~4.14.0",
- "player.style": "^0.2.0"
+ "@mux/mux-video": "0.27.2",
+ "@mux/playback-core": "0.31.2",
+ "media-chrome": "~4.15.1",
+ "player.style": "^0.3.0"
}
},
"node_modules/@mux/mux-player-react": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@mux/mux-player-react/-/mux-player-react-3.6.1.tgz",
- "integrity": "sha512-YKIieu9GmFI73+1EcAvd63ftZ0Z9ilGbWo2dGXqQeyCEcagIN0oEcXWUPuIuxhvYB0XXsxB8RBAD8SigHkCYAQ==",
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/@mux/mux-player-react/-/mux-player-react-3.8.0.tgz",
+ "integrity": "sha512-c9TKtK9nsSpXOuC1LVLmmHA+Zlpcx4mzgGaA7ZlukrGMfoXWvA90ROSVAAjXRA+UKSHdLIbvNofgG3P6rEE/4Q==",
"license": "MIT",
"dependencies": {
- "@mux/mux-player": "3.6.1",
- "@mux/playback-core": "0.31.0",
+ "@mux/mux-player": "3.8.0",
+ "@mux/playback-core": "0.31.2",
"prop-types": "^15.8.1"
},
"peerDependencies": {
@@ -2663,32 +2826,32 @@
}
},
"node_modules/@mux/mux-video": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/@mux/mux-video/-/mux-video-0.27.0.tgz",
- "integrity": "sha512-Oi142YAcPKrmHTG+eaWHWaE7ucMHeJwx1FXABbLM2hMGj9MQ7kYjsD5J3meFlvuyz5UeVDsPLHeUJgeBXUZovg==",
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@mux/mux-video/-/mux-video-0.27.2.tgz",
+ "integrity": "sha512-VAqSw/3kS/qBzjyFSX3wClIX5Kdk6eXXlhxIJRWlClYvUKGm9ruhd7HzkwZVOJguvUh5QbGoiGWBEW2xkNIXzw==",
"license": "MIT",
"dependencies": {
"@mux/mux-data-google-ima": "0.2.8",
- "@mux/playback-core": "0.31.0",
- "castable-video": "~1.1.10",
+ "@mux/playback-core": "0.31.2",
+ "castable-video": "~1.1.11",
"custom-media-element": "~1.4.5",
"media-tracks": "~0.3.3"
}
},
"node_modules/@mux/playback-core": {
- "version": "0.31.0",
- "resolved": "https://registry.npmjs.org/@mux/playback-core/-/playback-core-0.31.0.tgz",
- "integrity": "sha512-VADcrtS4O6fQBH8qmgavS6h7v7amzy2oCguu1NnLaVZ3Z8WccNXcF0s7jPRoRDyXWGShgtVhypW2uXjLpkPxyw==",
+ "version": "0.31.2",
+ "resolved": "https://registry.npmjs.org/@mux/playback-core/-/playback-core-0.31.2.tgz",
+ "integrity": "sha512-bhOVTGAuKCQuDzNOc3XvDq7vsgqy2DAacLP0WdJciUKjfZhs3oA11NbKG7qAN6akPnZVfgn0Jn/sJN8TRjE30A==",
"license": "MIT",
"dependencies": {
- "hls.js": "~1.6.6",
+ "hls.js": "~1.6.13",
"mux-embed": "^5.8.3"
}
},
"node_modules/@napi-rs/canvas": {
- "version": "0.1.80",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.80.tgz",
- "integrity": "sha512-DxuT1ClnIPts1kQx8FBmkk4BQDTfI5kIzywAaMjQSXfNnra5UFU9PwurXrl+Je3bJ6BGsp/zmshVVFbCmyI+ww==",
+ "version": "0.1.81",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.81.tgz",
+ "integrity": "sha512-ReCjd5SYI/UKx/olaQLC4GtN6wUQGjlgHXs1lvUvWGXfBMR3Fxnik3cL+OxKN5ithNdoU0/GlCrdKcQDFh2XKQ==",
"license": "MIT",
"optional": true,
"workspaces": [
@@ -2698,22 +2861,22 @@
"node": ">= 10"
},
"optionalDependencies": {
- "@napi-rs/canvas-android-arm64": "0.1.80",
- "@napi-rs/canvas-darwin-arm64": "0.1.80",
- "@napi-rs/canvas-darwin-x64": "0.1.80",
- "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.80",
- "@napi-rs/canvas-linux-arm64-gnu": "0.1.80",
- "@napi-rs/canvas-linux-arm64-musl": "0.1.80",
- "@napi-rs/canvas-linux-riscv64-gnu": "0.1.80",
- "@napi-rs/canvas-linux-x64-gnu": "0.1.80",
- "@napi-rs/canvas-linux-x64-musl": "0.1.80",
- "@napi-rs/canvas-win32-x64-msvc": "0.1.80"
+ "@napi-rs/canvas-android-arm64": "0.1.81",
+ "@napi-rs/canvas-darwin-arm64": "0.1.81",
+ "@napi-rs/canvas-darwin-x64": "0.1.81",
+ "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.81",
+ "@napi-rs/canvas-linux-arm64-gnu": "0.1.81",
+ "@napi-rs/canvas-linux-arm64-musl": "0.1.81",
+ "@napi-rs/canvas-linux-riscv64-gnu": "0.1.81",
+ "@napi-rs/canvas-linux-x64-gnu": "0.1.81",
+ "@napi-rs/canvas-linux-x64-musl": "0.1.81",
+ "@napi-rs/canvas-win32-x64-msvc": "0.1.81"
}
},
"node_modules/@napi-rs/canvas-android-arm64": {
- "version": "0.1.80",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.80.tgz",
- "integrity": "sha512-sk7xhN/MoXeuExlggf91pNziBxLPVUqF2CAVnB57KLG/pz7+U5TKG8eXdc3pm0d7Od0WreB6ZKLj37sX9muGOQ==",
+ "version": "0.1.81",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.81.tgz",
+ "integrity": "sha512-78Lz+AUi+MsWupyZjXwpwQrp1QCwncPvRZrdvrROcZ9Gq9grP7LfQZiGdR8LKyHIq3OR18mDP+JESGT15V1nXw==",
"cpu": [
"arm64"
],
@@ -2727,9 +2890,9 @@
}
},
"node_modules/@napi-rs/canvas-darwin-arm64": {
- "version": "0.1.80",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.80.tgz",
- "integrity": "sha512-O64APRTXRUiAz0P8gErkfEr3lipLJgM6pjATwavZ22ebhjYl/SUbpgM0xcWPQBNMP1n29afAC/Us5PX1vg+JNQ==",
+ "version": "0.1.81",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.81.tgz",
+ "integrity": "sha512-omejuKgHWKDGoh8rsgsyhm/whwxMaryTQjJTd9zD7hiB9/rzcEEJLHnzXWR5ysy4/tTjHaQotE6k2t8eodTLnA==",
"cpu": [
"arm64"
],
@@ -2743,9 +2906,9 @@
}
},
"node_modules/@napi-rs/canvas-darwin-x64": {
- "version": "0.1.80",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.80.tgz",
- "integrity": "sha512-FqqSU7qFce0Cp3pwnTjVkKjjOtxMqRe6lmINxpIZYaZNnVI0H5FtsaraZJ36SiTHNjZlUB69/HhxNDT1Aaa9vA==",
+ "version": "0.1.81",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.81.tgz",
+ "integrity": "sha512-EYfk+co6BElq5DXNH9PBLYDYwc4QsvIVbyrsVHsxVpn4p6Y3/s8MChgC69AGqj3vzZBQ1qx2CRCMtg5cub+XuQ==",
"cpu": [
"x64"
],
@@ -2759,9 +2922,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
- "version": "0.1.80",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.80.tgz",
- "integrity": "sha512-eyWz0ddBDQc7/JbAtY4OtZ5SpK8tR4JsCYEZjCE3dI8pqoWUC8oMwYSBGCYfsx2w47cQgQCgMVRVTFiiO38hHQ==",
+ "version": "0.1.81",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.81.tgz",
+ "integrity": "sha512-teh6Q74CyAcH31yLNQGR9MtXSFxlZa5CI6vvNUISI14gWIJWrhOwUAOly+KRe1aztWR0FWTVSPxM4p5y+06aow==",
"cpu": [
"arm"
],
@@ -2775,9 +2938,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-arm64-gnu": {
- "version": "0.1.80",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.80.tgz",
- "integrity": "sha512-qwA63t8A86bnxhuA/GwOkK3jvb+XTQaTiVML0vAWoHyoZYTjNs7BzoOONDgTnNtr8/yHrq64XXzUoLqDzU+Uuw==",
+ "version": "0.1.81",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.81.tgz",
+ "integrity": "sha512-AGEopHFYRzJOjxY+2G1RmHPRnuWvO3Qdhq7sIazlSjxb3Z6dZHg7OB/4ZimXaimPjDACm9qWa6t5bn9bhXvkcw==",
"cpu": [
"arm64"
],
@@ -2791,9 +2954,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-arm64-musl": {
- "version": "0.1.80",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.80.tgz",
- "integrity": "sha512-1XbCOz/ymhj24lFaIXtWnwv/6eFHXDrjP0jYkc6iHQ9q8oXKzUX1Lc6bu+wuGiLhGh2GS/2JlfORC5ZcXimRcg==",
+ "version": "0.1.81",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.81.tgz",
+ "integrity": "sha512-Bj3m1cl4GIhsigkdwOxii4g4Ump3/QhNpx85IgAlCCYXpaly6mcsWpuDYEabfIGWOWhDUNBOndaQUPfWK1czOQ==",
"cpu": [
"arm64"
],
@@ -2807,9 +2970,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-riscv64-gnu": {
- "version": "0.1.80",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.80.tgz",
- "integrity": "sha512-XTzR125w5ZMs0lJcxRlS1K3P5RaZ9RmUsPtd1uGt+EfDyYMu4c6SEROYsxyatbbu/2+lPe7MPHOO/0a0x7L/gw==",
+ "version": "0.1.81",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.81.tgz",
+ "integrity": "sha512-yg/5NkHykVdwPlD3XObwCa/EswkOwLHswJcI9rHrac+znHsmCSj5AMX/RTU9Z9F6lZTwL60JM2Esit33XhAMiw==",
"cpu": [
"riscv64"
],
@@ -2823,9 +2986,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-x64-gnu": {
- "version": "0.1.80",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.80.tgz",
- "integrity": "sha512-BeXAmhKg1kX3UCrJsYbdQd3hIMDH/K6HnP/pG2LuITaXhXBiNdh//TVVVVCBbJzVQaV5gK/4ZOCMrQW9mvuTqA==",
+ "version": "0.1.81",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.81.tgz",
+ "integrity": "sha512-tPfMpSEBuV5dJSKexO/UZxpOqnYTaNbG8aKa1ek8QsWu+4SJ/foWkaxscra/RUv85vepx6WWDjzBNbNJsTnO0w==",
"cpu": [
"x64"
],
@@ -2839,9 +3002,9 @@
}
},
"node_modules/@napi-rs/canvas-linux-x64-musl": {
- "version": "0.1.80",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.80.tgz",
- "integrity": "sha512-x0XvZWdHbkgdgucJsRxprX/4o4sEed7qo9rCQA9ugiS9qE2QvP0RIiEugtZhfLH3cyI+jIRFJHV4Fuz+1BHHMg==",
+ "version": "0.1.81",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.81.tgz",
+ "integrity": "sha512-1L0xnYgzqn8Baef+inPvY4dKqdmw3KCBoe0NEDgezuBZN7MA5xElwifoG8609uNdrMtJ9J6QZarsslLRVqri7g==",
"cpu": [
"x64"
],
@@ -2855,9 +3018,9 @@
}
},
"node_modules/@napi-rs/canvas-win32-x64-msvc": {
- "version": "0.1.80",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.80.tgz",
- "integrity": "sha512-Z8jPsM6df5V8B1HrCHB05+bDiCxjE9QA//3YrkKIdVDEwn5RKaqOxCJDRJkl48cJbylcrJbW4HxZbTte8juuPg==",
+ "version": "0.1.81",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.81.tgz",
+ "integrity": "sha512-57ryVbhm/z7RE9/UVcS7mrLPdlayLesy+9U0Uf6epCoeSGrs99tfieCcgZWFbIgmByQ1AZnNtFI2N6huqDLlWQ==",
"cpu": [
"x64"
],
@@ -2922,19 +3085,6 @@
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
- "node_modules/@npmcli/fs/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@npmcli/move-file": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz",
@@ -3663,6 +3813,39 @@
}
}
},
+ "node_modules/@radix-ui/react-slider": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz",
+ "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/number": "1.1.1",
+ "@radix-ui/primitive": "1.1.3",
+ "@radix-ui/react-collection": "1.1.7",
+ "@radix-ui/react-compose-refs": "1.1.2",
+ "@radix-ui/react-context": "1.1.2",
+ "@radix-ui/react-direction": "1.1.1",
+ "@radix-ui/react-primitive": "2.1.3",
+ "@radix-ui/react-use-controllable-state": "1.2.2",
+ "@radix-ui/react-use-layout-effect": "1.1.1",
+ "@radix-ui/react-use-previous": "1.1.1",
+ "@radix-ui/react-use-size": "1.1.1"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@radix-ui/react-slot": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
@@ -3939,6 +4122,32 @@
"integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==",
"license": "MIT"
},
+ "node_modules/@reduxjs/toolkit": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.9.2.tgz",
+ "integrity": "sha512-ZAYu/NXkl/OhqTz7rfPaAhY0+e8Fr15jqNxte/2exKUxvHyQ/hcqmdekiN1f+Lcw3pE+34FCgX+26zcUE3duCg==",
+ "license": "MIT",
+ "dependencies": {
+ "@standard-schema/spec": "^1.0.0",
+ "@standard-schema/utils": "^0.3.0",
+ "immer": "^10.0.3",
+ "redux": "^5.0.1",
+ "redux-thunk": "^3.1.0",
+ "reselect": "^5.1.0"
+ },
+ "peerDependencies": {
+ "react": "^16.9.0 || ^17.0.0 || ^18 || ^19",
+ "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "react-redux": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@replit/codemirror-lang-nix": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@replit/codemirror-lang-nix/-/codemirror-lang-nix-6.0.1.tgz",
@@ -3993,9 +4202,9 @@
"license": "MIT"
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz",
- "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz",
+ "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==",
"cpu": [
"arm"
],
@@ -4006,9 +4215,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz",
- "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz",
+ "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==",
"cpu": [
"arm64"
],
@@ -4019,9 +4228,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz",
- "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz",
+ "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==",
"cpu": [
"arm64"
],
@@ -4032,9 +4241,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz",
- "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz",
+ "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==",
"cpu": [
"x64"
],
@@ -4045,9 +4254,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz",
- "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz",
+ "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==",
"cpu": [
"arm64"
],
@@ -4058,9 +4267,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz",
- "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz",
+ "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==",
"cpu": [
"x64"
],
@@ -4071,9 +4280,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz",
- "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz",
+ "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==",
"cpu": [
"arm"
],
@@ -4084,9 +4293,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz",
- "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz",
+ "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==",
"cpu": [
"arm"
],
@@ -4097,9 +4306,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz",
- "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz",
+ "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==",
"cpu": [
"arm64"
],
@@ -4110,9 +4319,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz",
- "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz",
+ "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==",
"cpu": [
"arm64"
],
@@ -4123,9 +4332,9 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz",
- "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz",
+ "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==",
"cpu": [
"loong64"
],
@@ -4136,9 +4345,9 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz",
- "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz",
+ "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==",
"cpu": [
"ppc64"
],
@@ -4149,9 +4358,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz",
- "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz",
+ "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==",
"cpu": [
"riscv64"
],
@@ -4162,9 +4371,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz",
- "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz",
+ "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==",
"cpu": [
"riscv64"
],
@@ -4175,9 +4384,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz",
- "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz",
+ "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==",
"cpu": [
"s390x"
],
@@ -4188,9 +4397,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz",
- "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz",
+ "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==",
"cpu": [
"x64"
],
@@ -4201,9 +4410,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz",
- "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz",
+ "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==",
"cpu": [
"x64"
],
@@ -4214,9 +4423,9 @@
]
},
"node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz",
- "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz",
+ "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==",
"cpu": [
"arm64"
],
@@ -4227,9 +4436,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz",
- "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz",
+ "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==",
"cpu": [
"arm64"
],
@@ -4240,9 +4449,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz",
- "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz",
+ "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==",
"cpu": [
"ia32"
],
@@ -4253,9 +4462,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz",
- "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz",
+ "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==",
"cpu": [
"x64"
],
@@ -4266,9 +4475,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz",
- "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz",
+ "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==",
"cpu": [
"x64"
],
@@ -4309,232 +4518,6 @@
"integrity": "sha512-9EuOoaNmz7JrfGwjsrD9SxF9otU5TNMnbLu1yU4BeLK0W5cDxVXXR58Z89q9u2AnHjIctscjMTYdlqQ1gojTuw==",
"license": "Apache-2.0"
},
- "node_modules/@swc/core": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.5.tgz",
- "integrity": "sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==",
- "dev": true,
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3",
- "@swc/types": "^0.1.24"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/swc"
- },
- "optionalDependencies": {
- "@swc/core-darwin-arm64": "1.13.5",
- "@swc/core-darwin-x64": "1.13.5",
- "@swc/core-linux-arm-gnueabihf": "1.13.5",
- "@swc/core-linux-arm64-gnu": "1.13.5",
- "@swc/core-linux-arm64-musl": "1.13.5",
- "@swc/core-linux-x64-gnu": "1.13.5",
- "@swc/core-linux-x64-musl": "1.13.5",
- "@swc/core-win32-arm64-msvc": "1.13.5",
- "@swc/core-win32-ia32-msvc": "1.13.5",
- "@swc/core-win32-x64-msvc": "1.13.5"
- },
- "peerDependencies": {
- "@swc/helpers": ">=0.5.17"
- },
- "peerDependenciesMeta": {
- "@swc/helpers": {
- "optional": true
- }
- }
- },
- "node_modules/@swc/core-darwin-arm64": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz",
- "integrity": "sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-darwin-x64": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz",
- "integrity": "sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz",
- "integrity": "sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz",
- "integrity": "sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz",
- "integrity": "sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz",
- "integrity": "sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-musl": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz",
- "integrity": "sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz",
- "integrity": "sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz",
- "integrity": "sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.13.5",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz",
- "integrity": "sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "Apache-2.0 AND MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/counter": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/@swc/types": {
- "version": "0.1.25",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz",
- "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@swc/counter": "^0.1.3"
- }
- },
"node_modules/@szmarczak/http-timer": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
@@ -4549,52 +4532,47 @@
}
},
"node_modules/@tailwindcss/node": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.14.tgz",
- "integrity": "sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.16.tgz",
+ "integrity": "sha512-BX5iaSsloNuvKNHRN3k2RcCuTEgASTo77mofW0vmeHkfrDWaoFAFvNHpEgtu0eqyypcyiBkDWzSMxJhp3AUVcw==",
"license": "MIT",
"dependencies": {
"@jridgewell/remapping": "^2.3.4",
"enhanced-resolve": "^5.18.3",
- "jiti": "^2.6.0",
- "lightningcss": "1.30.1",
+ "jiti": "^2.6.1",
+ "lightningcss": "1.30.2",
"magic-string": "^0.30.19",
"source-map-js": "^1.2.1",
- "tailwindcss": "4.1.14"
+ "tailwindcss": "4.1.16"
}
},
"node_modules/@tailwindcss/oxide": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.14.tgz",
- "integrity": "sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==",
- "hasInstallScript": true,
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.16.tgz",
+ "integrity": "sha512-2OSv52FRuhdlgyOQqgtQHuCgXnS8nFSYRp2tJ+4WZXKgTxqPy7SMSls8c3mPT5pkZ17SBToGM5LHEJBO7miEdg==",
"license": "MIT",
- "dependencies": {
- "detect-libc": "^2.0.4",
- "tar": "^7.5.1"
- },
"engines": {
"node": ">= 10"
},
"optionalDependencies": {
- "@tailwindcss/oxide-android-arm64": "4.1.14",
- "@tailwindcss/oxide-darwin-arm64": "4.1.14",
- "@tailwindcss/oxide-darwin-x64": "4.1.14",
- "@tailwindcss/oxide-freebsd-x64": "4.1.14",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.14",
- "@tailwindcss/oxide-linux-arm64-gnu": "4.1.14",
- "@tailwindcss/oxide-linux-arm64-musl": "4.1.14",
- "@tailwindcss/oxide-linux-x64-gnu": "4.1.14",
- "@tailwindcss/oxide-linux-x64-musl": "4.1.14",
- "@tailwindcss/oxide-wasm32-wasi": "4.1.14",
- "@tailwindcss/oxide-win32-arm64-msvc": "4.1.14",
- "@tailwindcss/oxide-win32-x64-msvc": "4.1.14"
+ "@tailwindcss/oxide-android-arm64": "4.1.16",
+ "@tailwindcss/oxide-darwin-arm64": "4.1.16",
+ "@tailwindcss/oxide-darwin-x64": "4.1.16",
+ "@tailwindcss/oxide-freebsd-x64": "4.1.16",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.16",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.1.16",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.1.16",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.1.16",
+ "@tailwindcss/oxide-linux-x64-musl": "4.1.16",
+ "@tailwindcss/oxide-wasm32-wasi": "4.1.16",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.1.16",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.1.16"
}
},
"node_modules/@tailwindcss/oxide-android-arm64": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.14.tgz",
- "integrity": "sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.16.tgz",
+ "integrity": "sha512-8+ctzkjHgwDJ5caq9IqRSgsP70xhdhJvm+oueS/yhD5ixLhqTw9fSL1OurzMUhBwE5zK26FXLCz2f/RtkISqHA==",
"cpu": [
"arm64"
],
@@ -4608,9 +4586,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-arm64": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.14.tgz",
- "integrity": "sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.16.tgz",
+ "integrity": "sha512-C3oZy5042v2FOALBZtY0JTDnGNdS6w7DxL/odvSny17ORUnaRKhyTse8xYi3yKGyfnTUOdavRCdmc8QqJYwFKA==",
"cpu": [
"arm64"
],
@@ -4624,9 +4602,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-x64": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.14.tgz",
- "integrity": "sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.16.tgz",
+ "integrity": "sha512-vjrl/1Ub9+JwU6BP0emgipGjowzYZMjbWCDqwA2Z4vCa+HBSpP4v6U2ddejcHsolsYxwL5r4bPNoamlV0xDdLg==",
"cpu": [
"x64"
],
@@ -4640,9 +4618,9 @@
}
},
"node_modules/@tailwindcss/oxide-freebsd-x64": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.14.tgz",
- "integrity": "sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.16.tgz",
+ "integrity": "sha512-TSMpPYpQLm+aR1wW5rKuUuEruc/oOX3C7H0BTnPDn7W/eMw8W+MRMpiypKMkXZfwH8wqPIRKppuZoedTtNj2tg==",
"cpu": [
"x64"
],
@@ -4656,9 +4634,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.14.tgz",
- "integrity": "sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.16.tgz",
+ "integrity": "sha512-p0GGfRg/w0sdsFKBjMYvvKIiKy/LNWLWgV/plR4lUgrsxFAoQBFrXkZ4C0w8IOXfslB9vHK/JGASWD2IefIpvw==",
"cpu": [
"arm"
],
@@ -4672,9 +4650,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.14.tgz",
- "integrity": "sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.16.tgz",
+ "integrity": "sha512-DoixyMmTNO19rwRPdqviTrG1rYzpxgyYJl8RgQvdAQUzxC1ToLRqtNJpU/ATURSKgIg6uerPw2feW0aS8SNr/w==",
"cpu": [
"arm64"
],
@@ -4688,9 +4666,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.14.tgz",
- "integrity": "sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.16.tgz",
+ "integrity": "sha512-H81UXMa9hJhWhaAUca6bU2wm5RRFpuHImrwXBUvPbYb+3jo32I9VIwpOX6hms0fPmA6f2pGVlybO6qU8pF4fzQ==",
"cpu": [
"arm64"
],
@@ -4704,9 +4682,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.14.tgz",
- "integrity": "sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.16.tgz",
+ "integrity": "sha512-ZGHQxDtFC2/ruo7t99Qo2TTIvOERULPl5l0K1g0oK6b5PGqjYMga+FcY1wIUnrUxY56h28FxybtDEla+ICOyew==",
"cpu": [
"x64"
],
@@ -4720,9 +4698,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.14.tgz",
- "integrity": "sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.16.tgz",
+ "integrity": "sha512-Oi1tAaa0rcKf1Og9MzKeINZzMLPbhxvm7rno5/zuP1WYmpiG0bEHq4AcRUiG2165/WUzvxkW4XDYCscZWbTLZw==",
"cpu": [
"x64"
],
@@ -4736,9 +4714,9 @@
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.14.tgz",
- "integrity": "sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.16.tgz",
+ "integrity": "sha512-B01u/b8LteGRwucIBmCQ07FVXLzImWESAIMcUU6nvFt/tYsQ6IHz8DmZ5KtvmwxD+iTYBtM1xwoGXswnlu9v0Q==",
"bundleDependencies": [
"@napi-rs/wasm-runtime",
"@emnapi/core",
@@ -4756,7 +4734,7 @@
"@emnapi/core": "^1.5.0",
"@emnapi/runtime": "^1.5.0",
"@emnapi/wasi-threads": "^1.1.0",
- "@napi-rs/wasm-runtime": "^1.0.5",
+ "@napi-rs/wasm-runtime": "^1.0.7",
"@tybys/wasm-util": "^0.10.1",
"tslib": "^2.4.0"
},
@@ -4765,9 +4743,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.14.tgz",
- "integrity": "sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.16.tgz",
+ "integrity": "sha512-zX+Q8sSkGj6HKRTMJXuPvOcP8XfYON24zJBRPlszcH1Np7xuHXhWn8qfFjIujVzvH3BHU+16jBXwgpl20i+v9A==",
"cpu": [
"arm64"
],
@@ -4781,9 +4759,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.14.tgz",
- "integrity": "sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.16.tgz",
+ "integrity": "sha512-m5dDFJUEejbFqP+UXVstd4W/wnxA4F61q8SoL+mqTypId2T2ZpuxosNSgowiCnLp2+Z+rivdU0AqpfgiD7yCBg==",
"cpu": [
"x64"
],
@@ -4797,14 +4775,14 @@
}
},
"node_modules/@tailwindcss/vite": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.14.tgz",
- "integrity": "sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.16.tgz",
+ "integrity": "sha512-bbguNBcDxsRmi9nnlWJxhfDWamY3lmcyACHcdO1crxfzuLpOhHLLtEIN/nCbbAtj5rchUgQD17QVAKi1f7IsKg==",
"license": "MIT",
"dependencies": {
- "@tailwindcss/node": "4.1.14",
- "@tailwindcss/oxide": "4.1.14",
- "tailwindcss": "4.1.14"
+ "@tailwindcss/node": "4.1.16",
+ "@tailwindcss/oxide": "4.1.16",
+ "tailwindcss": "4.1.16"
},
"peerDependencies": {
"vite": "^5.2.0 || ^6 || ^7"
@@ -4820,6 +4798,51 @@
"node": ">= 10"
}
},
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.2"
+ }
+ },
"node_modules/@types/bcryptjs": {
"version": "2.4.6",
"resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.6.tgz",
@@ -4832,6 +4855,7 @@
"integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/node": "*"
}
@@ -4868,10 +4892,20 @@
"@types/node": "*"
}
},
+ "node_modules/@types/conventional-commits-parser": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.2.tgz",
+ "integrity": "sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/cookie-parser": {
- "version": "1.4.9",
- "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.9.tgz",
- "integrity": "sha512-tGZiZ2Gtc4m3wIdLkZ8mkj1T6CEHb35+VApbL2T14Dew8HA7c+04dmKqsKRNC+8RJPm16JEK0tFSwdZqubfc4g==",
+ "version": "1.4.10",
+ "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.10.tgz",
+ "integrity": "sha512-B4xqkqfZ8Wek+rCOeRxsjMS9OgvzebEzzLYw7NHYuvzb7IdxOkI0ZHGgeEBX4PUM7QGVvNSK60T3OvWj3YfBRg==",
"license": "MIT",
"peerDependencies": {
"@types/express": "*"
@@ -4887,6 +4921,69 @@
"@types/node": "*"
}
},
+ "node_modules/@types/d3-array": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
+ "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-color": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-ease": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-interpolate": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+ "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-color": "*"
+ }
+ },
+ "node_modules/@types/d3-path": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
+ "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-scale": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
+ "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-time": "*"
+ }
+ },
+ "node_modules/@types/d3-shape": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz",
+ "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/d3-path": "*"
+ }
+ },
+ "node_modules/@types/d3-time": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
+ "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
+ "license": "MIT"
+ },
+ "node_modules/@types/d3-timer": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
+ "license": "MIT"
+ },
"node_modules/@types/debug": {
"version": "4.1.12",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
@@ -4912,20 +5009,21 @@
}
},
"node_modules/@types/express": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz",
- "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.5.tgz",
+ "integrity": "sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^5.0.0",
- "@types/serve-static": "*"
+ "@types/serve-static": "^1"
}
},
"node_modules/@types/express-serve-static-core": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz",
- "integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz",
+ "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==",
"license": "MIT",
"dependencies": {
"@types/node": "*",
@@ -5034,12 +5132,13 @@
}
},
"node_modules/@types/node": {
- "version": "24.6.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.6.1.tgz",
- "integrity": "sha512-ljvjjs3DNXummeIaooB4cLBKg2U6SPI6Hjra/9rRIy7CpM0HpLtG9HptkMKAb4HYWy5S7HUvJEuWgr/y0U8SHw==",
+ "version": "24.9.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz",
+ "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
- "undici-types": "~7.13.0"
+ "undici-types": "~7.16.0"
}
},
"node_modules/@types/plist": {
@@ -5055,9 +5154,9 @@
}
},
"node_modules/@types/qrcode": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.5.tgz",
- "integrity": "sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==",
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.6.tgz",
+ "integrity": "sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
@@ -5076,22 +5175,24 @@
"license": "MIT"
},
"node_modules/@types/react": {
- "version": "19.1.17",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.17.tgz",
- "integrity": "sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==",
+ "version": "19.2.2",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz",
+ "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"csstype": "^3.0.2"
}
},
"node_modules/@types/react-dom": {
- "version": "19.1.11",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.11.tgz",
- "integrity": "sha512-3BKc/yGdNTYQVVw4idqHtSOcFsgGuBbMveKCOgF8wQ5QtrYOc3jDIlzg3jef04zcXFIHLelyGlj0T+BJ8+KN+w==",
+ "version": "19.2.2",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz",
+ "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"peerDependencies": {
- "@types/react": "^19.0.0"
+ "@types/react": "^19.2.0"
}
},
"node_modules/@types/responselike": {
@@ -5105,24 +5206,33 @@
}
},
"node_modules/@types/send": {
- "version": "0.17.5",
- "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz",
- "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz",
+ "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==",
"license": "MIT",
"dependencies": {
- "@types/mime": "^1",
"@types/node": "*"
}
},
"node_modules/@types/serve-static": {
- "version": "1.15.8",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz",
- "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==",
+ "version": "1.15.10",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz",
+ "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==",
"license": "MIT",
"dependencies": {
"@types/http-errors": "*",
"@types/node": "*",
- "@types/send": "*"
+ "@types/send": "<1"
+ }
+ },
+ "node_modules/@types/serve-static/node_modules/@types/send": {
+ "version": "0.17.6",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz",
+ "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mime": "^1",
+ "@types/node": "*"
}
},
"node_modules/@types/speakeasy": {
@@ -5145,9 +5255,9 @@
}
},
"node_modules/@types/ssh2/node_modules/@types/node": {
- "version": "18.19.129",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.129.tgz",
- "integrity": "sha512-hrmi5jWt2w60ayox3iIXwpMEnfUvOLJCRtrOPbHtH15nTjvO7uhnelvrdAs0dO0/zl5DZ3ZbahiaXEVb54ca/A==",
+ "version": "18.19.130",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz",
+ "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5161,19 +5271,18 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/trusted-types": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-1.0.6.tgz",
- "integrity": "sha512-230RC8sFeHoT6sSUlRO6a8cAnclO06eeiq1QDfiv2FGCLWFvvERWgwIQD4FWqD9A69BN7Lzee4OXwoMVnnsWDw==",
- "license": "MIT",
- "peer": true
- },
"node_modules/@types/unist": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
"integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
"license": "MIT"
},
+ "node_modules/@types/use-sync-external-store": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
+ "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
+ "license": "MIT"
+ },
"node_modules/@types/verror": {
"version": "1.10.11",
"resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz",
@@ -5204,17 +5313,17 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz",
- "integrity": "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==",
+ "version": "8.46.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz",
+ "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
- "@typescript-eslint/scope-manager": "8.45.0",
- "@typescript-eslint/type-utils": "8.45.0",
- "@typescript-eslint/utils": "8.45.0",
- "@typescript-eslint/visitor-keys": "8.45.0",
+ "@typescript-eslint/scope-manager": "8.46.2",
+ "@typescript-eslint/type-utils": "8.46.2",
+ "@typescript-eslint/utils": "8.46.2",
+ "@typescript-eslint/visitor-keys": "8.46.2",
"graphemer": "^1.4.0",
"ignore": "^7.0.0",
"natural-compare": "^1.4.0",
@@ -5228,7 +5337,7 @@
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^8.45.0",
+ "@typescript-eslint/parser": "^8.46.2",
"eslint": "^8.57.0 || ^9.0.0",
"typescript": ">=4.8.4 <6.0.0"
}
@@ -5244,16 +5353,17 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.45.0.tgz",
- "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==",
+ "version": "8.46.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz",
+ "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "8.45.0",
- "@typescript-eslint/types": "8.45.0",
- "@typescript-eslint/typescript-estree": "8.45.0",
- "@typescript-eslint/visitor-keys": "8.45.0",
+ "@typescript-eslint/scope-manager": "8.46.2",
+ "@typescript-eslint/types": "8.46.2",
+ "@typescript-eslint/typescript-estree": "8.46.2",
+ "@typescript-eslint/visitor-keys": "8.46.2",
"debug": "^4.3.4"
},
"engines": {
@@ -5268,40 +5378,15 @@
"typescript": ">=4.8.4 <6.0.0"
}
},
- "node_modules/@typescript-eslint/parser/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@typescript-eslint/project-service": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.45.0.tgz",
- "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==",
+ "version": "8.46.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz",
+ "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.45.0",
- "@typescript-eslint/types": "^8.45.0",
+ "@typescript-eslint/tsconfig-utils": "^8.46.2",
+ "@typescript-eslint/types": "^8.46.2",
"debug": "^4.3.4"
},
"engines": {
@@ -5315,40 +5400,15 @@
"typescript": ">=4.8.4 <6.0.0"
}
},
- "node_modules/@typescript-eslint/project-service/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/project-service/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@typescript-eslint/scope-manager": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz",
- "integrity": "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==",
+ "version": "8.46.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz",
+ "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.45.0",
- "@typescript-eslint/visitor-keys": "8.45.0"
+ "@typescript-eslint/types": "8.46.2",
+ "@typescript-eslint/visitor-keys": "8.46.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5359,9 +5419,9 @@
}
},
"node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz",
- "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==",
+ "version": "8.46.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz",
+ "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5376,15 +5436,15 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz",
- "integrity": "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==",
+ "version": "8.46.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz",
+ "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.45.0",
- "@typescript-eslint/typescript-estree": "8.45.0",
- "@typescript-eslint/utils": "8.45.0",
+ "@typescript-eslint/types": "8.46.2",
+ "@typescript-eslint/typescript-estree": "8.46.2",
+ "@typescript-eslint/utils": "8.46.2",
"debug": "^4.3.4",
"ts-api-utils": "^2.1.0"
},
@@ -5400,35 +5460,10 @@
"typescript": ">=4.8.4 <6.0.0"
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@typescript-eslint/types": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.45.0.tgz",
- "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==",
+ "version": "8.46.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz",
+ "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5440,16 +5475,16 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz",
- "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==",
+ "version": "8.46.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz",
+ "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/project-service": "8.45.0",
- "@typescript-eslint/tsconfig-utils": "8.45.0",
- "@typescript-eslint/types": "8.45.0",
- "@typescript-eslint/visitor-keys": "8.45.0",
+ "@typescript-eslint/project-service": "8.46.2",
+ "@typescript-eslint/tsconfig-utils": "8.46.2",
+ "@typescript-eslint/types": "8.46.2",
+ "@typescript-eslint/visitor-keys": "8.46.2",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@@ -5478,24 +5513,6 @@
"balanced-match": "^1.0.0"
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -5512,37 +5529,17 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@typescript-eslint/utils": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.45.0.tgz",
- "integrity": "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==",
+ "version": "8.46.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz",
+ "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.7.0",
- "@typescript-eslint/scope-manager": "8.45.0",
- "@typescript-eslint/types": "8.45.0",
- "@typescript-eslint/typescript-estree": "8.45.0"
+ "@typescript-eslint/scope-manager": "8.46.2",
+ "@typescript-eslint/types": "8.46.2",
+ "@typescript-eslint/typescript-estree": "8.46.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5557,13 +5554,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz",
- "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==",
+ "version": "8.46.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz",
+ "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "8.45.0",
+ "@typescript-eslint/types": "8.46.2",
"eslint-visitor-keys": "^4.2.1"
},
"engines": {
@@ -5664,18 +5661,25 @@
"weakmap-polyfill": "2.0.4"
}
},
- "node_modules/@vitejs/plugin-react-swc": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz",
- "integrity": "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==",
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz",
+ "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "@babel/core": "^7.28.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
"@rolldown/pluginutils": "1.0.0-beta.27",
- "@swc/core": "^1.12.11"
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.17.0"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
},
"peerDependencies": {
- "vite": "^4 || ^5 || ^6 || ^7"
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
}
},
"node_modules/@xmldom/xmldom": {
@@ -5731,7 +5735,8 @@
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.5.0.tgz",
"integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/7zip-bin": {
"version": "5.2.0",
@@ -5766,6 +5771,7 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -5821,39 +5827,49 @@
}
},
"node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "node_modules/ansi-escapes": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz",
+ "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==",
"dev": true,
"license": "MIT",
- "peerDependencies": {
- "ajv": "^6.9.1"
+ "dependencies": {
+ "environment": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/ansi-styles": {
@@ -5927,24 +5943,6 @@
"electron-builder-squirrel-windows": "26.0.12"
}
},
- "node_modules/app-builder-lib/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/app-builder-lib/node_modules/dotenv": {
"version": "16.6.1",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
@@ -5973,77 +5971,6 @@
"node": ">=12"
}
},
- "node_modules/app-builder-lib/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/app-builder-lib/node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/app-builder-lib/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/app-builder-lib/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/app-builder-lib/node_modules/tar": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
- "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^5.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/app-builder-lib/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/append-field": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
@@ -6069,6 +5996,13 @@
"node": ">=10"
}
},
+ "node_modules/array-ify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+ "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/asn1": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
@@ -6134,9 +6068,9 @@
}
},
"node_modules/axios": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz",
- "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==",
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.1.tgz",
+ "integrity": "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@@ -6187,6 +6121,16 @@
],
"license": "MIT"
},
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.8.22",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.22.tgz",
+ "integrity": "sha512-/tk9kky/d8T8CTXIQYASLyhAxR5VwL3zct1oAoVTaOUHwrmsGnfbRwNdEq+vOl2BN8i3PcDdP0o4Q+jjKQoFbQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
"node_modules/bcp-47": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz",
@@ -6250,6 +6194,7 @@
"integrity": "sha512-3yVdyZhklTiNrtg+4WqHpJpFDd+WHTg2oM7UcR80GqL05AOV0xEJzc6qNvFYoEtE+hRp1n9MpN6/+4yhlGkDXQ==",
"hasInstallScript": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"bindings": "^1.5.0",
"prebuild-install": "^7.1.1"
@@ -6316,6 +6261,21 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
+ "node_modules/body-parser/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/body-parser/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
+ },
"node_modules/boolean": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz",
@@ -6349,6 +6309,41 @@
"node": ">=8"
}
},
+ "node_modules/browserslist": {
+ "version": "4.27.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz",
+ "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "baseline-browser-mapping": "^2.8.19",
+ "caniuse-lite": "^1.0.30001751",
+ "electron-to-chromium": "^1.5.238",
+ "node-releases": "^2.0.26",
+ "update-browserslist-db": "^1.1.4"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
"node_modules/buffer": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
@@ -6444,49 +6439,6 @@
"node": ">=12.0.0"
}
},
- "node_modules/builder-util-runtime/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/builder-util-runtime/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/builder-util/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/builder-util/node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -6502,36 +6454,6 @@
"node": ">=12"
}
},
- "node_modules/builder-util/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/builder-util/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/builder-util/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/busboy": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
@@ -6636,34 +6558,6 @@
"node": ">=10"
}
},
- "node_modules/cacache/node_modules/tar": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
- "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^5.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/cacache/node_modules/tar/node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/cacheable-lookup": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
@@ -6741,6 +6635,27 @@
"node": ">=6"
}
},
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001752",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001752.tgz",
+ "integrity": "sha512-vKUk7beoukxE47P5gcVNKkDRzXdVofotshHwfR9vmpeFKxmI5PBpgOMC18LUJUA/DvJ70Y7RveasIBraqsyO/g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
"node_modules/castable-video": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/castable-video/-/castable-video-1.1.11.tgz",
@@ -6881,16 +6796,19 @@
}
},
"node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
+ "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "restore-cursor": "^3.1.0"
+ "restore-cursor": "^5.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/cli-spinners": {
@@ -6939,6 +6857,47 @@
"node": ">=12"
}
},
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"node_modules/clone": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
@@ -7027,6 +6986,13 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"license": "MIT"
},
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -7059,6 +7025,17 @@
"node": ">= 6"
}
},
+ "node_modules/compare-func": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz",
+ "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-ify": "^1.0.0",
+ "dot-prop": "^5.1.0"
+ }
+ },
"node_modules/compare-version": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
@@ -7235,6 +7212,58 @@
"node": ">= 0.6"
}
},
+ "node_modules/conventional-changelog-angular": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz",
+ "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "compare-func": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/conventional-changelog-conventionalcommits": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz",
+ "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "compare-func": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/conventional-commits-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz",
+ "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-text-path": "^2.0.0",
+ "JSONStream": "^1.3.5",
+ "meow": "^12.0.1",
+ "split2": "^4.0.0"
+ },
+ "bin": {
+ "conventional-commits-parser": "cli.mjs"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/cookie": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
@@ -7282,6 +7311,52 @@
"node": ">= 0.10"
}
},
+ "node_modules/cosmiconfig": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "env-paths": "^2.2.1",
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cosmiconfig-typescript-loader": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.2.0.tgz",
+ "integrity": "sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jiti": "^2.6.1"
+ },
+ "engines": {
+ "node": ">=v18"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "cosmiconfig": ">=9",
+ "typescript": ">=5"
+ }
+ },
"node_modules/cpu-features": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz",
@@ -7319,8 +7394,7 @@
"integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==",
"dev": true,
"license": "MIT",
- "optional": true,
- "peer": true
+ "optional": true
},
"node_modules/cross-spawn": {
"version": "7.0.6",
@@ -7349,6 +7423,140 @@
"integrity": "sha512-cjrsQufETwxjvwZbYbKBCJNvmQ2++G9AvT45zDi7NXL9k2PdVcs2h0jQz96J6G4TMKRCcEsoJ+QTgQD00Igtjw==",
"license": "MIT"
},
+ "node_modules/d3-array": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "license": "ISC",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-ease": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+ "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-format": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-interpolate": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-path": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-time-format": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+ "license": "ISC",
+ "dependencies": {
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-timer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+ "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/dargs": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz",
+ "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/dash-video-element": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/dash-video-element/-/dash-video-element-0.2.0.tgz",
@@ -7388,12 +7596,20 @@
}
},
"node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"license": "MIT",
"dependencies": {
- "ms": "2.0.0"
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
"node_modules/decamelize": {
@@ -7405,6 +7621,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/decimal.js-light": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
+ "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==",
+ "license": "MIT"
+ },
"node_modules/decode-named-character-reference": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz",
@@ -7560,9 +7782,9 @@
}
},
"node_modules/detect-libc": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz",
- "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
"license": "Apache-2.0",
"engines": {
"node": ">=8"
@@ -7631,6 +7853,7 @@
"integrity": "sha512-59CAAjAhTaIMCN8y9kD573vDkxbs1uhDcrFLHSgutYdPcGOU35Rf95725snvzEOy4BFB7+eLJ8djCNPmGwG67w==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"app-builder-lib": "26.0.12",
"builder-util": "26.0.11",
@@ -7671,29 +7894,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/dmg-builder/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/dmg-builder/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/dmg-license": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz",
@@ -7721,6 +7921,51 @@
"node": ">=8"
}
},
+ "node_modules/dmg-license/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/dmg-license/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/dompurify": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz",
+ "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==",
+ "license": "(MPL-2.0 OR Apache-2.0)"
+ },
+ "node_modules/dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-obj": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/dotenv": {
"version": "17.2.3",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
@@ -7763,9 +8008,9 @@
}
},
"node_modules/drizzle-orm": {
- "version": "0.44.5",
- "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.44.5.tgz",
- "integrity": "sha512-jBe37K7d8ZSKptdKfakQFdeljtu3P2Cbo7tJoJSVZADzIKOBo9IAJPOmMsH2bZl90bZgh8FQlD8BjxXA/zuBkQ==",
+ "version": "0.44.7",
+ "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.44.7.tgz",
+ "integrity": "sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ==",
"license": "Apache-2.0",
"peerDependencies": {
"@aws-sdk/client-rds-data": ">=3",
@@ -7940,9 +8185,9 @@
}
},
"node_modules/electron": {
- "version": "38.2.0",
- "resolved": "https://registry.npmjs.org/electron/-/electron-38.2.0.tgz",
- "integrity": "sha512-Cw5Mb+N5NxsG0Hc1qr8I65Kt5APRrbgTtEEn3zTod30UNJRnAE1xbGk/1NOaDn3ODzI/MYn6BzT9T9zreP7xWA==",
+ "version": "38.5.0",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-38.5.0.tgz",
+ "integrity": "sha512-dbC7V+eZweerYMJfxQldzHOg37a1VdNMCKxrJxlkp3cA30gOXtXSg4ZYs07L5+QwI19WOy1uyvtEUgbw1RRsCQ==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
@@ -8012,29 +8257,6 @@
"node": ">=12"
}
},
- "node_modules/electron-builder/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/electron-builder/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/electron-publish": {
"version": "26.0.11",
"resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.0.11.tgz",
@@ -8067,28 +8289,12 @@
"node": ">=12"
}
},
- "node_modules/electron-publish/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.244",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz",
+ "integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/electron-publish/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
+ "license": "ISC"
},
"node_modules/electron-winstaller": {
"version": "5.4.0",
@@ -8097,7 +8303,6 @@
"dev": true,
"hasInstallScript": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@electron/asar": "^3.2.1",
"debug": "^4.1.1",
@@ -8112,32 +8317,12 @@
"@electron/windows-sign": "^1.1.2"
}
},
- "node_modules/electron-winstaller/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/electron-winstaller/node_modules/fs-extra": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
"integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
@@ -8147,18 +8332,30 @@
"node": ">=6 <7 || >=8"
}
},
- "node_modules/electron-winstaller/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "node_modules/electron-winstaller/node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
"dev": true,
"license": "MIT",
- "peer": true
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/electron-winstaller/node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
},
"node_modules/electron/node_modules/@types/node": {
- "version": "22.18.8",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.8.tgz",
- "integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==",
+ "version": "22.18.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.13.tgz",
+ "integrity": "sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8244,6 +8441,19 @@
"node": ">=6"
}
},
+ "node_modules/environment": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
+ "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/err-code": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
@@ -8251,6 +8461,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/error-ex": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
+ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
"node_modules/es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
@@ -8296,6 +8516,16 @@
"node": ">= 0.4"
}
},
+ "node_modules/es-toolkit": {
+ "version": "1.41.0",
+ "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.41.0.tgz",
+ "integrity": "sha512-bDd3oRmbVgqZCJS6WmeQieOrzpl3URcWBUVDXxOELlUW2FuW+0glPOz1n0KnRie+PdyvUZcXz2sOn00c6pPRIA==",
+ "license": "MIT",
+ "workspaces": [
+ "docs",
+ "benchmarks"
+ ]
+ },
"node_modules/es6-error": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
@@ -8305,9 +8535,9 @@
"optional": true
},
"node_modules/esbuild": {
- "version": "0.25.10",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz",
- "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==",
+ "version": "0.25.11",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz",
+ "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -8317,32 +8547,32 @@
"node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.10",
- "@esbuild/android-arm": "0.25.10",
- "@esbuild/android-arm64": "0.25.10",
- "@esbuild/android-x64": "0.25.10",
- "@esbuild/darwin-arm64": "0.25.10",
- "@esbuild/darwin-x64": "0.25.10",
- "@esbuild/freebsd-arm64": "0.25.10",
- "@esbuild/freebsd-x64": "0.25.10",
- "@esbuild/linux-arm": "0.25.10",
- "@esbuild/linux-arm64": "0.25.10",
- "@esbuild/linux-ia32": "0.25.10",
- "@esbuild/linux-loong64": "0.25.10",
- "@esbuild/linux-mips64el": "0.25.10",
- "@esbuild/linux-ppc64": "0.25.10",
- "@esbuild/linux-riscv64": "0.25.10",
- "@esbuild/linux-s390x": "0.25.10",
- "@esbuild/linux-x64": "0.25.10",
- "@esbuild/netbsd-arm64": "0.25.10",
- "@esbuild/netbsd-x64": "0.25.10",
- "@esbuild/openbsd-arm64": "0.25.10",
- "@esbuild/openbsd-x64": "0.25.10",
- "@esbuild/openharmony-arm64": "0.25.10",
- "@esbuild/sunos-x64": "0.25.10",
- "@esbuild/win32-arm64": "0.25.10",
- "@esbuild/win32-ia32": "0.25.10",
- "@esbuild/win32-x64": "0.25.10"
+ "@esbuild/aix-ppc64": "0.25.11",
+ "@esbuild/android-arm": "0.25.11",
+ "@esbuild/android-arm64": "0.25.11",
+ "@esbuild/android-x64": "0.25.11",
+ "@esbuild/darwin-arm64": "0.25.11",
+ "@esbuild/darwin-x64": "0.25.11",
+ "@esbuild/freebsd-arm64": "0.25.11",
+ "@esbuild/freebsd-x64": "0.25.11",
+ "@esbuild/linux-arm": "0.25.11",
+ "@esbuild/linux-arm64": "0.25.11",
+ "@esbuild/linux-ia32": "0.25.11",
+ "@esbuild/linux-loong64": "0.25.11",
+ "@esbuild/linux-mips64el": "0.25.11",
+ "@esbuild/linux-ppc64": "0.25.11",
+ "@esbuild/linux-riscv64": "0.25.11",
+ "@esbuild/linux-s390x": "0.25.11",
+ "@esbuild/linux-x64": "0.25.11",
+ "@esbuild/netbsd-arm64": "0.25.11",
+ "@esbuild/netbsd-x64": "0.25.11",
+ "@esbuild/openbsd-arm64": "0.25.11",
+ "@esbuild/openbsd-x64": "0.25.11",
+ "@esbuild/openharmony-arm64": "0.25.11",
+ "@esbuild/sunos-x64": "0.25.11",
+ "@esbuild/win32-arm64": "0.25.11",
+ "@esbuild/win32-ia32": "0.25.11",
+ "@esbuild/win32-x64": "0.25.11"
}
},
"node_modules/escalade": {
@@ -8375,25 +8605,25 @@
}
},
"node_modules/eslint": {
- "version": "9.36.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz",
- "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==",
+ "version": "9.39.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.0.tgz",
+ "integrity": "sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.21.0",
- "@eslint/config-helpers": "^0.3.1",
- "@eslint/core": "^0.15.2",
+ "@eslint/config-array": "^0.21.1",
+ "@eslint/config-helpers": "^0.4.2",
+ "@eslint/core": "^0.17.0",
"@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.36.0",
- "@eslint/plugin-kit": "^0.3.5",
+ "@eslint/js": "9.39.0",
+ "@eslint/plugin-kit": "^0.4.1",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.4.2",
"@types/estree": "^1.0.6",
- "@types/json-schema": "^7.0.15",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.6",
@@ -8449,9 +8679,9 @@
}
},
"node_modules/eslint-plugin-react-refresh": {
- "version": "0.4.22",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.22.tgz",
- "integrity": "sha512-atkAG6QaJMGoTLc4MDAP+rqZcfwQuTIh2IqHWFLy2TEjxr0MOK+5BSG4RzL2564AAPpZkDRsZXAUz68kjnU6Ug==",
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.24.tgz",
+ "integrity": "sha512-nLHIW7TEq3aLrEYWpVaJ1dRgFR+wLDPN8e8FpYAql/bMV2oBEfC37K0gLEGgv9fy66juNShSMV8OkTqzltcG/w==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -8488,22 +8718,61 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "node_modules/eslint/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ms": "^2.1.3"
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/eslint/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">=6.0"
+ "node": ">=10"
},
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/eslint/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint/node_modules/minimatch": {
@@ -8519,12 +8788,31 @@
"node": "*"
}
},
- "node_modules/eslint/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "node_modules/eslint/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/espree": {
"version": "10.4.0",
@@ -8609,6 +8897,12 @@
"node": ">= 0.6"
}
},
+ "node_modules/eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
+ "license": "MIT"
+ },
"node_modules/expand-template": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
@@ -8619,9 +8913,9 @@
}
},
"node_modules/exponential-backoff": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz",
- "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz",
+ "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==",
"dev": true,
"license": "Apache-2.0"
},
@@ -8696,23 +8990,6 @@
"node": ">=6.6.0"
}
},
- "node_modules/express/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/express/node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
@@ -8734,12 +9011,6 @@
"node": ">= 0.8"
}
},
- "node_modules/express/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
"node_modules/express/node_modules/qs": {
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
@@ -8827,31 +9098,6 @@
"@types/yauzl": "^2.9.1"
}
},
- "node_modules/extract-zip/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/extract-zip/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/extsprintf": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz",
@@ -8913,6 +9159,23 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/fast-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
"node_modules/fastq": {
"version": "1.19.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
@@ -9051,41 +9314,19 @@
"node": ">= 0.8"
}
},
- "node_modules/finalhandler/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/finalhandler/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
"node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
+ "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
+ "locate-path": "^7.2.0",
+ "path-exists": "^5.0.0",
+ "unicorn-magic": "^0.1.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -9149,19 +9390,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/foreground-child/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/form-data": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
@@ -9244,18 +9472,19 @@
"license": "MIT"
},
"node_modules/fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
},
"engines": {
- "node": ">=6 <7 || >=8"
+ "node": ">=10"
}
},
"node_modules/fs-minipass": {
@@ -9301,6 +9530,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -9310,6 +9549,19 @@
"node": "6.* || 8.* || >= 10.*"
}
},
+ "node_modules/get-east-asian-width": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz",
+ "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/get-intrinsic": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
@@ -9372,6 +9624,24 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/git-raw-commits": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz",
+ "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dargs": "^8.0.0",
+ "meow": "^12.0.1",
+ "split2": "^4.0.0"
+ },
+ "bin": {
+ "git-raw-commits": "cli.mjs"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
"node_modules/github-from-package": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
@@ -9445,18 +9715,20 @@
"node": ">=10.0"
}
},
- "node_modules/global-agent/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "node_modules/global-directory": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz",
+ "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==",
"dev": true,
- "license": "ISC",
- "optional": true,
- "bin": {
- "semver": "bin/semver.js"
+ "license": "MIT",
+ "dependencies": {
+ "ini": "4.1.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/globals": {
@@ -9745,9 +10017,9 @@
}
},
"node_modules/hls.js": {
- "version": "1.6.13",
- "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.13.tgz",
- "integrity": "sha512-hNEzjZNHf5bFrUNvdS4/1RjIanuJ6szpWNfTaX5I6WfGynWXGT7K/YQLYtemSvFExzeMdgdE4SsyVLJbd5PcZA==",
+ "version": "1.6.14",
+ "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.14.tgz",
+ "integrity": "sha512-CSpT2aXsv71HST8C5ETeVo+6YybqCpHBiYrCRQSn3U5QUZuLTSsvtq/bj+zuvjLVADeKxoebzo16OkH8m1+65Q==",
"license": "Apache-2.0"
},
"node_modules/hosted-git-info": {
@@ -9763,6 +10035,26 @@
"node": ">=10"
}
},
+ "node_modules/hosted-git-info/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hosted-git-info/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/html-entities": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz",
@@ -9844,31 +10136,6 @@
"node": ">= 14"
}
},
- "node_modules/http-proxy-agent/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/http-proxy-agent/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/http2-wrapper": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
@@ -9897,31 +10164,6 @@
"node": ">= 14"
}
},
- "node_modules/https-proxy-agent/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/https-proxy-agent/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/humanize-ms": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
@@ -9932,10 +10174,26 @@
"ms": "^2.0.0"
}
},
+ "node_modules/husky": {
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz",
+ "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "husky": "bin.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/typicode"
+ }
+ },
"node_modules/i18next": {
- "version": "25.5.3",
- "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.5.3.tgz",
- "integrity": "sha512-joFqorDeQ6YpIXni944upwnuHBf5IoPMuqAchGVeQLdWC2JOjxgM9V8UGLhNIIH/Q8QleRxIi0BSRQehSrDLcg==",
+ "version": "25.6.0",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.6.0.tgz",
+ "integrity": "sha512-tTn8fLrwBYtnclpL5aPXK/tAYBLWVvoHM1zdfXoRNLcI+RvtMsoZRV98ePlaW3khHYKuNh/Q65W/+NVFUeIwVw==",
"funding": [
{
"type": "individual",
@@ -9951,6 +10209,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/runtime": "^7.27.6"
},
@@ -10038,6 +10297,16 @@
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
"license": "MIT"
},
+ "node_modules/immer": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz",
+ "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/immer"
+ }
+ },
"node_modules/import-fresh": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
@@ -10055,6 +10324,27 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/import-fresh/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/import-meta-resolve": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz",
+ "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/imsc": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/imsc/-/imsc-1.1.5.tgz",
@@ -10116,10 +10406,14 @@
"license": "ISC"
},
"node_modules/ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "license": "ISC"
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz",
+ "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
},
"node_modules/inline-style-parser": {
"version": "0.2.4",
@@ -10127,6 +10421,15 @@
"integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==",
"license": "MIT"
},
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/ip-address": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz",
@@ -10170,6 +10473,13 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/is-ci": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
@@ -10262,6 +10572,16 @@
"node": ">=0.12.0"
}
},
+ "node_modules/is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-plain-obj": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
@@ -10280,6 +10600,19 @@
"integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
"license": "MIT"
},
+ "node_modules/is-text-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz",
+ "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "text-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-unicode-supported": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
@@ -10414,6 +10747,19 @@
"js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
@@ -10421,10 +10767,17 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true,
"license": "MIT"
},
@@ -10457,15 +10810,45 @@
}
},
"node_modules/jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
+ "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
"dev": true,
"license": "MIT",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
+ "node_modules/jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
+ "dev": true,
+ "engines": [
+ "node >= 0.2.0"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "dev": true,
+ "license": "(MIT OR Apache-2.0)",
+ "dependencies": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "bin": {
+ "JSONStream": "bin.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/jsonwebtoken": {
"version": "9.0.2",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
@@ -10488,24 +10871,6 @@
"npm": ">=6"
}
},
- "node_modules/jsonwebtoken/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
- "node_modules/jsonwebtoken/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/jszip": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
@@ -10580,9 +10945,9 @@
}
},
"node_modules/lightningcss": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz",
- "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==",
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz",
+ "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==",
"license": "MPL-2.0",
"dependencies": {
"detect-libc": "^2.0.3"
@@ -10595,22 +10960,43 @@
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
- "lightningcss-darwin-arm64": "1.30.1",
- "lightningcss-darwin-x64": "1.30.1",
- "lightningcss-freebsd-x64": "1.30.1",
- "lightningcss-linux-arm-gnueabihf": "1.30.1",
- "lightningcss-linux-arm64-gnu": "1.30.1",
- "lightningcss-linux-arm64-musl": "1.30.1",
- "lightningcss-linux-x64-gnu": "1.30.1",
- "lightningcss-linux-x64-musl": "1.30.1",
- "lightningcss-win32-arm64-msvc": "1.30.1",
- "lightningcss-win32-x64-msvc": "1.30.1"
+ "lightningcss-android-arm64": "1.30.2",
+ "lightningcss-darwin-arm64": "1.30.2",
+ "lightningcss-darwin-x64": "1.30.2",
+ "lightningcss-freebsd-x64": "1.30.2",
+ "lightningcss-linux-arm-gnueabihf": "1.30.2",
+ "lightningcss-linux-arm64-gnu": "1.30.2",
+ "lightningcss-linux-arm64-musl": "1.30.2",
+ "lightningcss-linux-x64-gnu": "1.30.2",
+ "lightningcss-linux-x64-musl": "1.30.2",
+ "lightningcss-win32-arm64-msvc": "1.30.2",
+ "lightningcss-win32-x64-msvc": "1.30.2"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz",
+ "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
"node_modules/lightningcss-darwin-arm64": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz",
- "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==",
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz",
+ "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==",
"cpu": [
"arm64"
],
@@ -10628,9 +11014,9 @@
}
},
"node_modules/lightningcss-darwin-x64": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz",
- "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==",
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz",
+ "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==",
"cpu": [
"x64"
],
@@ -10648,9 +11034,9 @@
}
},
"node_modules/lightningcss-freebsd-x64": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz",
- "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==",
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz",
+ "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==",
"cpu": [
"x64"
],
@@ -10668,9 +11054,9 @@
}
},
"node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz",
- "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==",
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz",
+ "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==",
"cpu": [
"arm"
],
@@ -10688,9 +11074,9 @@
}
},
"node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz",
- "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==",
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz",
+ "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==",
"cpu": [
"arm64"
],
@@ -10708,9 +11094,9 @@
}
},
"node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz",
- "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==",
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz",
+ "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==",
"cpu": [
"arm64"
],
@@ -10728,9 +11114,9 @@
}
},
"node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz",
- "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==",
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz",
+ "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==",
"cpu": [
"x64"
],
@@ -10748,9 +11134,9 @@
}
},
"node_modules/lightningcss-linux-x64-musl": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz",
- "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==",
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz",
+ "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==",
"cpu": [
"x64"
],
@@ -10768,9 +11154,9 @@
}
},
"node_modules/lightningcss-win32-arm64-msvc": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz",
- "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==",
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz",
+ "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==",
"cpu": [
"arm64"
],
@@ -10788,9 +11174,9 @@
}
},
"node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.30.1",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz",
- "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==",
+ "version": "1.30.2",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz",
+ "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==",
"cpu": [
"x64"
],
@@ -10807,6 +11193,146 @@
"url": "https://opencollective.com/parcel"
}
},
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lint-staged": {
+ "version": "16.2.6",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.6.tgz",
+ "integrity": "sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^14.0.1",
+ "listr2": "^9.0.5",
+ "micromatch": "^4.0.8",
+ "nano-spawn": "^2.0.0",
+ "pidtree": "^0.6.0",
+ "string-argv": "^0.3.2",
+ "yaml": "^2.8.1"
+ },
+ "bin": {
+ "lint-staged": "bin/lint-staged.js"
+ },
+ "engines": {
+ "node": ">=20.17"
+ },
+ "funding": {
+ "url": "https://opencollective.com/lint-staged"
+ }
+ },
+ "node_modules/lint-staged/node_modules/commander": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz",
+ "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/listr2": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz",
+ "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cli-truncate": "^5.0.0",
+ "colorette": "^2.0.20",
+ "eventemitter3": "^5.0.1",
+ "log-update": "^6.1.0",
+ "rfdc": "^1.4.1",
+ "wrap-ansi": "^9.0.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/listr2/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/listr2/node_modules/cli-truncate": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz",
+ "integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "slice-ansi": "^7.1.0",
+ "string-width": "^8.0.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/listr2/node_modules/is-fullwidth-code-point": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz",
+ "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-east-asian-width": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/listr2/node_modules/slice-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
+ "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "is-fullwidth-code-point": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/listr2/node_modules/string-width": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz",
+ "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-east-asian-width": "^1.3.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/localforage": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz",
@@ -10826,16 +11352,16 @@
}
},
"node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "p-locate": "^5.0.0"
+ "p-locate": "^6.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -10847,6 +11373,13 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
+ "node_modules/lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/lodash.includes": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
@@ -10883,6 +11416,13 @@
"integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
"license": "MIT"
},
+ "node_modules/lodash.kebabcase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+ "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -10890,12 +11430,47 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/lodash.once": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
"license": "MIT"
},
+ "node_modules/lodash.snakecase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
+ "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.upperfirst": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
+ "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -10913,6 +11488,72 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/log-update": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz",
+ "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-escapes": "^7.0.0",
+ "cli-cursor": "^5.0.0",
+ "slice-ansi": "^7.1.0",
+ "strip-ansi": "^7.1.0",
+ "wrap-ansi": "^9.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/is-fullwidth-code-point": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz",
+ "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-east-asian-width": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/slice-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
+ "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "is-fullwidth-code-point": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
"node_modules/longest-streak": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
@@ -10960,16 +11601,13 @@
}
},
"node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
"license": "ISC",
"dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
+ "yallist": "^3.0.2"
}
},
"node_modules/lucide-react": {
@@ -10982,9 +11620,9 @@
}
},
"node_modules/magic-string": {
- "version": "0.30.19",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz",
- "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==",
+ "version": "0.30.21",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.5"
@@ -11049,24 +11687,6 @@
"node": ">= 6.0.0"
}
},
- "node_modules/make-fetch-happen/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/make-fetch-happen/node_modules/http-proxy-agent": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
@@ -11106,13 +11726,6 @@
"node": ">=12"
}
},
- "node_modules/make-fetch-happen/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/make-fetch-happen/node_modules/negotiator": {
"version": "0.6.4",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
@@ -11133,6 +11746,18 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/marked": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz",
+ "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==",
+ "license": "MIT",
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
"node_modules/matcher": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
@@ -11439,9 +12064,9 @@
}
},
"node_modules/media-chrome": {
- "version": "4.14.0",
- "resolved": "https://registry.npmjs.org/media-chrome/-/media-chrome-4.14.0.tgz",
- "integrity": "sha512-IEdFb4blyF15vLvQzLIn6USJBv7Kf2ne+TfLQKBYI5Z0f9VEBVZz5MKy4Uhi0iA9lStl2S9ENIujJRuJIa5OiA==",
+ "version": "4.15.1",
+ "resolved": "https://registry.npmjs.org/media-chrome/-/media-chrome-4.15.1.tgz",
+ "integrity": "sha512-Hxqr0qQ67ewmRaLJBqe5ayu53txFX+DODb9xBSHgTbw7j+gITGZ4llbPPEmqMlDnatw7IsF+AUh9rJYbpnn4ZQ==",
"license": "MIT",
"dependencies": {
"ce-la-react": "^0.3.0"
@@ -11462,6 +12087,19 @@
"node": ">= 0.6"
}
},
+ "node_modules/meow": {
+ "version": "12.1.1",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
+ "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/merge-descriptors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
@@ -12064,29 +12702,6 @@
],
"license": "MIT"
},
- "node_modules/micromark/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/micromark/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
@@ -12145,6 +12760,19 @@
"node": ">=6"
}
},
+ "node_modules/mimic-function": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
+ "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
@@ -12156,11 +12784,11 @@
}
},
"node_modules/minimatch": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz",
- "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==",
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz",
+ "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
"dev": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/brace-expansion": "^5.0.0"
},
@@ -12263,6 +12891,13 @@
"node": ">=8"
}
},
+ "node_modules/minipass/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/minizlib": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
@@ -12277,6 +12912,13 @@
"node": ">= 8"
}
},
+ "node_modules/minizlib/node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
@@ -12297,19 +12939,20 @@
"license": "MIT"
},
"node_modules/monaco-editor": {
- "version": "0.53.0",
- "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.53.0.tgz",
- "integrity": "sha512-0WNThgC6CMWNXXBxTbaYYcunj08iB5rnx4/G56UOPeL9UVIUGGHA1GR0EWIh9Ebabj7NpCRawQ5b0hfN1jQmYQ==",
+ "version": "0.54.0",
+ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz",
+ "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==",
"license": "MIT",
"peer": true,
"dependencies": {
- "@types/trusted-types": "^1.0.6"
+ "dompurify": "3.1.7",
+ "marked": "14.0.0"
}
},
"node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT"
},
"node_modules/multer": {
@@ -12355,6 +12998,19 @@
"license": "MIT",
"optional": true
},
+ "node_modules/nano-spawn": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-2.0.0.tgz",
+ "integrity": "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1"
+ }
+ },
"node_modules/nanoid": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz",
@@ -12412,9 +13068,9 @@
}
},
"node_modules/node-abi": {
- "version": "3.77.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.77.0.tgz",
- "integrity": "sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==",
+ "version": "3.80.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.80.0.tgz",
+ "integrity": "sha512-LyPuZJcI9HVwzXK1GPxWNzrr+vr8Hp/3UqlmWxxh8p54U1ZbclOqbSog9lWHaCX+dBaiGi6n/hIX+mKu74GmPA==",
"license": "MIT",
"dependencies": {
"semver": "^7.3.5"
@@ -12423,18 +13079,6 @@
"node": ">=10"
}
},
- "node_modules/node-abi/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/node-addon-api": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz",
@@ -12453,19 +13097,6 @@
"semver": "^7.3.5"
}
},
- "node_modules/node-api-version/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/node-domexception": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
@@ -12504,6 +13135,13 @@
"url": "https://opencollective.com/node-fetch"
}
},
+ "node_modules/node-releases": {
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/nopt": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
@@ -12587,16 +13225,16 @@
}
},
"node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
+ "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "mimic-fn": "^2.1.0"
+ "mimic-function": "^5.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -12644,6 +13282,79 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/ora/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ora/node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ora/node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ora/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ora/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/p-cancelable": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
@@ -12671,16 +13382,45 @@
}
},
"node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+ "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "p-limit": "^3.0.2"
+ "p-limit": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+ "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^1.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate/node_modules/yocto-queue": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz",
+ "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -12762,6 +13502,25 @@
"integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
"license": "MIT"
},
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -12778,12 +13537,13 @@
"license": "MIT"
},
"node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+ "dev": true,
"license": "MIT",
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
"node_modules/path-is-absolute": {
@@ -12851,15 +13611,15 @@
}
},
"node_modules/pdfjs-dist": {
- "version": "5.3.93",
- "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.3.93.tgz",
- "integrity": "sha512-w3fQKVL1oGn8FRyx5JUG5tnbblggDqyx2XzA5brsJ5hSuS+I0NdnJANhmeWKLjotdbPQucLBug5t0MeWr0AAdg==",
+ "version": "5.4.296",
+ "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.296.tgz",
+ "integrity": "sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q==",
"license": "Apache-2.0",
"engines": {
"node": ">=20.16.0 || >=22.3.0"
},
"optionalDependencies": {
- "@napi-rs/canvas": "^0.1.71"
+ "@napi-rs/canvas": "^0.1.80"
}
},
"node_modules/pe-library": {
@@ -12903,10 +13663,23 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/pidtree": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
+ "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "pidtree": "bin/pidtree.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/player.style": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/player.style/-/player.style-0.2.0.tgz",
- "integrity": "sha512-Ngoaz49TClptMr8HDA2IFmjT3Iq6R27QEUH/C+On33L59RSF3dCLefBYB1Au2RDZQJ6oVFpc1sXaPVpp7fEzzA==",
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/player.style/-/player.style-0.3.0.tgz",
+ "integrity": "sha512-ny1TbqA2ZsUd6jzN+F034+UMXVK7n5SrwepsrZ2gIqVz00Hn0ohCUbbUdst/2IOFCy0oiTbaOXkSFxRw1RmSlg==",
"license": "MIT",
"workspaces": [
".",
@@ -12916,13 +13689,13 @@
"themes/*"
],
"dependencies": {
- "media-chrome": "~4.13.0"
+ "media-chrome": "~4.14.0"
}
},
"node_modules/player.style/node_modules/media-chrome": {
- "version": "4.13.1",
- "resolved": "https://registry.npmjs.org/media-chrome/-/media-chrome-4.13.1.tgz",
- "integrity": "sha512-jPPwYrFkM4ky27/xNYEeyRPOBC7qvru4Oydy7vQHMHplXLQJmjtcauhlLPvG0O5kkYFEaOBXv5zGYes/UxOoVw==",
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/media-chrome/-/media-chrome-4.14.0.tgz",
+ "integrity": "sha512-IEdFb4blyF15vLvQzLIn6USJBv7Kf2ne+TfLQKBYI5Z0f9VEBVZz5MKy4Uhi0iA9lStl2S9ENIujJRuJIa5OiA==",
"license": "MIT",
"dependencies": {
"ce-la-react": "^0.3.0"
@@ -13005,7 +13778,6 @@
"dev": true,
"license": "MIT",
"optional": true,
- "peer": true,
"dependencies": {
"commander": "^9.4.0"
},
@@ -13023,7 +13795,6 @@
"dev": true,
"license": "MIT",
"optional": true,
- "peer": true,
"engines": {
"node": "^12.20.0 || >=14"
}
@@ -13147,6 +13918,12 @@
"react-is": "^16.13.1"
}
},
+ "node_modules/prop-types/node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "license": "MIT"
+ },
"node_modules/property-information": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
@@ -13213,6 +13990,15 @@
"node": ">=10.13.0"
}
},
+ "node_modules/qrcode/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/qrcode/node_modules/cliui": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
@@ -13276,6 +14062,27 @@
"node": ">=8"
}
},
+ "node_modules/qrcode/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/qrcode/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/qrcode/node_modules/wrap-ansi": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
@@ -13419,6 +14226,12 @@
"rc": "cli.js"
}
},
+ "node_modules/rc/node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "license": "ISC"
+ },
"node_modules/rc/node_modules/strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
@@ -13429,24 +14242,26 @@
}
},
"node_modules/react": {
- "version": "19.1.1",
- "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz",
- "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==",
+ "version": "19.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
+ "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-dom": {
- "version": "19.1.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz",
- "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==",
+ "version": "19.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
+ "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
- "scheduler": "^0.26.0"
+ "scheduler": "^0.27.0"
},
"peerDependencies": {
- "react": "^19.1.1"
+ "react": "^19.2.0"
}
},
"node_modules/react-h5-audio-player": {
@@ -13464,10 +14279,11 @@
}
},
"node_modules/react-hook-form": {
- "version": "7.63.0",
- "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.63.0.tgz",
- "integrity": "sha512-ZwueDMvUeucovM2VjkCf7zIHcs1aAlDimZu2Hvel5C5907gUzMpm4xCrQXtRzCvsBqFjonB4m3x4LzCFI1ZKWA==",
+ "version": "7.66.0",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.66.0.tgz",
+ "integrity": "sha512-xXBqsWGKrY46ZqaHDo+ZUYiMUgi8suYu5kdrS20EG8KiL7VRQitEbNjm+UcrDYrNi1YLyfpmAeGjCZYXLT9YBw==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=18.0.0"
},
@@ -13515,10 +14331,11 @@
}
},
"node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "license": "MIT"
+ "version": "19.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.0.tgz",
+ "integrity": "sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==",
+ "license": "MIT",
+ "peer": true
},
"node_modules/react-markdown": {
"version": "10.1.0",
@@ -13548,9 +14365,9 @@
}
},
"node_modules/react-pdf": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-10.1.0.tgz",
- "integrity": "sha512-iUI1YqWgwwZcsXjrehTp3Yi8nT/bvTaWULaRMMyJWvoqqSlopk4LQQ9GDqUnDtX3gzT2glrqrLbjIPl56a+Q3w==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-10.2.0.tgz",
+ "integrity": "sha512-zk0DIL31oCh8cuQycM0SJKfwh4Onz0/Nwi6wTOjgtEjWGUY6eM+/vuzvOP3j70qtEULn7m1JtaeGzud1w5fY2Q==",
"license": "MIT",
"dependencies": {
"clsx": "^2.0.0",
@@ -13558,7 +14375,7 @@
"make-cancellable-promise": "^2.0.0",
"make-event-props": "^2.0.0",
"merge-refs": "^2.0.0",
- "pdfjs-dist": "5.3.93",
+ "pdfjs-dist": "5.4.296",
"tiny-invariant": "^1.0.0",
"warning": "^4.0.0"
},
@@ -13609,6 +14426,40 @@
"react-dom": "^17.0.2 || ^18 || ^19"
}
},
+ "node_modules/react-redux": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
+ "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@types/use-sync-external-store": "^0.0.6",
+ "use-sync-external-store": "^1.4.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^18.2.25 || ^19",
+ "react": "^18.0 || ^19",
+ "redux": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "redux": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-refresh": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
+ "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/react-remove-scroll": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz",
@@ -13667,9 +14518,9 @@
}
},
"node_modules/react-simple-keyboard": {
- "version": "3.8.125",
- "resolved": "https://registry.npmjs.org/react-simple-keyboard/-/react-simple-keyboard-3.8.125.tgz",
- "integrity": "sha512-8+PbmGA2auM7V57hapHsKV7IJcJVl0QNNW09RJQ7xCiohHuZNKvqrxGvisxhhr7X8C8TKulxbqdxjZbFelwO7w==",
+ "version": "3.8.132",
+ "resolved": "https://registry.npmjs.org/react-simple-keyboard/-/react-simple-keyboard-3.8.132.tgz",
+ "integrity": "sha512-GoXK+6SRu72Jn8qT8fy+PxstIdZEACyIi/7zy0qXcrB6EJaN6zZk0/w3Sv3ALLwXqQd/3t3yUL4DQOwoNO1cbw==",
"license": "MIT",
"peerDependencies": {
"react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
@@ -13737,31 +14588,6 @@
"read-binary-file-arch": "cli.js"
}
},
- "node_modules/read-binary-file-arch/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/read-binary-file-arch/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
@@ -13783,6 +14609,49 @@
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"license": "MIT"
},
+ "node_modules/recharts": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.3.0.tgz",
+ "integrity": "sha512-Vi0qmTB0iz1+/Cz9o5B7irVyUjX2ynvEgImbgMt/3sKRREcUM07QiYjS1QpAVrkmVlXqy5gykq4nGWMz9AS4Rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@reduxjs/toolkit": "1.x.x || 2.x.x",
+ "clsx": "^2.1.1",
+ "decimal.js-light": "^2.5.1",
+ "es-toolkit": "^1.39.3",
+ "eventemitter3": "^5.0.1",
+ "immer": "^10.1.1",
+ "react-redux": "8.x.x || 9.x.x",
+ "reselect": "5.1.1",
+ "tiny-invariant": "^1.3.3",
+ "use-sync-external-store": "^1.2.2",
+ "victory-vendor": "^37.0.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/redux": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/redux-thunk": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
+ "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "redux": "^5.0.0"
+ }
+ },
"node_modules/refractor": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
@@ -13974,6 +14843,16 @@
"node": ">=0.10.0"
}
},
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
@@ -13998,6 +14877,12 @@
"url": "https://github.com/sponsors/jet2jet"
}
},
+ "node_modules/reselect": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
+ "license": "MIT"
+ },
"node_modules/resolve-alpn": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
@@ -14006,13 +14891,13 @@
"license": "MIT"
},
"node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/responselike": {
@@ -14029,17 +14914,20 @@
}
},
"node_modules/restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
+ "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
+ "onetime": "^7.0.0",
+ "signal-exit": "^4.1.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/retry": {
@@ -14063,6 +14951,13 @@
"node": ">=0.10.0"
}
},
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -14100,9 +14995,9 @@
}
},
"node_modules/rollup": {
- "version": "4.52.3",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz",
- "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==",
+ "version": "4.52.5",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz",
+ "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==",
"license": "MIT",
"dependencies": {
"@types/estree": "1.0.8"
@@ -14115,28 +15010,28 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.52.3",
- "@rollup/rollup-android-arm64": "4.52.3",
- "@rollup/rollup-darwin-arm64": "4.52.3",
- "@rollup/rollup-darwin-x64": "4.52.3",
- "@rollup/rollup-freebsd-arm64": "4.52.3",
- "@rollup/rollup-freebsd-x64": "4.52.3",
- "@rollup/rollup-linux-arm-gnueabihf": "4.52.3",
- "@rollup/rollup-linux-arm-musleabihf": "4.52.3",
- "@rollup/rollup-linux-arm64-gnu": "4.52.3",
- "@rollup/rollup-linux-arm64-musl": "4.52.3",
- "@rollup/rollup-linux-loong64-gnu": "4.52.3",
- "@rollup/rollup-linux-ppc64-gnu": "4.52.3",
- "@rollup/rollup-linux-riscv64-gnu": "4.52.3",
- "@rollup/rollup-linux-riscv64-musl": "4.52.3",
- "@rollup/rollup-linux-s390x-gnu": "4.52.3",
- "@rollup/rollup-linux-x64-gnu": "4.52.3",
- "@rollup/rollup-linux-x64-musl": "4.52.3",
- "@rollup/rollup-openharmony-arm64": "4.52.3",
- "@rollup/rollup-win32-arm64-msvc": "4.52.3",
- "@rollup/rollup-win32-ia32-msvc": "4.52.3",
- "@rollup/rollup-win32-x64-gnu": "4.52.3",
- "@rollup/rollup-win32-x64-msvc": "4.52.3",
+ "@rollup/rollup-android-arm-eabi": "4.52.5",
+ "@rollup/rollup-android-arm64": "4.52.5",
+ "@rollup/rollup-darwin-arm64": "4.52.5",
+ "@rollup/rollup-darwin-x64": "4.52.5",
+ "@rollup/rollup-freebsd-arm64": "4.52.5",
+ "@rollup/rollup-freebsd-x64": "4.52.5",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.52.5",
+ "@rollup/rollup-linux-arm-musleabihf": "4.52.5",
+ "@rollup/rollup-linux-arm64-gnu": "4.52.5",
+ "@rollup/rollup-linux-arm64-musl": "4.52.5",
+ "@rollup/rollup-linux-loong64-gnu": "4.52.5",
+ "@rollup/rollup-linux-ppc64-gnu": "4.52.5",
+ "@rollup/rollup-linux-riscv64-gnu": "4.52.5",
+ "@rollup/rollup-linux-riscv64-musl": "4.52.5",
+ "@rollup/rollup-linux-s390x-gnu": "4.52.5",
+ "@rollup/rollup-linux-x64-gnu": "4.52.5",
+ "@rollup/rollup-linux-x64-musl": "4.52.5",
+ "@rollup/rollup-openharmony-arm64": "4.52.5",
+ "@rollup/rollup-win32-arm64-msvc": "4.52.5",
+ "@rollup/rollup-win32-ia32-msvc": "4.52.5",
+ "@rollup/rollup-win32-x64-gnu": "4.52.5",
+ "@rollup/rollup-win32-x64-msvc": "4.52.5",
"fsevents": "~2.3.2"
}
},
@@ -14156,29 +15051,6 @@
"node": ">= 18"
}
},
- "node_modules/router/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/router/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -14256,19 +15128,21 @@
"license": "ISC"
},
"node_modules/scheduler": {
- "version": "0.26.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
- "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
"license": "MIT"
},
"node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/semver-compare": {
@@ -14301,29 +15175,6 @@
"node": ">= 18"
}
},
- "node_modules/send/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/send/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "license": "MIT"
- },
"node_modules/serialize-error": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
@@ -14483,11 +15334,17 @@
}
},
"node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
- "license": "ISC"
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
},
"node_modules/simple-concat": {
"version": "1.0.1",
@@ -14547,19 +15404,6 @@
"node": ">=10"
}
},
- "node_modules/simple-update-notifier/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/slice-ansi": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
@@ -14630,31 +15474,6 @@
"node": ">= 6.0.0"
}
},
- "node_modules/socks-proxy-agent/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/socks-proxy-agent/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/sonner": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/sonner/-/sonner-2.0.7.tgz",
@@ -14717,6 +15536,16 @@
"node": ">= 0.10.0"
}
},
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">= 10.x"
+ }
+ },
"node_modules/spotify-audio-element": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/spotify-audio-element/-/spotify-audio-element-1.0.3.tgz",
@@ -14809,6 +15638,16 @@
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"license": "MIT"
},
+ "node_modules/string-argv": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6.19"
+ }
+ },
"node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -14839,6 +15678,50 @@
"node": ">=8"
}
},
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/stringify-entities": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
@@ -14854,15 +15737,19 @@
}
},
"node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "ansi-regex": "^5.0.1"
+ "ansi-regex": "^6.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/strip-ansi-cjs": {
@@ -14879,6 +15766,16 @@
"node": ">=8"
}
},
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -14893,24 +15790,24 @@
}
},
"node_modules/style-mod": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz",
- "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.3.tgz",
+ "integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==",
"license": "MIT"
},
"node_modules/style-to-js": {
- "version": "1.1.17",
- "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz",
- "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==",
+ "version": "1.1.18",
+ "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.18.tgz",
+ "integrity": "sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==",
"license": "MIT",
"dependencies": {
- "style-to-object": "1.0.9"
+ "style-to-object": "1.0.11"
}
},
"node_modules/style-to-object": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz",
- "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==",
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.11.tgz",
+ "integrity": "sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==",
"license": "MIT",
"dependencies": {
"inline-style-parser": "0.2.4"
@@ -14929,31 +15826,6 @@
"node": ">= 8.0"
}
},
- "node_modules/sumchecker/node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/sumchecker/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/super-media-element": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/super-media-element/-/super-media-element-1.4.2.tgz",
@@ -14983,15 +15855,15 @@
}
},
"node_modules/tailwindcss": {
- "version": "4.1.14",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.14.tgz",
- "integrity": "sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.16.tgz",
+ "integrity": "sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==",
"license": "MIT"
},
"node_modules/tapable": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz",
- "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
+ "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -15002,19 +15874,21 @@
}
},
"node_modules/tar": {
- "version": "7.5.1",
- "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz",
- "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+ "dev": true,
"license": "ISC",
"dependencies": {
- "@isaacs/fs-minipass": "^4.0.0",
- "chownr": "^3.0.0",
- "minipass": "^7.1.2",
- "minizlib": "^3.1.0",
- "yallist": "^5.0.0"
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^5.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
},
"engines": {
- "node": ">=18"
+ "node": ">=10"
}
},
"node_modules/tar-fs": {
@@ -15065,44 +15939,22 @@
"node": ">= 6"
}
},
- "node_modules/tar/node_modules/chownr": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
- "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/tar/node_modules/minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "dev": true,
"license": "ISC",
"engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
- "node_modules/tar/node_modules/minizlib": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz",
- "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==",
- "license": "MIT",
- "dependencies": {
- "minipass": "^7.1.2"
- },
- "engines": {
- "node": ">= 18"
+ "node": ">=8"
}
},
"node_modules/tar/node_modules/yallist": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
- "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/temp": {
"version": "0.9.4",
@@ -15110,7 +15962,6 @@
"integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"mkdirp": "^0.5.1",
"rimraf": "~2.6.2"
@@ -15145,36 +15996,12 @@
"node": ">=12"
}
},
- "node_modules/temp-file/node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/temp-file/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
"node_modules/temp/node_modules/mkdirp": {
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"minimist": "^1.2.6"
},
@@ -15189,7 +16016,6 @@
"deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
"license": "ISC",
- "peer": true,
"dependencies": {
"glob": "^7.1.3"
},
@@ -15197,6 +16023,26 @@
"rimraf": "bin.js"
}
},
+ "node_modules/text-extensions": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz",
+ "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/tiktok-video-element": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/tiktok-video-element/-/tiktok-video-element-0.1.1.tgz",
@@ -15229,6 +16075,13 @@
"integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
"license": "MIT"
},
+ "node_modules/tinyexec": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz",
+ "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/tinyglobby": {
"version": "0.2.15",
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
@@ -15267,6 +16120,7 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -15472,6 +16326,7 @@
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -15481,16 +16336,16 @@
}
},
"node_modules/typescript-eslint": {
- "version": "8.45.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.45.0.tgz",
- "integrity": "sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==",
+ "version": "8.46.2",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.2.tgz",
+ "integrity": "sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "8.45.0",
- "@typescript-eslint/parser": "8.45.0",
- "@typescript-eslint/typescript-estree": "8.45.0",
- "@typescript-eslint/utils": "8.45.0"
+ "@typescript-eslint/eslint-plugin": "8.46.2",
+ "@typescript-eslint/parser": "8.46.2",
+ "@typescript-eslint/typescript-estree": "8.46.2",
+ "@typescript-eslint/utils": "8.46.2"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -15531,11 +16386,24 @@
}
},
"node_modules/undici-types": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.13.0.tgz",
- "integrity": "sha512-Ov2Rr9Sx+fRgagJ5AX0qvItZG/JKKoBRAVITs1zk7IqZGTJUwgUr7qoYBpWwakpWilTZFM98rG/AFRocu10iIQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
+ "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
"license": "MIT"
},
+ "node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/unified": {
"version": "11.0.5",
"resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
@@ -15582,9 +16450,9 @@
}
},
"node_modules/unist-util-is": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
- "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
"license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0"
@@ -15636,9 +16504,9 @@
}
},
"node_modules/unist-util-visit-parents": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
- "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
"license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
@@ -15650,13 +16518,13 @@
}
},
"node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">= 4.0.0"
+ "node": ">= 10.0.0"
}
},
"node_modules/unpipe": {
@@ -15668,6 +16536,37 @@
"node": ">= 0.8"
}
},
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
+ "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -15721,6 +16620,15 @@
}
}
},
+ "node_modules/use-sync-external-store": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/utf8-byte-length": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz",
@@ -15795,6 +16703,28 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/victory-vendor": {
+ "version": "37.3.6",
+ "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz",
+ "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==",
+ "license": "MIT AND ISC",
+ "dependencies": {
+ "@types/d3-array": "^3.0.3",
+ "@types/d3-ease": "^3.0.0",
+ "@types/d3-interpolate": "^3.0.1",
+ "@types/d3-scale": "^4.0.2",
+ "@types/d3-shape": "^3.1.0",
+ "@types/d3-time": "^3.0.0",
+ "@types/d3-timer": "^3.0.0",
+ "d3-array": "^3.1.6",
+ "d3-ease": "^3.0.1",
+ "d3-interpolate": "^3.0.1",
+ "d3-scale": "^4.0.2",
+ "d3-shape": "^3.1.0",
+ "d3-time": "^3.0.0",
+ "d3-timer": "^3.0.1"
+ }
+ },
"node_modules/vimeo-video-element": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/vimeo-video-element/-/vimeo-video-element-1.6.0.tgz",
@@ -15805,10 +16735,11 @@
}
},
"node_modules/vite": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.7.tgz",
- "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==",
+ "version": "7.1.12",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz",
+ "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.5.0",
@@ -15900,6 +16831,7 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -16020,18 +16952,18 @@
}
},
"node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
+ "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
"dev": true,
"license": "MIT",
"dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
@@ -16056,6 +16988,67 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/emoji-regex": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
+ "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -16113,12 +17106,25 @@
}
},
"node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true,
"license": "ISC"
},
+ "node_modules/yaml": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz",
+ "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==",
+ "devOptional": true,
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ }
+ },
"node_modules/yargs": {
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
@@ -16179,9 +17185,9 @@
"license": "MIT"
},
"node_modules/zod": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz",
- "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==",
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz",
+ "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
diff --git a/package.json b/package.json
index 8b834d2f..bd71b467 100644
--- a/package.json
+++ b/package.json
@@ -1,26 +1,30 @@
{
"name": "termix",
"private": true,
- "version": "1.7.3",
+ "version": "1.8.0",
"description": "A web-based server management platform with SSH terminal, tunneling, and file editing capabilities",
"author": "Karmaa",
"main": "electron/main.cjs",
"type": "module",
"scripts": {
"clean": "npx prettier . --write",
+ "format": "prettier --write .",
+ "format:check": "prettier --check .",
+ "lint": "eslint .",
+ "lint:fix": "eslint --fix .",
+ "type-check": "tsc --noEmit",
"dev": "vite",
"build": "vite build && tsc -p tsconfig.node.json",
"build:backend": "tsc -p tsconfig.node.json",
"dev:backend": "tsc -p tsconfig.node.json && node ./dist/backend/backend/starter.js",
"preview": "vite preview",
- "electron:dev": "concurrently \"npm run dev\" \"wait-on http://localhost:5173 && electron .\"",
+ "electron:dev": "concurrently \"npm run dev\" \"powershell -c \\\"Start-Sleep -Seconds 5\\\" && electron .\"",
"build:win-portable": "npm run build && electron-builder --win --dir",
"build:win-installer": "npm run build && electron-builder --win --publish=never",
"build:linux-portable": "npm run build && electron-builder --linux --dir",
"build:linux-appimage": "npm run build && electron-builder --linux AppImage",
"build:linux-targz": "npm run build && electron-builder --linux tar.gz",
- "test:encryption": "tsc -p tsconfig.node.json && node ./dist/backend/backend/utils/encryption-test.js",
- "migrate:encryption": "tsc -p tsconfig.node.json && node ./dist/backend/backend/utils/encryption-migration.js"
+ "build:mac": "npm run build && electron-builder --mac --universal"
},
"dependencies": {
"@codemirror/autocomplete": "^6.18.7",
@@ -40,11 +44,12 @@
"@radix-ui/react-scroll-area": "^1.2.9",
"@radix-ui/react-select": "^2.2.5",
"@radix-ui/react-separator": "^1.1.7",
+ "@radix-ui/react-slider": "^1.3.6",
"@radix-ui/react-slot": "^1.2.3",
"@radix-ui/react-switch": "^1.2.5",
"@radix-ui/react-tabs": "^1.1.12",
"@radix-ui/react-tooltip": "^1.2.8",
- "@tailwindcss/vite": "^4.1.11",
+ "@tailwindcss/vite": "^4.1.14",
"@types/bcryptjs": "^2.4.6",
"@types/cookie-parser": "^1.4.9",
"@types/jszip": "^3.4.0",
@@ -95,16 +100,21 @@
"react-simple-keyboard": "^3.8.120",
"react-syntax-highlighter": "^15.6.6",
"react-xtermjs": "^1.0.10",
+ "recharts": "^3.2.1",
"remark-gfm": "^4.0.1",
"sonner": "^2.0.7",
"speakeasy": "^2.0.0",
"ssh2": "^1.16.0",
"tailwind-merge": "^3.3.1",
+ "tailwindcss": "^4.1.14",
"wait-on": "^9.0.1",
"ws": "^8.18.3",
"zod": "^4.0.5"
},
"devDependencies": {
+ "@commitlint/cli": "^20.1.0",
+ "@commitlint/config-conventional": "^20.0.0",
+ "@electron/notarize": "^2.5.0",
"@eslint/js": "^9.34.0",
"@types/better-sqlite3": "^7.6.13",
"@types/cors": "^2.8.19",
@@ -115,7 +125,7 @@
"@types/react-dom": "^19.1.6",
"@types/ssh2": "^1.15.5",
"@types/ws": "^8.18.1",
- "@vitejs/plugin-react-swc": "^3.10.2",
+ "@vitejs/plugin-react": "^4.3.4",
"concurrently": "^9.2.1",
"electron": "^38.0.0",
"electron-builder": "^26.0.12",
@@ -123,9 +133,19 @@
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.3.0",
+ "husky": "^9.1.7",
+ "lint-staged": "^16.2.3",
"prettier": "3.6.2",
"typescript": "~5.9.2",
"typescript-eslint": "^8.40.0",
"vite": "^7.1.5"
+ },
+ "lint-staged": {
+ "*.{js,jsx,ts,tsx}": [
+ "prettier --write"
+ ],
+ "*.{json,css,md}": [
+ "prettier --write"
+ ]
}
}
diff --git a/public/icon-mac.png b/public/icon-mac.png
new file mode 100644
index 0000000000000000000000000000000000000000..19f7681e88f337e4f0aa9a91a40e1c238015687a
GIT binary patch
literal 15692
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
G`hNf{{~W9U
literal 0
HcmV?d00001
diff --git a/public/icon.icns b/public/icon.icns
index 8a97f2aed2d3795269c7cdbc853d4797c835e6c8..7e6b7329f6cfb1f9b6d934d78d1abf3fdd7f6426 100644
GIT binary patch
literal 245192
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