From d2982033384f169ff4fa2b5609b638846e275871 Mon Sep 17 00:00:00 2001 From: Egor Date: Thu, 21 Aug 2025 18:27:25 -0700 Subject: [PATCH] using libraries to simplify complex app code, fully rely on mantine theming --- package.json | 6 +- src/components/AppHeader.tsx | 19 +- src/components/DownloadCard.tsx | 7 +- src/components/InfoTooltip.tsx | 7 +- src/components/StyledTooltip.tsx | 35 -- src/components/UpdateAvailableModal.tsx | 28 +- src/components/WarningDisplay.tsx | 11 +- .../screens/Interface/TerminalTab.tsx | 4 +- src/components/settings/AppearanceTab.tsx | 25 +- src/contexts/ThemeContext.tsx | 82 --- src/main.tsx | 20 +- src/main/managers/KoboldCppManager.ts | 253 +++------ src/main/managers/LogManager.ts | 158 ++---- yarn.lock | 504 +++++++++++++++++- 14 files changed, 659 insertions(+), 500 deletions(-) delete mode 100644 src/components/StyledTooltip.tsx delete mode 100644 src/contexts/ThemeContext.tsx diff --git a/package.json b/package.json index 842fd63..dcbe4aa 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "friendly-kobold", "productName": "Friendly Kobold", - "version": "0.4.1", + "version": "0.5.0", "description": "A modern Electron shell for KoboldCpp", "main": "out/main/index.js", "homepage": "./", @@ -82,10 +82,14 @@ "@mantine/core": "^8.2.5", "@mantine/hooks": "^8.2.5", "ansi-to-html": "^0.7.2", + "execa": "^9.6.0", + "got": "^14.4.7", "lucide-react": "^0.540.0", "react": "^19.1.1", "react-dom": "^19.1.1", "systeminformation": "^5.27.7", + "winston": "^3.17.0", + "winston-daily-rotate-file": "^5.0.0", "zustand": "^5.0.8" }, "build": { diff --git a/src/components/AppHeader.tsx b/src/components/AppHeader.tsx index 11ff2e1..c9b8f7b 100644 --- a/src/components/AppHeader.tsx +++ b/src/components/AppHeader.tsx @@ -8,10 +8,9 @@ import { Select, Title, Image, - useMantineColorScheme, + Tooltip, } from '@mantine/core'; import { Settings, ArrowLeft } from 'lucide-react'; -import { StyledTooltip } from '@/components/StyledTooltip'; import { soundAssets, playSound, initializeAudio } from '@/utils'; import iconUrl from '/icon.png'; @@ -37,7 +36,6 @@ export const AppHeader = ({ const [logoClickCount, setLogoClickCount] = useState(0); const [isElephantMode, setIsElephantMode] = useState(false); const [isMouseSqueaking, setIsMouseSqueaking] = useState(false); - const { colorScheme } = useMantineColorScheme(); const handleLogoClick = async () => { await initializeAudio(); @@ -66,16 +64,7 @@ export const AppHeader = ({ }; return ( - +
{currentScreen === 'interface' ? ( @@ -152,7 +141,7 @@ export const AppHeader = ({ justifyContent: 'flex-end', }} > - + - +
diff --git a/src/components/DownloadCard.tsx b/src/components/DownloadCard.tsx index 1b4d036..3104b1f 100644 --- a/src/components/DownloadCard.tsx +++ b/src/components/DownloadCard.tsx @@ -106,8 +106,11 @@ export const DownloadCard = ({ withBorder radius="sm" padding="sm" - bd={isCurrent ? '2px solid var(--mantine-color-blue-filled)' : undefined} - bg={isCurrent ? 'var(--mantine-color-blue-light)' : undefined} + {...(isCurrent && { + c: 'blue', + bg: 'blue.0', + bd: '2px solid blue', + })} >
diff --git a/src/components/InfoTooltip.tsx b/src/components/InfoTooltip.tsx index 04ebf57..7829af8 100644 --- a/src/components/InfoTooltip.tsx +++ b/src/components/InfoTooltip.tsx @@ -1,6 +1,5 @@ -import { ActionIcon } from '@mantine/core'; +import { ActionIcon, Tooltip } from '@mantine/core'; import { Info } from 'lucide-react'; -import { StyledTooltip } from '@/components/StyledTooltip'; interface InfoTooltipProps { label: string; @@ -13,9 +12,9 @@ export const InfoTooltip = ({ multiline = true, width = 300, }: InfoTooltipProps) => ( - + - + ); diff --git a/src/components/StyledTooltip.tsx b/src/components/StyledTooltip.tsx deleted file mode 100644 index 4302e44..0000000 --- a/src/components/StyledTooltip.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import type { ReactNode } from 'react'; -import { Tooltip, useMantineColorScheme } from '@mantine/core'; -import type { TooltipProps } from '@mantine/core'; - -interface StyledTooltipProps extends Omit { - children: ReactNode; -} - -export const StyledTooltip = ({ children, ...props }: StyledTooltipProps) => { - const { colorScheme } = useMantineColorScheme(); - const isDark = colorScheme === 'dark'; - - return ( - - {children} - - ); -}; diff --git a/src/components/UpdateAvailableModal.tsx b/src/components/UpdateAvailableModal.tsx index b4efd5d..c40a3b5 100644 --- a/src/components/UpdateAvailableModal.tsx +++ b/src/components/UpdateAvailableModal.tsx @@ -6,7 +6,6 @@ import { Button, Card, Loader, - useMantineColorScheme, Anchor, Progress, } from '@mantine/core'; @@ -36,7 +35,6 @@ export const UpdateAvailableModal = ({ downloadProgress = 0, }: UpdateAvailableModalProps) => { const [isUpdating, setIsUpdating] = useState(false); - const { colorScheme } = useMantineColorScheme(); const handleUpdate = async () => { try { @@ -61,19 +59,7 @@ export const UpdateAvailableModal = ({ closeOnEscape={!isDownloading && !isUpdating} > - +
@@ -85,11 +71,7 @@ export const UpdateAvailableModal = ({
- + @@ -97,11 +79,7 @@ export const UpdateAvailableModal = ({ Available Version - + {availableUpdate.version}
diff --git a/src/components/WarningDisplay.tsx b/src/components/WarningDisplay.tsx index 085f410..81712e1 100644 --- a/src/components/WarningDisplay.tsx +++ b/src/components/WarningDisplay.tsx @@ -1,7 +1,6 @@ import { ReactNode } from 'react'; -import { Group, useMantineTheme, List } from '@mantine/core'; +import { Group, useMantineTheme, List, Tooltip } from '@mantine/core'; import { AlertTriangle, Info } from 'lucide-react'; -import { StyledTooltip } from '@/components/StyledTooltip'; interface WarningItem { type: 'warning' | 'info'; @@ -26,7 +25,7 @@ export const WarningDisplay = ({ warnings, children }: WarningDisplayProps) => { return ( {warningMessages.length > 0 && ( - { maw={320} > - + )} {infoMessages.length > 0 && ( - { maw={320} > - + )} {children} diff --git a/src/components/screens/Interface/TerminalTab.tsx b/src/components/screens/Interface/TerminalTab.tsx index 5cb4465..1648120 100644 --- a/src/components/screens/Interface/TerminalTab.tsx +++ b/src/components/screens/Interface/TerminalTab.tsx @@ -120,7 +120,7 @@ export const TerminalTab = ({ onServerReady }: TerminalTabProps) => { flexDirection: 'column', backgroundColor: colorScheme === 'dark' - ? 'var(--mantine-color-dark-8)' + ? 'var(--mantine-color-dark-filled)' : 'var(--mantine-color-gray-0)', borderRadius: 'inherit', position: 'relative', @@ -149,7 +149,7 @@ export const TerminalTab = ({ onServerReady }: TerminalTabProps) => { color: colorScheme === 'dark' ? 'var(--mantine-color-gray-0)' - : 'var(--mantine-color-dark-9)', + : 'var(--mantine-color-dark-filled)', whiteSpace: 'pre-wrap', wordBreak: 'break-word', }} diff --git a/src/components/settings/AppearanceTab.tsx b/src/components/settings/AppearanceTab.tsx index 264d10b..2376758 100644 --- a/src/components/settings/AppearanceTab.tsx +++ b/src/components/settings/AppearanceTab.tsx @@ -1,9 +1,9 @@ import { Stack, Text, Group, SegmentedControl, rem } from '@mantine/core'; +import { useMantineColorScheme } from '@mantine/core'; import { Sun, Moon, Monitor } from 'lucide-react'; -import { useTheme, type ThemeMode } from '@/contexts/ThemeContext'; export const AppearanceTab = () => { - const { themeMode, setThemeMode } = useTheme(); + const { colorScheme, setColorScheme } = useMantineColorScheme(); return ( @@ -16,8 +16,23 @@ export const AppearanceTab = () => { setThemeMode(value as ThemeMode)} + value={colorScheme} + onChange={(value) => + setColorScheme(value as 'light' | 'dark' | 'auto') + } + styles={(theme) => ({ + indicator: { + backgroundColor: + colorScheme === 'dark' + ? theme.colors.dark[5] + : theme.colors.gray[2], + border: `1px solid ${ + colorScheme === 'dark' + ? theme.colors.dark[4] + : theme.colors.gray[4] + }`, + }, + })} data={[ { label: ( @@ -44,7 +59,7 @@ export const AppearanceTab = () => { System
), - value: 'system', + value: 'auto', }, ]} /> diff --git a/src/contexts/ThemeContext.tsx b/src/contexts/ThemeContext.tsx deleted file mode 100644 index c082f20..0000000 --- a/src/contexts/ThemeContext.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { - createContext, - useContext, - useEffect, - useState, - ReactNode, -} from 'react'; -import { MantineColorScheme } from '@mantine/core'; - -export type ThemeMode = 'light' | 'dark' | 'system'; - -interface ThemeContextType { - themeMode: ThemeMode; - effectiveTheme: MantineColorScheme; - setThemeMode: (mode: ThemeMode) => void; -} - -const ThemeContext = createContext(undefined); - -const THEME_STORAGE_KEY = 'friendly-kobold-theme'; - -// eslint-disable-next-line react-refresh/only-export-components -export const useTheme = () => { - const context = useContext(ThemeContext); - if (context === undefined) { - throw new Error('useTheme must be used within a ThemeProvider'); - } - return context; -}; - -const getSystemTheme = (): MantineColorScheme => { - if (typeof window !== 'undefined' && window.matchMedia) { - return window.matchMedia('(prefers-color-scheme: dark)').matches - ? 'dark' - : 'light'; - } - return 'light'; -}; - -const getStoredTheme = (): ThemeMode => { - if (typeof window !== 'undefined') { - const stored = localStorage.getItem(THEME_STORAGE_KEY); - if (stored === 'light' || stored === 'dark' || stored === 'system') { - return stored; - } - } - return 'system'; -}; - -interface ThemeProviderProps { - children: ReactNode; -} - -export const ThemeProvider = ({ children }: ThemeProviderProps) => { - const [themeMode, setThemeModeState] = useState(getStoredTheme); - const [systemTheme, setSystemTheme] = - useState(getSystemTheme); - - const effectiveTheme: MantineColorScheme = - themeMode === 'system' ? systemTheme : themeMode; - - const setThemeMode = (mode: ThemeMode) => { - setThemeModeState(mode); - localStorage.setItem(THEME_STORAGE_KEY, mode); - }; - - useEffect(() => { - const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); - const handleChange = (e: MediaQueryListEvent) => { - setSystemTheme(e.matches ? 'dark' : 'light'); - }; - - mediaQuery.addEventListener('change', handleChange); - return () => mediaQuery.removeEventListener('change', handleChange); - }, []); - - return ( - - {children} - - ); -}; diff --git a/src/main.tsx b/src/main.tsx index 652bb0e..8bb7d78 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,27 +1,13 @@ -/* eslint-disable react-refresh/only-export-components */ import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { MantineProvider } from '@mantine/core'; import { App } from '@/App.tsx'; -import { ThemeProvider, useTheme } from '@/contexts/ThemeContext'; import '@/styles/index.css'; -const AppWithTheme = () => { - const { effectiveTheme } = useTheme(); - - return ( - - - - ); -}; - createRoot(document.getElementById('root')!).render( - - - + + + ); diff --git a/src/main/managers/KoboldCppManager.ts b/src/main/managers/KoboldCppManager.ts index ea8eac8..79c0126 100644 --- a/src/main/managers/KoboldCppManager.ts +++ b/src/main/managers/KoboldCppManager.ts @@ -13,6 +13,9 @@ import { } from 'fs'; import { rm } from 'fs/promises'; import { dialog } from 'electron'; +import { execa } from 'execa'; +import { got } from 'got'; +import { pipeline } from 'stream/promises'; import { GitHubService } from '@/main/services/GitHubService'; import { ConfigManager } from '@/main/managers/ConfigManager'; import { LogManager } from '@/main/managers/LogManager'; @@ -102,45 +105,24 @@ export class KoboldCppManager { } } - const response = await fetch(asset.browser_download_url); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - const totalBytes = asset.size; - let downloadedBytes = 0; - - const reader = response.body?.getReader(); - if (!reader) { - throw new Error('Failed to get response reader'); - } - const writer = createWriteStream(tempPackedFilePath); + let downloadedBytes = 0; + const totalBytes = asset.size; try { - while (true) { - const { done, value } = await reader.read(); - - if (done) break; - - downloadedBytes += value.length; - - writer.write(value); - - if (onProgress && totalBytes > 0) { - onProgress((downloadedBytes / totalBytes) * 100); - } - } - - writer.end(); - - await new Promise((resolve, reject) => { - writer.on('finish', () => resolve()); - writer.on('error', reject); - }); - } finally { - reader.releaseLock(); + await pipeline( + got + .stream(asset.browser_download_url) + .on('downloadProgress', (progress) => { + downloadedBytes = progress.transferred; + if (onProgress && totalBytes > 0) { + onProgress((downloadedBytes / totalBytes) * 100); + } + }), + writer + ); + } catch (error) { + throw new Error(`Download failed: ${(error as Error).message}`); } if (process.platform !== 'win32') { @@ -190,48 +172,21 @@ export class KoboldCppManager { packedPath: string, unpackDir: string ): Promise { - return new Promise((resolve, reject) => { - const unpackProcess = spawn(packedPath, ['--unpack', unpackDir], { - stdio: ['ignore', 'pipe', 'pipe'], + try { + await execa(packedPath, ['--unpack', unpackDir], { timeout: 30000, + stdio: ['ignore', 'pipe', 'pipe'], }); - - let output = ''; - let errorOutput = ''; - - unpackProcess.stdout?.on('data', (data) => { - output += data.toString(); - }); - - unpackProcess.stderr?.on('data', (data) => { - errorOutput += data.toString(); - }); - - unpackProcess.on('close', (code) => { - if (code === 0) { - resolve(); - } else { - reject( - new Error( - `Unpack failed with code ${code}: ${errorOutput || output}` - ) - ); - } - }); - - unpackProcess.on('error', (error) => { - reject(error); - }); - - setTimeout(() => { - try { - unpackProcess.kill('SIGTERM'); - } catch { - void 0; - } - reject(new Error('Unpack process timed out')); - }, 30000); - }); + } catch (error) { + const execaError = error as { + stderr?: string; + stdout?: string; + message: string; + }; + const errorMessage = + execaError.stderr || execaError.stdout || execaError.message; + throw new Error(`Unpack failed: ${errorMessage}`); + } } private getLauncherPath(unpackedDir: string): string | null { @@ -501,72 +456,40 @@ export class KoboldCppManager { } async getVersionFromBinary(binaryPath: string): Promise { - return new Promise((resolve) => { - try { - if (!existsSync(binaryPath)) { - resolve(null); - return; - } - - const process = spawn(binaryPath, ['--version'], { - stdio: ['ignore', 'pipe', 'pipe'], - timeout: 10000, - detached: false, - }); - - let output = ''; - let errorOutput = ''; - - process.stdout.on('data', (data) => { - output += data.toString(); - }); - - process.stderr.on('data', (data) => { - errorOutput += data.toString(); - }); - - process.on('close', () => { - const allOutput = (output + errorOutput).trim(); - - if (/^\d+\.\d+/.test(allOutput)) { - const versionParts = allOutput.split(/\s+/)[0]; - if (versionParts && /^\d+\.\d+/.test(versionParts)) { - resolve(versionParts); - return; - } - } - - const lines = allOutput.split('\n'); - for (const line of lines) { - const trimmedLine = line.trim(); - if (/^\d+\.\d+/.test(trimmedLine)) { - const versionPart = trimmedLine.split(/\s+/)[0]; - if (versionPart) { - resolve(versionPart); - return; - } - } - } - - resolve(null); - }); - - process.on('error', () => { - resolve(null); - }); - - setTimeout(() => { - try { - process.kill('SIGTERM'); - } catch { - void 0; - } - resolve(null); - }, 10000); - } catch { - resolve(null); + try { + if (!existsSync(binaryPath)) { + return null; } - }); + + const result = await execa(binaryPath, ['--version'], { + timeout: 10000, + stdio: ['ignore', 'pipe', 'pipe'], + }); + + const allOutput = (result.stdout + result.stderr).trim(); + + if (/^\d+\.\d+/.test(allOutput)) { + const versionParts = allOutput.split(/\s+/)[0]; + if (versionParts && /^\d+\.\d+/.test(versionParts)) { + return versionParts; + } + } + + const lines = allOutput.split('\n'); + for (const line of lines) { + const trimmedLine = line.trim(); + if (/^\d+\.\d+/.test(trimmedLine)) { + const versionPart = trimmedLine.split(/\s+/)[0]; + if (versionPart) { + return versionPart; + } + } + } + + return null; + } catch { + return null; + } } getCurrentInstallDir() { @@ -733,41 +656,25 @@ export class KoboldCppManager { }; } - const totalBytes = rocmInfo.size; - let downloadedBytes = 0; - - const reader = response.body?.getReader(); - if (!reader) { - return { - success: false, - error: 'Failed to get response reader', - }; - } - const writer = createWriteStream(tempPackedFilePath); + let downloadedBytes = 0; + const totalBytes = rocmInfo.size; try { - while (true) { - const { done, value } = await reader.read(); - - if (done) break; - - downloadedBytes += value.length; - writer.write(value); - - if (onProgress && totalBytes > 0) { - onProgress((downloadedBytes / totalBytes) * 100); - } - } - - writer.end(); - - await new Promise((resolve, reject) => { - writer.on('finish', resolve); - writer.on('error', reject); - }); - } finally { - reader.releaseLock(); + await pipeline( + got.stream(rocmInfo.url).on('downloadProgress', (progress) => { + downloadedBytes = progress.transferred; + if (onProgress && totalBytes > 0) { + onProgress((downloadedBytes / totalBytes) * 100); + } + }), + writer + ); + } catch (error) { + return { + success: false, + error: `Download failed: ${(error as Error).message}`, + }; } if (process.platform !== 'win32') { diff --git a/src/main/managers/LogManager.ts b/src/main/managers/LogManager.ts index 1614892..77e420c 100644 --- a/src/main/managers/LogManager.ts +++ b/src/main/managers/LogManager.ts @@ -1,147 +1,53 @@ -/* eslint-disable no-console */ import { app } from 'electron'; import { join } from 'path'; -import { appendFile, existsSync, mkdirSync, statSync } from 'fs'; +import winston from 'winston'; +import 'winston-daily-rotate-file'; export class LogManager { - private logFilePath: string; - private maxLogSize = 10 * 1024 * 1024; - private maxLogFiles = 5; - private writeQueue: string[] = []; - private isWriting = false; + private logger: winston.Logger; constructor() { const logsDir = join(app.getPath('userData'), 'logs'); - if (!existsSync(logsDir)) { - mkdirSync(logsDir, { recursive: true }); - } + this.logger = winston.createLogger({ + level: process.env.NODE_ENV === 'development' ? 'debug' : 'info', + format: winston.format.combine( + winston.format.timestamp(), + winston.format.printf(({ timestamp, level, message, error }) => { + const processInfo = `[${process.type || 'unknown'}:${process.pid}]`; + let logEntry = `${timestamp} ${processInfo} [${level.toUpperCase()}] ${message}`; - this.logFilePath = join(logsDir, 'friendly-kobold.log'); - this.initializeLogging(); - } - - private initializeLogging() { - this.rotateLogsIfNeeded(); - } - - private rotateLogsIfNeeded() { - if (!existsSync(this.logFilePath)) { - return; - } - - try { - const stats = statSync(this.logFilePath); - if (stats.size >= this.maxLogSize) { - this.rotateLogs(); - } - } catch (error) { - console.warn('Failed to check log file size:', error); - } - } - - private rotateLogs() { - const logsDir = join(app.getPath('userData'), 'logs'); - const baseName = 'friendly-kobold'; - - try { - for (let i = this.maxLogFiles - 1; i >= 1; i--) { - const oldPath = join(logsDir, `${baseName}.${i}.log`); - const newPath = join(logsDir, `${baseName}.${i + 1}.log`); - - if (existsSync(oldPath)) { - if (i === this.maxLogFiles - 1) { - try { - require('fs').unlinkSync(oldPath); - } catch (error) { - console.warn(`Failed to delete old log file: ${oldPath}`, error); - } - } else { - try { - require('fs').renameSync(oldPath, newPath); - } catch (error) { - console.warn( - `Failed to rotate log file: ${oldPath} -> ${newPath}`, - error - ); + if (error && error instanceof Error) { + logEntry += `\n Error: ${error.message}`; + if (error.stack) { + logEntry += `\n Stack: ${error.stack}`; } } - } - } - const rotatedPath = join(logsDir, `${baseName}.1.log`); - try { - require('fs').renameSync(this.logFilePath, rotatedPath); - } catch (error) { - console.warn( - `Failed to rotate current log file: ${this.logFilePath} -> ${rotatedPath}`, - error - ); - } - } catch (error) { - console.warn('Failed to rotate logs:', error); - } - } + return logEntry; + }) + ), + transports: [ + new winston.transports.DailyRotateFile({ + filename: join(logsDir, 'friendly-kobold-%DATE%.log'), + datePattern: 'YYYY-MM-DD', + maxSize: '10m', + maxFiles: '5d', + createSymlink: true, + symlinkName: 'friendly-kobold.log', + }), + ], + }); - private formatLogEntry( - level: string, - message: string, - error?: Error - ): string { - const timestamp = new Date().toISOString(); - const processInfo = `[${process.type || 'unknown'}:${process.pid}]`; - - let logEntry = `${timestamp} ${processInfo} [${level}] ${message}`; - - if (error) { - logEntry += `\n Error: ${error.message}`; - if (error.stack) { - logEntry += `\n Stack: ${error.stack}`; - } - } - - return logEntry + '\n'; - } - - private writeToLog(entry: string) { - this.writeQueue.push(entry); - this.processWriteQueue(); - } - - private async processWriteQueue() { - if (this.isWriting || this.writeQueue.length === 0) { - return; - } - - this.isWriting = true; - - while (this.writeQueue.length > 0) { - const entry = this.writeQueue.shift()!; - try { - await new Promise((resolve, reject) => { - appendFile(this.logFilePath, entry, 'utf8', (err) => { - if (err) reject(err); - else resolve(); - }); - }); - } catch (error) { - console.warn('Failed to write to log file:', error); - } - } - - this.isWriting = false; + this.setupGlobalErrorHandlers(); } public logError(message: string, error?: Error) { - const entry = this.formatLogEntry('ERROR', message, error); - this.writeToLog(entry); + this.logger.error(message, { error }); } public logDebug(message: string) { - if (process.env.NODE_ENV === 'development') { - const entry = this.formatLogEntry('DEBUG', message); - this.writeToLog(entry); - } + this.logger.debug(message); } public setupGlobalErrorHandlers() { @@ -158,7 +64,7 @@ export class LogManager { } public getLogFilePath(): string { - return this.logFilePath; + return join(app.getPath('userData'), 'logs', 'friendly-kobold.log'); } public getLogsDirectory(): string { diff --git a/yarn.lock b/yarn.lock index 56d0b35..50ce7d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -244,6 +244,13 @@ __metadata: languageName: node linkType: hard +"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": + version: 1.6.0 + resolution: "@colors/colors@npm:1.6.0" + checksum: 10c0/9328a0778a5b0db243af54455b79a69e3fb21122d6c15ef9e9fcc94881d8d17352d8b2b2590f9bdd46fac5c2d6c1636dcfc14358a20c70e22daf89e1a759b629 + languageName: node + linkType: hard + "@cspell/cspell-bundled-dicts@npm:9.2.0": version: 9.2.0 resolution: "@cspell/cspell-bundled-dicts@npm:9.2.0" @@ -809,6 +816,17 @@ __metadata: languageName: node linkType: hard +"@dabh/diagnostics@npm:^2.0.2": + version: 2.0.3 + resolution: "@dabh/diagnostics@npm:2.0.3" + dependencies: + colorspace: "npm:1.1.x" + enabled: "npm:2.0.x" + kuler: "npm:^2.0.0" + checksum: 10c0/a5133df8492802465ed01f2f0a5784585241a1030c362d54a602ed1839816d6c93d71dde05cf2ddb4fd0796238c19774406bd62fa2564b637907b495f52425fe + languageName: node + linkType: hard + "@develar/schema-utils@npm:~2.6.5": version: 2.6.5 resolution: "@develar/schema-utils@npm:2.6.5" @@ -1682,6 +1700,13 @@ __metadata: languageName: node linkType: hard +"@sec-ant/readable-stream@npm:^0.4.1": + version: 0.4.1 + resolution: "@sec-ant/readable-stream@npm:0.4.1" + checksum: 10c0/64e9e9cf161e848067a5bf60cdc04d18495dc28bb63a8d9f8993e4dd99b91ad34e4b563c85de17d91ffb177ec17a0664991d2e115f6543e73236a906068987af + languageName: node + linkType: hard + "@sindresorhus/is@npm:^4.0.0": version: 4.6.0 resolution: "@sindresorhus/is@npm:4.6.0" @@ -1689,6 +1714,20 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/is@npm:^7.0.1": + version: 7.0.2 + resolution: "@sindresorhus/is@npm:7.0.2" + checksum: 10c0/50881c9b651e189972087de9104e0d259a2a0dc93c604e863b3be1847e31c3dce685e76a41c0ae92198ae02b36d30d07b723a2d72015ce3cf910afc6dc337ff5 + languageName: node + linkType: hard + +"@sindresorhus/merge-streams@npm:^4.0.0": + version: 4.0.0 + resolution: "@sindresorhus/merge-streams@npm:4.0.0" + checksum: 10c0/482ee543629aa1933b332f811a1ae805a213681ecdd98c042b1c1b89387df63e7812248bb4df3910b02b3cc5589d3d73e4393f30e197c9dde18046ccd471fc6b + languageName: node + linkType: hard + "@szmarczak/http-timer@npm:^4.0.5": version: 4.0.6 resolution: "@szmarczak/http-timer@npm:4.0.6" @@ -1698,6 +1737,15 @@ __metadata: languageName: node linkType: hard +"@szmarczak/http-timer@npm:^5.0.1": + version: 5.0.1 + resolution: "@szmarczak/http-timer@npm:5.0.1" + dependencies: + defer-to-connect: "npm:^2.0.1" + checksum: 10c0/4629d2fbb2ea67c2e9dc03af235c0991c79ebdddcbc19aed5d5732fb29ce01c13331e9b1a491584b9069bd6ecde6581dcbf871f11b7eefdebbab34de6cf2197e + languageName: node + linkType: hard + "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -1783,7 +1831,7 @@ __metadata: languageName: node linkType: hard -"@types/http-cache-semantics@npm:*": +"@types/http-cache-semantics@npm:*, @types/http-cache-semantics@npm:^4.0.4": version: 4.0.4 resolution: "@types/http-cache-semantics@npm:4.0.4" checksum: 10c0/51b72568b4b2863e0fe8d6ce8aad72a784b7510d72dc866215642da51d84945a9459fa89f49ec48f1e9a1752e6a78e85a4cda0ded06b1c73e727610c925f9ce6 @@ -1875,6 +1923,13 @@ __metadata: languageName: node linkType: hard +"@types/triple-beam@npm:^1.3.2": + version: 1.3.5 + resolution: "@types/triple-beam@npm:1.3.5" + checksum: 10c0/d5d7f25da612f6d79266f4f1bb9c1ef8f1684e9f60abab251e1261170631062b656ba26ff22631f2760caeafd372abc41e64867cde27fba54fafb73a35b9056a + languageName: node + linkType: hard + "@types/verror@npm:^1.10.3": version: 1.10.11 resolution: "@types/verror@npm:1.10.11" @@ -2390,7 +2445,7 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.2.6": +"async@npm:^3.2.3, async@npm:^3.2.6": version: 3.2.6 resolution: "async@npm:3.2.6" checksum: 10c0/36484bb15ceddf07078688d95e27076379cc2f87b10c03b6dd8a83e89475a3c8df5848859dd06a4c95af1e4c16fc973de0171a77f18ea00be899aca2a4f85e70 @@ -2627,6 +2682,28 @@ __metadata: languageName: node linkType: hard +"cacheable-lookup@npm:^7.0.0": + version: 7.0.0 + resolution: "cacheable-lookup@npm:7.0.0" + checksum: 10c0/63a9c144c5b45cb5549251e3ea774c04d63063b29e469f7584171d059d3a88f650f47869a974e2d07de62116463d742c287a81a625e791539d987115cb081635 + languageName: node + linkType: hard + +"cacheable-request@npm:^12.0.1": + version: 12.0.1 + resolution: "cacheable-request@npm:12.0.1" + dependencies: + "@types/http-cache-semantics": "npm:^4.0.4" + get-stream: "npm:^9.0.1" + http-cache-semantics: "npm:^4.1.1" + keyv: "npm:^4.5.4" + mimic-response: "npm:^4.0.0" + normalize-url: "npm:^8.0.1" + responselike: "npm:^3.0.0" + checksum: 10c0/3ccc26519c8dd0821fcb21fa00781e55f05ab6e1da1487fbbee9c8c03435a3cf72c29a710a991cebe398fb9a5274e2a772fc488546d402db8dc21310764ed83a + languageName: node + linkType: hard + "cacheable-request@npm:^7.0.2": version: 7.0.4 resolution: "cacheable-request@npm:7.0.4" @@ -2838,6 +2915,15 @@ __metadata: languageName: node linkType: hard +"color-convert@npm:^1.9.3": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -2847,13 +2933,40 @@ __metadata: languageName: node linkType: hard -"color-name@npm:~1.1.4": +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:^1.0.0, color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 languageName: node linkType: hard +"color-string@npm:^1.6.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" + dependencies: + color-name: "npm:^1.0.0" + simple-swizzle: "npm:^0.2.2" + checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 + languageName: node + linkType: hard + +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.3" + color-string: "npm:^1.6.0" + checksum: 10c0/39345d55825884c32a88b95127d417a2c24681d8b57069413596d9fcbb721459ef9d9ec24ce3e65527b5373ce171b73e38dbcd9c830a52a6487e7f37bf00e83c + languageName: node + linkType: hard + "colorette@npm:^2.0.20": version: 2.0.20 resolution: "colorette@npm:2.0.20" @@ -2861,6 +2974,16 @@ __metadata: languageName: node linkType: hard +"colorspace@npm:1.1.x": + version: 1.1.4 + resolution: "colorspace@npm:1.1.4" + dependencies: + color: "npm:^3.1.3" + text-hex: "npm:1.0.x" + checksum: 10c0/af5f91ff7f8e146b96e439ac20ed79b197210193bde721b47380a75b21751d90fa56390c773bb67c0aedd34ff85091883a437ab56861c779bd507d639ba7e123 + languageName: node + linkType: hard + "combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" @@ -3192,7 +3315,7 @@ __metadata: languageName: node linkType: hard -"defer-to-connect@npm:^2.0.0": +"defer-to-connect@npm:^2.0.0, defer-to-connect@npm:^2.0.1": version: 2.0.1 resolution: "defer-to-connect@npm:2.0.1" checksum: 10c0/625ce28e1b5ad10cf77057b9a6a727bf84780c17660f6644dab61dd34c23de3001f03cedc401f7d30a4ed9965c2e8a7336e220a329146f2cf85d4eddea429782 @@ -3455,6 +3578,13 @@ __metadata: languageName: node linkType: hard +"enabled@npm:2.0.x": + version: 2.0.0 + resolution: "enabled@npm:2.0.0" + checksum: 10c0/3b2c2af9bc7f8b9e291610f2dde4a75cf6ee52a68f4dd585482fbdf9a55d65388940e024e56d40bb03e05ef6671f5f53021fa8b72a20e954d7066ec28166713f + languageName: node + linkType: hard + "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -4018,6 +4148,26 @@ __metadata: languageName: node linkType: hard +"execa@npm:^9.6.0": + version: 9.6.0 + resolution: "execa@npm:9.6.0" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + cross-spawn: "npm:^7.0.6" + figures: "npm:^6.1.0" + get-stream: "npm:^9.0.0" + human-signals: "npm:^8.0.1" + is-plain-obj: "npm:^4.1.0" + is-stream: "npm:^4.0.1" + npm-run-path: "npm:^6.0.0" + pretty-ms: "npm:^9.2.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^4.0.0" + yoctocolors: "npm:^2.1.1" + checksum: 10c0/2c44a33142f77d3a6a590a3b769b49b27029a76768593bac1f26fed4dd1330e9c189ee61eba6a8c990fb77e37286c68c7445472ebf24c22b31e9ff320e73d7ac + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.2 resolution: "exponential-backoff@npm:3.1.2" @@ -4120,6 +4270,22 @@ __metadata: languageName: node linkType: hard +"fecha@npm:^4.2.0": + version: 4.2.3 + resolution: "fecha@npm:4.2.3" + checksum: 10c0/0e895965959cf6a22bb7b00f0bf546f2783836310f510ddf63f463e1518d4c96dec61ab33fdfd8e79a71b4856a7c865478ce2ee8498d560fe125947703c9b1cf + languageName: node + linkType: hard + +"figures@npm:^6.1.0": + version: 6.1.0 + resolution: "figures@npm:6.1.0" + dependencies: + is-unicode-supported: "npm:^2.0.0" + checksum: 10c0/9159df4264d62ef447a3931537de92f5012210cf5135c35c010df50a2169377581378149abfe1eb238bd6acbba1c0d547b1f18e0af6eee49e30363cedaffcfe4 + languageName: node + linkType: hard + "file-entry-cache@npm:^8.0.0": version: 8.0.0 resolution: "file-entry-cache@npm:8.0.0" @@ -4129,6 +4295,15 @@ __metadata: languageName: node linkType: hard +"file-stream-rotator@npm:^0.6.1": + version: 0.6.1 + resolution: "file-stream-rotator@npm:0.6.1" + dependencies: + moment: "npm:^2.29.1" + checksum: 10c0/ebb53cc22a33b0b57457c49df96ac96d8f7bace5e495f19577b37c4d87712b5fbe3539724de384852f2f6221aa0f2045e81e1f09a991fcf190f8954ef83caca1 + languageName: node + linkType: hard + "filelist@npm:^1.0.4": version: 1.0.4 resolution: "filelist@npm:1.0.4" @@ -4174,6 +4349,13 @@ __metadata: languageName: node linkType: hard +"fn.name@npm:1.x.x": + version: 1.1.0 + resolution: "fn.name@npm:1.1.0" + checksum: 10c0/8ad62aa2d4f0b2a76d09dba36cfec61c540c13a0fd72e5d94164e430f987a7ce6a743112bbeb14877c810ef500d1f73d7f56e76d029d2e3413f20d79e3460a9a + languageName: node + linkType: hard + "for-each@npm:^0.3.3, for-each@npm:^0.3.5": version: 0.3.5 resolution: "for-each@npm:0.3.5" @@ -4193,6 +4375,13 @@ __metadata: languageName: node linkType: hard +"form-data-encoder@npm:^4.0.2": + version: 4.1.0 + resolution: "form-data-encoder@npm:4.1.0" + checksum: 10c0/cbd655aa8ffff6f7c2733b1d8e95fa9a2fe8a88a90bde29fb54b8e02c9406e51f32a014bfe8297d67fbac9f77614d14a8b4bbc4fd0352838e67e97a881d06332 + languageName: node + linkType: hard + "form-data@npm:^4.0.0": version: 4.0.4 resolution: "form-data@npm:4.0.4" @@ -4233,7 +4422,9 @@ __metadata: eslint-plugin-react-hooks: "npm:^5.2.0" eslint-plugin-react-refresh: "npm:^0.4.20" eslint-plugin-sonarjs: "npm:^3.0.4" + execa: "npm:^9.6.0" globals: "npm:^16.3.0" + got: "npm:^14.4.7" husky: "npm:^9.1.7" jiti: "npm:^2.5.1" lint-staged: "npm:^16.1.5" @@ -4245,6 +4436,8 @@ __metadata: systeminformation: "npm:^5.27.7" typescript: "npm:^5.9.2" vite: "npm:^7.1.3" + winston: "npm:^3.17.0" + winston-daily-rotate-file: "npm:^5.0.0" zustand: "npm:^5.0.8" languageName: unknown linkType: soft @@ -4445,6 +4638,16 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^9.0.0, get-stream@npm:^9.0.1": + version: 9.0.1 + resolution: "get-stream@npm:9.0.1" + dependencies: + "@sec-ant/readable-stream": "npm:^0.4.1" + is-stream: "npm:^4.0.1" + checksum: 10c0/d70e73857f2eea1826ac570c3a912757dcfbe8a718a033fa0c23e12ac8e7d633195b01710e0559af574cbb5af101009b42df7b6f6b29ceec8dbdf7291931b948 + languageName: node + linkType: hard + "get-symbol-description@npm:^1.1.0": version: 1.1.0 resolution: "get-symbol-description@npm:1.1.0" @@ -4590,6 +4793,25 @@ __metadata: languageName: node linkType: hard +"got@npm:^14.4.7": + version: 14.4.7 + resolution: "got@npm:14.4.7" + dependencies: + "@sindresorhus/is": "npm:^7.0.1" + "@szmarczak/http-timer": "npm:^5.0.1" + cacheable-lookup: "npm:^7.0.0" + cacheable-request: "npm:^12.0.1" + decompress-response: "npm:^6.0.0" + form-data-encoder: "npm:^4.0.2" + http2-wrapper: "npm:^2.2.1" + lowercase-keys: "npm:^3.0.0" + p-cancelable: "npm:^4.0.1" + responselike: "npm:^3.0.0" + type-fest: "npm:^4.26.1" + checksum: 10c0/9b5b8dbc0642c78dbc64ab5ff6f12f6edab3e0cb80e89a3a69623a79ba3986f0ff0066a116fba47c0aacce4b0ba1eccf72f923f7fac13a31ce852bf9e2cb8f81 + languageName: node + linkType: hard + "graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" @@ -4715,6 +4937,16 @@ __metadata: languageName: node linkType: hard +"http2-wrapper@npm:^2.2.1": + version: 2.2.1 + resolution: "http2-wrapper@npm:2.2.1" + dependencies: + quick-lru: "npm:^5.1.1" + resolve-alpn: "npm:^1.2.0" + checksum: 10c0/7207201d3c6e53e72e510c9b8912e4f3e468d3ecc0cf3bf52682f2aac9cd99358b896d1da4467380adc151cf97c412bedc59dc13dae90c523f42053a7449eedb + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -4735,6 +4967,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^8.0.1": + version: 8.0.1 + resolution: "human-signals@npm:8.0.1" + checksum: 10c0/195ac607108c56253757717242e17cd2e21b29f06c5d2dad362e86c672bf2d096e8a3bbb2601841c376c2301c4ae7cff129e87f740aa4ebff1390c163114c7c4 + languageName: node + linkType: hard + "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" @@ -4884,6 +5123,13 @@ __metadata: languageName: node linkType: hard +"is-arrayish@npm:^0.3.1": + version: 0.3.2 + resolution: "is-arrayish@npm:0.3.2" + checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 + languageName: node + linkType: hard + "is-async-function@npm:^2.0.0": version: 2.1.1 resolution: "is-async-function@npm:2.1.1" @@ -5067,6 +5313,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^4.1.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 10c0/32130d651d71d9564dc88ba7e6fda0e91a1010a3694648e9f4f47bb6080438140696d3e3e15c741411d712e47ac9edc1a8a9de1fe76f3487b0d90be06ac9975e + languageName: node + linkType: hard + "is-regex@npm:^1.2.1": version: 1.2.1 resolution: "is-regex@npm:1.2.1" @@ -5095,6 +5348,20 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + +"is-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "is-stream@npm:4.0.1" + checksum: 10c0/2706c7f19b851327ba374687bc4a3940805e14ca496dc672b9629e744d143b1ad9c6f1b162dece81c7bfbc0f83b32b61ccc19ad2e05aad2dd7af347408f60c7f + languageName: node + linkType: hard + "is-string@npm:^1.1.1": version: 1.1.1 resolution: "is-string@npm:1.1.1" @@ -5132,6 +5399,13 @@ __metadata: languageName: node linkType: hard +"is-unicode-supported@npm:^2.0.0": + version: 2.1.0 + resolution: "is-unicode-supported@npm:2.1.0" + checksum: 10c0/a0f53e9a7c1fdbcf2d2ef6e40d4736fdffff1c9f8944c75e15425118ff3610172c87bf7bc6c34d3903b04be59790bb2212ddbe21ee65b5a97030fc50370545a5 + languageName: node + linkType: hard + "is-weakmap@npm:^2.0.2": version: 2.0.2 resolution: "is-weakmap@npm:2.0.2" @@ -5372,6 +5646,13 @@ __metadata: languageName: node linkType: hard +"kuler@npm:^2.0.0": + version: 2.0.0 + resolution: "kuler@npm:2.0.0" + checksum: 10c0/0a4e99d92ca373f8f74d1dc37931909c4d0d82aebc94cf2ba265771160fc12c8df34eaaac80805efbda367e2795cb1f1dd4c3d404b6b1cf38aec94035b503d2d + languageName: node + linkType: hard + "lazy-val@npm:^1.0.5": version: 1.0.5 resolution: "lazy-val@npm:1.0.5" @@ -5476,6 +5757,20 @@ __metadata: languageName: node linkType: hard +"logform@npm:^2.7.0": + version: 2.7.0 + resolution: "logform@npm:2.7.0" + dependencies: + "@colors/colors": "npm:1.6.0" + "@types/triple-beam": "npm:^1.3.2" + fecha: "npm:^4.2.0" + ms: "npm:^2.1.1" + safe-stable-stringify: "npm:^2.3.1" + triple-beam: "npm:^1.3.0" + checksum: 10c0/4789b4b37413c731d1835734cb799240d31b865afde6b7b3e06051d6a4127bfda9e88c99cfbf296d084a315ccbed2647796e6a56b66e725bcb268c586f57558f + languageName: node + linkType: hard + "loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" @@ -5494,6 +5789,13 @@ __metadata: languageName: node linkType: hard +"lowercase-keys@npm:^3.0.0": + version: 3.0.0 + resolution: "lowercase-keys@npm:3.0.0" + checksum: 10c0/ef62b9fa5690ab0a6e4ef40c94efce68e3ed124f583cc3be38b26ff871da0178a28b9a84ce0c209653bb25ca135520ab87fea7cd411a54ac4899cb2f30501430 + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" @@ -5673,6 +5975,13 @@ __metadata: languageName: node linkType: hard +"mimic-response@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-response@npm:4.0.0" + checksum: 10c0/761d788d2668ae9292c489605ffd4fad220f442fbae6832adce5ebad086d691e906a6d5240c290293c7a11e99fbdbbef04abbbed498bf8699a4ee0f31315e3fb + languageName: node + linkType: hard + "minimatch@npm:9.0.5, minimatch@npm:^9.0.3, minimatch@npm:^9.0.4": version: 9.0.5 resolution: "minimatch@npm:9.0.5" @@ -5851,6 +6160,13 @@ __metadata: languageName: node linkType: hard +"moment@npm:^2.29.1": + version: 2.30.1 + resolution: "moment@npm:2.30.1" + checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a + languageName: node + linkType: hard + "ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -5978,6 +6294,23 @@ __metadata: languageName: node linkType: hard +"normalize-url@npm:^8.0.1": + version: 8.0.2 + resolution: "normalize-url@npm:8.0.2" + checksum: 10c0/1c62eee6ce184ad4a463ff2984ce5e440a5058c9dd7c5ef80c0a7696bbb1d3638534e266afb14ef9678dfa07fb6c980ef4cde990c80eeee55900c378b7970584 + languageName: node + linkType: hard + +"npm-run-path@npm:^6.0.0": + version: 6.0.0 + resolution: "npm-run-path@npm:6.0.0" + dependencies: + path-key: "npm:^4.0.0" + unicorn-magic: "npm:^0.3.0" + checksum: 10c0/b223c8a0dcd608abf95363ea5c3c0ccc3cd877daf0102eaf1b0f2390d6858d8337fbb7c443af2403b067a7d2c116d10691ecd22ab3c5273c44da1ff8d07753bd + languageName: node + linkType: hard + "object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -5985,6 +6318,13 @@ __metadata: languageName: node linkType: hard +"object-hash@npm:^3.0.0": + version: 3.0.0 + resolution: "object-hash@npm:3.0.0" + checksum: 10c0/a06844537107b960c1c8b96cd2ac8592a265186bfa0f6ccafe0d34eabdb526f6fa81da1f37c43df7ed13b12a4ae3457a16071603bcd39d8beddb5f08c37b0f47 + languageName: node + linkType: hard + "object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4": version: 1.13.4 resolution: "object-inspect@npm:1.13.4" @@ -6069,6 +6409,15 @@ __metadata: languageName: node linkType: hard +"one-time@npm:^1.0.0": + version: 1.0.0 + resolution: "one-time@npm:1.0.0" + dependencies: + fn.name: "npm:1.x.x" + checksum: 10c0/6e4887b331edbb954f4e915831cbec0a7b9956c36f4feb5f6de98c448ac02ff881fd8d9b55a6b1b55030af184c6b648f340a76eb211812f4ad8c9b4b8692fdaa + languageName: node + linkType: hard + "onetime@npm:^5.1.0": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -6147,6 +6496,13 @@ __metadata: languageName: node linkType: hard +"p-cancelable@npm:^4.0.1": + version: 4.0.1 + resolution: "p-cancelable@npm:4.0.1" + checksum: 10c0/12636623f46784ba962b6fe7a1f34d021f1d9a2cc12c43e270baa715ea872d5c8c7d9f086ed420b8b9817e91d9bbe92c14c90e5dddd4a9968c81a2a7aef7089d + languageName: node + linkType: hard + "p-limit@npm:^3.0.2, p-limit@npm:^3.1.0 ": version: 3.1.0 resolution: "p-limit@npm:3.1.0" @@ -6206,6 +6562,13 @@ __metadata: languageName: node linkType: hard +"parse-ms@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-ms@npm:4.0.0" + checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16 + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -6227,6 +6590,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + "path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -6333,6 +6703,15 @@ __metadata: languageName: node linkType: hard +"pretty-ms@npm:^9.2.0": + version: 9.2.0 + resolution: "pretty-ms@npm:9.2.0" + dependencies: + parse-ms: "npm:^4.0.0" + checksum: 10c0/ab6d066f90e9f77020426986e1b018369f41575674544c539aabec2e63a20fec01166d8cf6571d0e165ad11cfe5a8134a2a48a36d42ab291c59c6deca5264cbb + languageName: node + linkType: hard + "proc-log@npm:^2.0.1": version: 2.0.1 resolution: "proc-log@npm:2.0.1" @@ -6530,7 +6909,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.4.0": +"readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.2": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -6613,7 +6992,7 @@ __metadata: languageName: node linkType: hard -"resolve-alpn@npm:^1.0.0": +"resolve-alpn@npm:^1.0.0, resolve-alpn@npm:^1.2.0": version: 1.2.1 resolution: "resolve-alpn@npm:1.2.1" checksum: 10c0/b70b29c1843bc39781ef946c8cd4482e6d425976599c0f9c138cec8209e4e0736161bf39319b01676a847000085dfdaf63583c6fb4427bf751a10635bd2aa0c4 @@ -6695,6 +7074,15 @@ __metadata: languageName: node linkType: hard +"responselike@npm:^3.0.0": + version: 3.0.0 + resolution: "responselike@npm:3.0.0" + dependencies: + lowercase-keys: "npm:^3.0.0" + checksum: 10c0/8af27153f7e47aa2c07a5f2d538cb1e5872995f0e9ff77def858ecce5c3fe677d42b824a62cde502e56d275ab832b0a8bd350d5cd6b467ac0425214ac12ae658 + languageName: node + linkType: hard + "restore-cursor@npm:^3.1.0": version: 3.1.0 resolution: "restore-cursor@npm:3.1.0" @@ -6908,6 +7296,13 @@ __metadata: languageName: node linkType: hard +"safe-stable-stringify@npm:^2.3.1": + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: 10c0/baea14971858cadd65df23894a40588ed791769db21bafb7fd7608397dbdce9c5aac60748abae9995e0fc37e15f2061980501e012cd48859740796bea2987f49 + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -7107,6 +7502,15 @@ __metadata: languageName: node linkType: hard +"simple-swizzle@npm:^0.2.2": + version: 0.2.2 + resolution: "simple-swizzle@npm:0.2.2" + dependencies: + is-arrayish: "npm:^0.3.1" + checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 + languageName: node + linkType: hard + "simple-update-notifier@npm:2.0.0": version: 2.0.0 resolution: "simple-update-notifier@npm:2.0.0" @@ -7249,6 +7653,13 @@ __metadata: languageName: node linkType: hard +"stack-trace@npm:0.0.x": + version: 0.0.10 + resolution: "stack-trace@npm:0.0.10" + checksum: 10c0/9ff3dabfad4049b635a85456f927a075c9d0c210e3ea336412d18220b2a86cbb9b13ec46d6c37b70a302a4ea4d49e30e5d4944dd60ae784073f1cde778ac8f4b + languageName: node + linkType: hard + "stat-mode@npm:^1.0.0": version: 1.0.0 resolution: "stat-mode@npm:1.0.0" @@ -7409,6 +7820,13 @@ __metadata: languageName: node linkType: hard +"strip-final-newline@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-final-newline@npm:4.0.0" + checksum: 10c0/b0cf2b62d597a1b0e3ebc42b88767f0a0d45601f89fd379a928a1812c8779440c81abba708082c946445af1d6b62d5f16e2a7cf4f30d9d6587b89425fae801ff + languageName: node + linkType: hard + "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -7505,6 +7923,13 @@ __metadata: languageName: node linkType: hard +"text-hex@npm:1.0.x": + version: 1.0.0 + resolution: "text-hex@npm:1.0.0" + checksum: 10c0/57d8d320d92c79d7c03ffb8339b825bb9637c2cbccf14304309f51d8950015c44464b6fd1b6820a3d4821241c68825634f09f5a2d9d501e84f7c6fd14376860d + languageName: node + linkType: hard + "tiny-async-pool@npm:1.3.0": version: 1.3.0 resolution: "tiny-async-pool@npm:1.3.0" @@ -7549,6 +7974,13 @@ __metadata: languageName: node linkType: hard +"triple-beam@npm:^1.3.0, triple-beam@npm:^1.4.1": + version: 1.4.1 + resolution: "triple-beam@npm:1.4.1" + checksum: 10c0/4bf1db71e14fe3ff1c3adbe3c302f1fdb553b74d7591a37323a7badb32dc8e9c290738996cbb64f8b10dc5a3833645b5d8c26221aaaaa12e50d1251c9aba2fea + languageName: node + linkType: hard + "truncate-utf8-bytes@npm:^1.0.0": version: 1.0.2 resolution: "truncate-utf8-bytes@npm:1.0.2" @@ -7602,7 +8034,7 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^4.27.0": +"type-fest@npm:^4.26.1, type-fest@npm:^4.27.0": version: 4.41.0 resolution: "type-fest@npm:4.41.0" checksum: 10c0/f5ca697797ed5e88d33ac8f1fec21921839871f808dc59345c9cf67345bfb958ce41bd821165dbf3ae591cedec2bf6fe8882098dfdd8dc54320b859711a2c1e4 @@ -7708,6 +8140,13 @@ __metadata: languageName: node linkType: hard +"unicorn-magic@npm:^0.3.0": + version: 0.3.0 + resolution: "unicorn-magic@npm:0.3.0" + checksum: 10c0/0a32a997d6c15f1c2a077a15b1c4ca6f268d574cf5b8975e778bb98e6f8db4ef4e86dfcae4e158cd4c7e38fb4dd383b93b13eefddc7f178dea13d3ac8a603271 + languageName: node + linkType: hard + "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1" @@ -8036,6 +8475,50 @@ __metadata: languageName: node linkType: hard +"winston-daily-rotate-file@npm:^5.0.0": + version: 5.0.0 + resolution: "winston-daily-rotate-file@npm:5.0.0" + dependencies: + file-stream-rotator: "npm:^0.6.1" + object-hash: "npm:^3.0.0" + triple-beam: "npm:^1.4.1" + winston-transport: "npm:^4.7.0" + peerDependencies: + winston: ^3 + checksum: 10c0/c6dfd8ceff8d3801ca702efabaf696bb82919a62c4fbeded8cbf7d2cb188960872eb7a412547af86f12f7257061088a25bac9e318af8932719a2ccba215d7d3f + languageName: node + linkType: hard + +"winston-transport@npm:^4.7.0, winston-transport@npm:^4.9.0": + version: 4.9.0 + resolution: "winston-transport@npm:4.9.0" + dependencies: + logform: "npm:^2.7.0" + readable-stream: "npm:^3.6.2" + triple-beam: "npm:^1.3.0" + checksum: 10c0/e2990a172e754dbf27e7823772214a22dc8312f7ec9cfba831e5ef30a5d5528792e5ea8f083c7387ccfc5b2af20e3691f64738546c8869086110a26f98671095 + languageName: node + linkType: hard + +"winston@npm:^3.17.0": + version: 3.17.0 + resolution: "winston@npm:3.17.0" + dependencies: + "@colors/colors": "npm:^1.6.0" + "@dabh/diagnostics": "npm:^2.0.2" + async: "npm:^3.2.3" + is-stream: "npm:^2.0.0" + logform: "npm:^2.7.0" + one-time: "npm:^1.0.0" + readable-stream: "npm:^3.4.0" + safe-stable-stringify: "npm:^2.3.1" + stack-trace: "npm:0.0.x" + triple-beam: "npm:^1.3.0" + winston-transport: "npm:^4.9.0" + checksum: 10c0/ec8eaeac9a72b2598aedbff50b7dac82ce374a400ed92e7e705d7274426b48edcb25507d78cff318187c4fb27d642a0e2a39c57b6badc9af8e09d4a40636a5f7 + languageName: node + linkType: hard + "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" @@ -8173,6 +8656,13 @@ __metadata: languageName: node linkType: hard +"yoctocolors@npm:^2.1.1": + version: 2.1.2 + resolution: "yoctocolors@npm:2.1.2" + checksum: 10c0/b220f30f53ebc2167330c3adc86a3c7f158bcba0236f6c67e25644c3188e2571a6014ffc1321943bb619460259d3d27eb4c9cc58c2d884c1b195805883ec7066 + languageName: node + linkType: hard + "zustand@npm:^5.0.8": version: 5.0.8 resolution: "zustand@npm:5.0.8"