diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css
index 2b365ee6..871294d6 100644
--- a/frontend/src/app/globals.css
+++ b/frontend/src/app/globals.css
@@ -8,6 +8,27 @@
}
:root {
+ --bg: #ffffff;
+ --bg-panel: rgba(240, 240, 240, 0.78);
+ --bg-panel-strong: #e5e5e5;
+ --text-strong: #000000;
+ --text: #1a1a1a;
+ --muted: #666666;
+ --line: rgba(0, 0, 0, 0.11);
+ --brand: #d8481f;
+ --brand-strong: #c2410c;
+ --brand-soft: #ffedd5;
+ --accent: #0f766e;
+ --success: #059669;
+ --warning: #d97706;
+ --body-bg: radial-gradient(circle at top left, rgba(240, 100, 45, 0.05), transparent 28%),
+ radial-gradient(circle at 80% 10%, rgba(37, 181, 164, 0.05), transparent 22%),
+ linear-gradient(180deg, #f8fafc 0%, #ffffff 45%, #f1f5f9 100%);
+ --background: var(--bg);
+ --foreground: var(--text);
+}
+
+.dark {
--bg: #09111d;
--bg-panel: rgba(14, 21, 32, 0.78);
--bg-panel-strong: #121d2b;
@@ -21,6 +42,28 @@
--accent: #25b5a4;
--success: #34c789;
--warning: #f3a63c;
+ --body-bg: radial-gradient(circle at top left, rgba(240, 100, 45, 0.18), transparent 28%),
+ radial-gradient(circle at 80% 10%, rgba(37, 181, 164, 0.12), transparent 22%),
+ linear-gradient(180deg, #07101a 0%, #09111d 45%, #0b1320 100%);
+ --background: var(--bg);
+ --foreground: var(--text);
+}
+
+.oled {
+ --bg: #000000;
+ --bg-panel: #000000;
+ --bg-panel-strong: #000000;
+ --text-strong: #ffffff;
+ --text: #ffffff;
+ --muted: #cccccc;
+ --line: #555555;
+ --brand: #ffaa00;
+ --brand-strong: #ffcc00;
+ --brand-soft: #ff8800;
+ --accent: #00ffff;
+ --success: #00ff00;
+ --warning: #ffcc00;
+ --body-bg: #000000;
--background: var(--bg);
--foreground: var(--text);
}
@@ -62,10 +105,7 @@ html {
body {
min-height: 100vh;
margin: 0;
- background:
- radial-gradient(circle at top left, rgba(240, 100, 45, 0.18), transparent 28%),
- radial-gradient(circle at 80% 10%, rgba(37, 181, 164, 0.12), transparent 22%),
- linear-gradient(180deg, #07101a 0%, #09111d 45%, #0b1320 100%);
+ background: var(--body-bg);
color: var(--text);
font-family: var(--font-sans), sans-serif;
}
diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx
index 76e154df..1f255358 100644
--- a/frontend/src/app/layout.tsx
+++ b/frontend/src/app/layout.tsx
@@ -9,7 +9,7 @@ import { OfflineSyncHandler } from '@/components/OfflineSyncHandler';
import { SkipLink } from '@/components/ui/SkipLink';
import { AuthProvider } from '@/contexts/AuthContext';
import { NotificationProvider } from '@/contexts/NotificationContext';
-import { ThemeProvider } from '@/contexts/ThemeContext';
+import { Providers as ThemeProvider } from '@/lib/theme/providers';
import { TutorialProvider } from '@/contexts/TutorialContext';
import { WalletProvider } from '@/contexts/WalletContext';
import { Web3OnboardingProvider } from '@/contexts/Web3OnboardingContext';
@@ -43,24 +43,6 @@ export default function RootLayout({
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Outfit:wght@500;700;900&display=swap"
rel="stylesheet"
/>
-
diff --git a/frontend/src/components/playground/CodeEditor.tsx b/frontend/src/components/playground/CodeEditor.tsx
index 137e6f80..6d2b9997 100644
--- a/frontend/src/components/playground/CodeEditor.tsx
+++ b/frontend/src/components/playground/CodeEditor.tsx
@@ -7,6 +7,7 @@ import { extendRustLanguage } from '@/lib/editor/SorobanLanguage';
import type { SorobanLinterInstance } from '@/lib/editor/SorobanLinter';
import { createSorobanLinter } from '@/lib/editor/SorobanLinter';
import { THEME_COLORS } from '@/lib/theme/themeColors';
+import { useThemeMode } from '@/hooks/useThemeMode';
import type { OnMount } from '@monaco-editor/react';
import { ChevronRight, FileText } from 'lucide-react';
import type { editor } from 'monaco-editor';
@@ -127,6 +128,55 @@ export const CodeEditor: React.FC = ({
const linterRef = useRef(null);
const compileActionRef = useRef<{ dispose: () => void } | null>(null);
const prefersReducedMotion = useMemo(() => getPrefersReducedMotion(), []);
+
+ const { theme, colors } = useThemeMode();
+
+ useEffect(() => {
+ if (!editorInstance) return;
+ const monaco = (window as any).monaco;
+ if (!monaco) return;
+
+ const baseTheme = theme === 'light' ? 'vs' : 'hc-black';
+ monaco.editor.defineTheme('web3-lab-premium', {
+ base: baseTheme,
+ inherit: true,
+ rules: [
+ { token: 'comment', foreground: '636e7b', fontStyle: 'italic' },
+ { token: 'keyword', foreground: 'ff7b72', fontStyle: 'bold' },
+ { token: 'string', foreground: 'a5d6ff' },
+ { token: 'type', foreground: '79c0ff' },
+ { token: 'function', foreground: 'd2a8ff' },
+ {
+ token: 'sorobanMacro',
+ foreground: colors.interactive.primary.replace('#', ''),
+ fontStyle: 'bold',
+ },
+ {
+ token: 'sorobanType',
+ foreground: colors.status.info.replace('#', ''),
+ fontStyle: 'bold',
+ },
+ {
+ token: 'sorobanModule',
+ foreground: colors.status.warning.replace('#', ''),
+ },
+ {
+ token: 'moduleSeparator',
+ foreground: colors.text.muted.replace('#', ''),
+ },
+ ],
+ colors: {
+ 'editor.background': colors.background.primary,
+ 'editor.lineHighlightBackground': theme === 'light' ? '#00000005' : '#ffffff05',
+ 'editorCursor.foreground': colors.status.error,
+ 'editor.selectionBackground': `${colors.status.error}22`,
+ 'editorLineNumber.foreground': colors.text.muted,
+ 'editorLineNumber.activeForeground': colors.text.secondary,
+ },
+ });
+ monaco.editor.setTheme('web3-lab-premium');
+ }, [editorInstance, theme, colors]);
+
const collaboratorLabel = useMemo(() => {
if (collaborationProvider) {
@@ -168,9 +218,9 @@ export const CodeEditor: React.FC = ({
registerSorobanCompletion(monaco);
registerSorobanHover(monaco);
- const colors = THEME_COLORS.dark;
+ const baseTheme = theme === 'light' ? 'vs' : 'hc-black';
monaco.editor.defineTheme('web3-lab-premium', {
- base: 'vs-dark',
+ base: baseTheme,
inherit: true,
rules: [
{ token: 'comment', foreground: '636e7b', fontStyle: 'italic' },
@@ -199,7 +249,7 @@ export const CodeEditor: React.FC = ({
],
colors: {
'editor.background': colors.background.primary,
- 'editor.lineHighlightBackground': '#ffffff05',
+ 'editor.lineHighlightBackground': theme === 'light' ? '#00000005' : '#ffffff05',
'editorCursor.foreground': colors.status.error,
'editor.selectionBackground': `${colors.status.error}22`,
'editorLineNumber.foreground': colors.text.muted,
@@ -208,6 +258,7 @@ export const CodeEditor: React.FC = ({
});
monaco.editor.setTheme('web3-lab-premium');
+
const model = mountedEditor.getModel();
if (model) {
model.updateOptions({ tabSize: settings.tabSize, insertSpaces: true });
diff --git a/frontend/src/components/theme/ThemeToggle.tsx b/frontend/src/components/theme/ThemeToggle.tsx
index 63c03319..25a738dc 100644
--- a/frontend/src/components/theme/ThemeToggle.tsx
+++ b/frontend/src/components/theme/ThemeToggle.tsx
@@ -102,10 +102,10 @@ export const ThemeToggle: React.FC = ({
whileTap={{ scale: 0.95 }}
onClick={toggleTheme}
className={`flex items-center gap-2 rounded-lg bg-gray-900 px-3 py-2 text-gray-400 transition-colors hover:bg-gray-800 hover:text-gray-300 focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 focus:ring-offset-black focus:outline-none dark:bg-gray-100 dark:text-gray-600 dark:hover:bg-gray-200 dark:hover:text-gray-700 dark:focus:ring-offset-white ${className} `}
- aria-label={`Switch to ${isDark ? 'light' : 'dark'} mode`}
+ aria-label={`Switch theme`}
>
- {showLabel && {isDark ? 'Dark' : 'Light'}}
+ {showLabel && {theme.charAt(0).toUpperCase() + theme.slice(1)}}
);
}
@@ -119,7 +119,7 @@ export const ThemeToggle: React.FC = ({
whileTap={{ scale: 0.9 }}
onClick={toggleTheme}
className={`relative flex items-center justify-center rounded-lg ${sizeMap[size]} bg-gray-900 text-gray-400 transition-colors hover:bg-gray-800 hover:text-gray-300 focus:ring-2 focus:ring-purple-500 focus:ring-offset-2 focus:ring-offset-black focus:outline-none dark:bg-gray-100 dark:text-gray-600 dark:hover:bg-gray-200 dark:hover:text-gray-700 dark:focus:ring-offset-white ${className} `}
- aria-label={`Switch to ${isDark ? 'light' : 'dark'} mode`}
+ aria-label={`Switch theme`}
type="button"
>
@@ -213,7 +213,7 @@ export const ThemeToggleCompact: React.FC<{ className?: string }> = ({ className
whileTap={{ scale: 0.9 }}
onClick={toggleTheme}
className={`rounded-md p-1.5 text-gray-400 transition-colors hover:bg-gray-900 hover:text-gray-300 focus:ring-2 focus:ring-purple-500 focus:outline-none dark:text-gray-300 dark:hover:bg-gray-800 dark:hover:text-white ${className} `}
- aria-label={`Switch to ${isDark ? 'light' : 'dark'} mode`}
+ aria-label={`Switch theme`}
>
{
- const newTheme = isDark ? 'light' : 'dark';
+ let newTheme: 'light' | 'dark' | 'oled' = 'dark';
+ if (currentTheme === 'light') newTheme = 'dark';
+ else if (currentTheme === 'dark') newTheme = 'oled';
+ else newTheme = 'light';
setTheme(newTheme);
setStoredTheme(newTheme);
};
@@ -94,20 +97,20 @@ export function useThemeMode() {
* - 'dark': Force dark mode
* - 'system': Use OS preference
*/
- const setThemeMode = (newTheme: 'light' | 'dark' | 'system') => {
+ const setThemeMode = (newTheme: 'light' | 'dark' | 'oled' | 'system') => {
setTheme(newTheme);
setStoredTheme(newTheme);
};
// Get current theme colors
- const colors = currentTheme === 'light' ? THEME_COLORS.light : THEME_COLORS.dark;
+ const colors = currentTheme === 'light' ? THEME_COLORS.light : currentTheme === 'oled' ? THEME_COLORS.oled : THEME_COLORS.dark;
// Get chart colors optimized for D3 visualizations
// These colors are chosen for good contrast and visual distinction
- const chartColors = getChartColors(currentTheme as 'light' | 'dark');
+ const chartColors = getChartColors((currentTheme === 'light' ? 'light' : currentTheme === 'oled' ? 'oled' : 'dark') as any);
return {
- theme: currentTheme as 'light' | 'dark',
+ theme: currentTheme as 'light' | 'dark' | 'oled',
isDark,
isLight,
mounted, // Use this to conditionally render to prevent FOUC
diff --git a/frontend/src/lib/theme/providers.tsx b/frontend/src/lib/theme/providers.tsx
index 88906a0c..86c7b984 100644
--- a/frontend/src/lib/theme/providers.tsx
+++ b/frontend/src/lib/theme/providers.tsx
@@ -4,17 +4,6 @@ import { ThemeProvider } from 'next-themes';
import { ReactNode, useEffect, useState } from 'react';
export function Providers({ children }: { children: ReactNode }) {
- const [mounted, setMounted] = useState(false);
-
- // Prevent FOUC by waiting for hydration
- useEffect(() => {
- setMounted(true);
- }, []);
-
- if (!mounted) {
- return <>{children}>;
- }
-
return (
= {};
diff --git a/frontend/src/middleware.ts b/frontend/src/middleware.ts
index ba799381..6c121df6 100644
--- a/frontend/src/middleware.ts
+++ b/frontend/src/middleware.ts
@@ -2,9 +2,167 @@ import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
const NONCE_HEADER = 'x-nonce';
-const CSP_REPORT_HEADER = 'Content-Security-Policy-Report-Only';
+const ADMIN_ROUTE_PREFIX = '/admin';
+const LOGIN_ROUTE = '/login';
-export function middleware(request: NextRequest) {
+// Security settings
+const ALLOWED_ADMIN_IPS = (process.env.ALLOWED_ADMIN_IPS || '').split(',').filter(Boolean);
+const ALLOWED_ADMIN_COUNTRIES = (process.env.ALLOWED_ADMIN_COUNTRIES || '').split(',').filter(Boolean);
+const JWT_SECRET = process.env.JWT_SECRET || 'fallback-secret-for-dev';
+
+// Rate Limiting (In-memory simple rate limit for edge, resets per worker)
+const rateLimitMap = new Map();
+const MAX_REQUESTS = 100;
+const WINDOW_MS = 60 * 1000;
+
+function checkRateLimit(ip: string): boolean {
+ const now = Date.now();
+ const record = rateLimitMap.get(ip);
+ if (!record || now > record.resetTime) {
+ rateLimitMap.set(ip, { count: 1, resetTime: now + WINDOW_MS });
+ return true;
+ }
+ if (record.count >= MAX_REQUESTS) {
+ return false;
+ }
+ record.count += 1;
+ return true;
+}
+
+// Bot Detection
+const BOT_USER_AGENTS = ['bot', 'crawler', 'spider', 'headless', 'scraper'];
+function isBot(userAgent: string): boolean {
+ const ua = userAgent.toLowerCase();
+ return BOT_USER_AGENTS.some((bot) => ua.includes(bot));
+}
+
+// Web Crypto JWT Validation
+function base64UrlDecode(str: string): string {
+ let base64 = str.replace(/-/g, '+').replace(/_/g, '/');
+ const pad = base64.length % 4;
+ if (pad) {
+ base64 += '='.repeat(4 - pad);
+ }
+ return atob(base64);
+}
+
+function str2ab(str: string): ArrayBuffer {
+ const buf = new ArrayBuffer(str.length);
+ const bufView = new Uint8Array(buf);
+ for (let i = 0, strLen = str.length; i < strLen; i++) {
+ bufView[i] = str.charCodeAt(i);
+ }
+ return buf;
+}
+
+async function verifyJWT(token: string, secret: string) {
+ try {
+ const parts = token.split('.');
+ if (parts.length !== 3) return null;
+
+ const [headerB64, payloadB64, signatureB64] = parts;
+ const header = JSON.parse(base64UrlDecode(headerB64));
+ const payload = JSON.parse(base64UrlDecode(payloadB64));
+
+ if (header.alg !== 'HS256') return null;
+ if (payload.exp && Date.now() >= payload.exp * 1000) return null;
+
+ const enc = new TextEncoder();
+ const key = await crypto.subtle.importKey(
+ 'raw',
+ enc.encode(secret),
+ { name: 'HMAC', hash: 'SHA-256' },
+ false,
+ ['verify']
+ );
+
+ const signature = str2ab(base64UrlDecode(signatureB64));
+ const data = enc.encode(`${headerB64}.${payloadB64}`);
+
+ const isValid = await crypto.subtle.verify('HMAC', key, signature, data);
+ return isValid ? payload : null;
+ } catch {
+ return null;
+ }
+}
+
+function isValidRedirectUrl(url: string, requestUrl: URL): boolean {
+ try {
+ const parsed = new URL(url, requestUrl.origin);
+ return parsed.origin === requestUrl.origin;
+ } catch {
+ return false;
+ }
+}
+
+export async function middleware(request: NextRequest) {
+ const ip = request.ip || request.headers.get('x-forwarded-for') || '127.0.0.1';
+ const userAgent = request.headers.get('user-agent') || '';
+
+ // 1. Bot detection
+ if (isBot(userAgent)) {
+ return new NextResponse('Bot detected', { status: 403 });
+ }
+
+ // 2. Rate limiting
+ if (!checkRateLimit(ip)) {
+ return new NextResponse('Too many requests', { status: 429 });
+ }
+
+ // 3. Admin routes protection
+ if (request.nextUrl.pathname.startsWith(ADMIN_ROUTE_PREFIX)) {
+ const country = request.geo?.country;
+
+ // Geo-fencing
+ if (ALLOWED_ADMIN_COUNTRIES.length > 0 && country && !ALLOWED_ADMIN_COUNTRIES.includes(country)) {
+ return new NextResponse('Access denied from your region', { status: 403 });
+ }
+
+ // IP Allowlisting
+ if (ALLOWED_ADMIN_IPS.length > 0 && !ALLOWED_ADMIN_IPS.includes(ip) && ip !== '127.0.0.1' && ip !== '::1') {
+ return new NextResponse('IP not allowed', { status: 403 });
+ }
+
+ // JWT and Session Validation
+ const authHeader = request.headers.get('authorization');
+ const token = authHeader?.startsWith('Bearer ')
+ ? authHeader.substring(7)
+ : request.cookies.get('admin_token')?.value;
+
+ let unauthorized = true;
+
+ if (token) {
+ const payload = await verifyJWT(token, JWT_SECRET);
+ if (payload && payload.role === 'admin') {
+ const sessionNonce = request.cookies.get('session_nonce')?.value;
+ // Validate session nonce if present in token
+ if (!payload.nonce || payload.nonce === sessionNonce) {
+ unauthorized = false;
+ }
+ }
+ }
+
+ if (unauthorized) {
+ const loginUrl = new URL(LOGIN_ROUTE, request.url);
+ const returnPath = request.nextUrl.pathname + request.nextUrl.search;
+
+ if (isValidRedirectUrl(returnPath, request.nextUrl)) {
+ loginUrl.searchParams.set('returnTo', returnPath);
+ }
+ return NextResponse.redirect(loginUrl);
+ }
+ }
+
+ // 4. Open Redirect protection on Login
+ if (request.nextUrl.pathname === LOGIN_ROUTE) {
+ const returnTo = request.nextUrl.searchParams.get('returnTo');
+ if (returnTo && !isValidRedirectUrl(returnTo, request.nextUrl)) {
+ request.nextUrl.searchParams.delete('returnTo');
+ return NextResponse.redirect(request.nextUrl);
+ }
+ }
+
+ // 5. Existing CSP Logic
const nonce = Buffer.from(crypto.randomUUID()).toString('base64');
const response = NextResponse.next();
response.headers.set(NONCE_HEADER, nonce);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a8da9f8a..28ba42a0 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -24,6 +24,12 @@ importers:
specifier: ^7.2.2
version: 7.2.2
devDependencies:
+ '@commitlint/cli':
+ specifier: ^19.6.1
+ version: 19.8.1(@types/node@25.6.0)(typescript@7.0.2)
+ '@commitlint/config-conventional':
+ specifier: ^19.6.0
+ version: 19.8.1
husky:
specifier: ^9.1.7
version: 9.1.7
@@ -206,6 +212,75 @@ packages:
'@bcoe/v8-coverage@0.2.3':
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
+ '@commitlint/cli@19.8.1':
+ resolution: {integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==}
+ engines: {node: '>=v18'}
+ hasBin: true
+
+ '@commitlint/config-conventional@19.8.1':
+ resolution: {integrity: sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/config-validator@19.8.1':
+ resolution: {integrity: sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/ensure@19.8.1':
+ resolution: {integrity: sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/execute-rule@19.8.1':
+ resolution: {integrity: sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/format@19.8.1':
+ resolution: {integrity: sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/is-ignored@19.8.1':
+ resolution: {integrity: sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/lint@19.8.1':
+ resolution: {integrity: sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/load@19.8.1':
+ resolution: {integrity: sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/message@19.8.1':
+ resolution: {integrity: sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/parse@19.8.1':
+ resolution: {integrity: sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/read@19.8.1':
+ resolution: {integrity: sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/resolve-extends@19.8.1':
+ resolution: {integrity: sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/rules@19.8.1':
+ resolution: {integrity: sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/to-lines@19.8.1':
+ resolution: {integrity: sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/top-level@19.8.1':
+ resolution: {integrity: sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==}
+ engines: {node: '>=v18'}
+
+ '@commitlint/types@19.8.1':
+ resolution: {integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==}
+ engines: {node: '>=v18'}
+
'@emnapi/core@1.10.0':
resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
@@ -371,6 +446,9 @@ packages:
'@types/babel__traverse@7.28.0':
resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+ '@types/conventional-commits-parser@5.0.2':
+ resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==}
+
'@types/istanbul-lib-coverage@2.0.6':
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
@@ -392,6 +470,126 @@ packages:
'@types/yargs@17.0.35':
resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==}
+ '@typescript/typescript-aix-ppc64@7.0.2':
+ resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@typescript/typescript-darwin-arm64@7.0.2':
+ resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@typescript/typescript-darwin-x64@7.0.2':
+ resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@typescript/typescript-freebsd-arm64@7.0.2':
+ resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@typescript/typescript-freebsd-x64@7.0.2':
+ resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@typescript/typescript-linux-arm64@7.0.2':
+ resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@typescript/typescript-linux-arm@7.0.2':
+ resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm]
+ os: [linux]
+
+ '@typescript/typescript-linux-loong64@7.0.2':
+ resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@typescript/typescript-linux-mips64el@7.0.2':
+ resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@typescript/typescript-linux-ppc64@7.0.2':
+ resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@typescript/typescript-linux-riscv64@7.0.2':
+ resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@typescript/typescript-linux-s390x@7.0.2':
+ resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==}
+ engines: {node: '>=16.20.0'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@typescript/typescript-linux-x64@7.0.2':
+ resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@typescript/typescript-netbsd-arm64@7.0.2':
+ resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@typescript/typescript-netbsd-x64@7.0.2':
+ resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@typescript/typescript-openbsd-arm64@7.0.2':
+ resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@typescript/typescript-openbsd-x64@7.0.2':
+ resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@typescript/typescript-sunos-x64@7.0.2':
+ resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@typescript/typescript-win32-arm64@7.0.2':
+ resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@typescript/typescript-win32-x64@7.0.2':
+ resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [win32]
+
'@ungap/structured-clone@1.3.3':
resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==}
@@ -515,10 +713,17 @@ packages:
cpu: [x64]
os: [win32]
+ JSONStream@1.3.5:
+ resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+ hasBin: true
+
accepts@2.0.0:
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
engines: {node: '>= 0.6'}
+ ajv@8.20.0:
+ resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==}
+
ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
@@ -554,6 +759,12 @@ packages:
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ array-ify@1.0.0:
+ resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
+
asap@2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
@@ -701,6 +912,9 @@ packages:
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
engines: {node: '>=18'}
+ compare-func@2.0.0:
+ resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
+
component-emitter@1.3.1:
resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==}
@@ -719,6 +933,19 @@ packages:
resolution: {integrity: sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==}
engines: {node: '>=18'}
+ conventional-changelog-angular@7.0.0:
+ resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
+ engines: {node: '>=16'}
+
+ conventional-changelog-conventionalcommits@7.0.2:
+ resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==}
+ engines: {node: '>=16'}
+
+ conventional-commits-parser@5.0.0:
+ resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==}
+ engines: {node: '>=16'}
+ hasBin: true
+
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@@ -737,10 +964,31 @@ packages:
resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==}
engines: {node: '>= 0.10'}
+ cosmiconfig-typescript-loader@6.3.0:
+ resolution: {integrity: sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==}
+ engines: {node: '>=v18'}
+ peerDependencies:
+ '@types/node': '*'
+ cosmiconfig: '>=9'
+ typescript: '>=5'
+
+ cosmiconfig@9.0.2:
+ resolution: {integrity: sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
+ dargs@8.1.0:
+ resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
+ engines: {node: '>=12'}
+
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
@@ -777,6 +1025,10 @@ packages:
dezalgo@1.0.4:
resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
+ dot-prop@5.3.0:
+ resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
+ engines: {node: '>=8'}
+
dotenv@17.4.2:
resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==}
engines: {node: '>=12'}
@@ -811,6 +1063,10 @@ packages:
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
engines: {node: '>= 0.8'}
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+
environment@1.1.0:
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
engines: {node: '>=18'}
@@ -877,12 +1133,18 @@ packages:
resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==}
engines: {node: '>= 18'}
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
fast-safe-stringify@2.1.1:
resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
+ fast-uri@3.1.6:
+ resolution: {integrity: sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q==}
+
fb-watchman@2.0.2:
resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
@@ -898,6 +1160,10 @@ packages:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
+ find-up@7.0.0:
+ resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
+ engines: {node: '>=18'}
+
foreground-child@3.3.1:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
@@ -961,6 +1227,12 @@ packages:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
+ git-raw-commits@4.0.0:
+ resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==}
+ engines: {node: '>=16'}
+ deprecated: Deprecated and no longer maintained. Use @conventional-changelog/git-client instead.
+ hasBin: true
+
glob@10.5.0:
resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
@@ -970,6 +1242,10 @@ packages:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
+ global-directory@4.0.1:
+ resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
+ engines: {node: '>=18'}
+
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
@@ -1017,11 +1293,18 @@ packages:
resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==}
engines: {node: '>=0.10.0'}
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
+
import-local@3.2.0:
resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
engines: {node: '>=8'}
hasBin: true
+ import-meta-resolve@4.2.0:
+ resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==}
+
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
@@ -1033,6 +1316,10 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ ini@4.1.1:
+ resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
@@ -1060,6 +1347,10 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
+ is-obj@2.0.0:
+ resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+ engines: {node: '>=8'}
+
is-promise@4.0.0:
resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
@@ -1071,6 +1362,10 @@ packages:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ is-text-path@2.0.0:
+ resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==}
+ engines: {node: '>=8'}
+
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
@@ -1225,6 +1520,10 @@ packages:
node-notifier:
optional: true
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -1232,6 +1531,10 @@ packages:
resolution: {integrity: sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag==}
hasBin: true
+ js-yaml@4.3.2:
+ resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==}
+ hasBin: true
+
jsesc@3.1.0:
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
engines: {node: '>=6'}
@@ -1240,11 +1543,18 @@ packages:
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
+ jsonparse@1.3.1:
+ resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+ engines: {'0': node >= 0.2.0}
+
leven@3.1.0:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
engines: {node: '>=6'}
@@ -1269,6 +1579,37 @@ packages:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
+ locate-path@7.2.0:
+ resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ lodash.camelcase@4.3.0:
+ resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+
+ lodash.isplainobject@4.0.6:
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+
+ lodash.kebabcase@4.1.1:
+ resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash.mergewith@4.6.2:
+ resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
+
+ lodash.snakecase@4.1.1:
+ resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==}
+
+ lodash.startcase@4.4.0:
+ resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+
+ lodash.uniq@4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+
+ lodash.upperfirst@4.3.1:
+ resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==}
+
log-update@6.1.0:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'}
@@ -1294,6 +1635,10 @@ packages:
resolution: {integrity: sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==}
engines: {node: '>= 0.8'}
+ meow@12.1.1:
+ resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
+ engines: {node: '>=16.10'}
+
merge-descriptors@2.0.0:
resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
engines: {node: '>=18'}
@@ -1349,6 +1694,9 @@ packages:
resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
engines: {node: '>=16 || 14 >=14.17'}
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
minipass@7.1.3:
resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -1422,10 +1770,18 @@ packages:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
+ p-limit@4.0.0:
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
+ p-locate@6.0.0:
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
@@ -1433,6 +1789,10 @@ packages:
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
@@ -1445,6 +1805,10 @@ packages:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
+ path-exists@5.0.0:
+ resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
path-is-absolute@1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
@@ -1521,10 +1885,18 @@ packages:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
resolve-cwd@3.0.0:
resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
engines: {node: '>=8'}
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
resolve-from@5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
@@ -1613,6 +1985,10 @@ packages:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
@@ -1692,6 +2068,17 @@ packages:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
engines: {node: '>=8'}
+ text-extensions@2.4.0:
+ resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==}
+ engines: {node: '>=8'}
+
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+ tinyexec@1.3.0:
+ resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==}
+ engines: {node: '>=18'}
+
tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
@@ -1718,9 +2105,18 @@ packages:
resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==}
engines: {node: '>= 18'}
+ typescript@7.0.2:
+ resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==}
+ engines: {node: '>=16.20.0'}
+ hasBin: true
+
undici-types@7.19.2:
resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}
+ unicorn-magic@0.1.0:
+ resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
+ engines: {node: '>=18'}
+
unpipe@1.0.0:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
@@ -1793,6 +2189,10 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
+ yocto-queue@1.2.2:
+ resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
+ engines: {node: '>=12.20'}
+
snapshots:
'@babel/code-frame@7.29.0':
@@ -1992,6 +2392,116 @@ snapshots:
'@bcoe/v8-coverage@0.2.3': {}
+ '@commitlint/cli@19.8.1(@types/node@25.6.0)(typescript@7.0.2)':
+ dependencies:
+ '@commitlint/format': 19.8.1
+ '@commitlint/lint': 19.8.1
+ '@commitlint/load': 19.8.1(@types/node@25.6.0)(typescript@7.0.2)
+ '@commitlint/read': 19.8.1
+ '@commitlint/types': 19.8.1
+ tinyexec: 1.3.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+
+ '@commitlint/config-conventional@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ conventional-changelog-conventionalcommits: 7.0.2
+
+ '@commitlint/config-validator@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ ajv: 8.20.0
+
+ '@commitlint/ensure@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ 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
+
+ '@commitlint/execute-rule@19.8.1': {}
+
+ '@commitlint/format@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ chalk: 5.6.2
+
+ '@commitlint/is-ignored@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ semver: 7.7.4
+
+ '@commitlint/lint@19.8.1':
+ dependencies:
+ '@commitlint/is-ignored': 19.8.1
+ '@commitlint/parse': 19.8.1
+ '@commitlint/rules': 19.8.1
+ '@commitlint/types': 19.8.1
+
+ '@commitlint/load@19.8.1(@types/node@25.6.0)(typescript@7.0.2)':
+ dependencies:
+ '@commitlint/config-validator': 19.8.1
+ '@commitlint/execute-rule': 19.8.1
+ '@commitlint/resolve-extends': 19.8.1
+ '@commitlint/types': 19.8.1
+ chalk: 5.6.2
+ cosmiconfig: 9.0.2(typescript@7.0.2)
+ cosmiconfig-typescript-loader: 6.3.0(@types/node@25.6.0)(cosmiconfig@9.0.2(typescript@7.0.2))(typescript@7.0.2)
+ lodash.isplainobject: 4.0.6
+ lodash.merge: 4.6.2
+ lodash.uniq: 4.5.0
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+
+ '@commitlint/message@19.8.1': {}
+
+ '@commitlint/parse@19.8.1':
+ dependencies:
+ '@commitlint/types': 19.8.1
+ conventional-changelog-angular: 7.0.0
+ conventional-commits-parser: 5.0.0
+
+ '@commitlint/read@19.8.1':
+ dependencies:
+ '@commitlint/top-level': 19.8.1
+ '@commitlint/types': 19.8.1
+ git-raw-commits: 4.0.0
+ minimist: 1.2.8
+ tinyexec: 1.3.0
+
+ '@commitlint/resolve-extends@19.8.1':
+ dependencies:
+ '@commitlint/config-validator': 19.8.1
+ '@commitlint/types': 19.8.1
+ global-directory: 4.0.1
+ import-meta-resolve: 4.2.0
+ lodash.mergewith: 4.6.2
+ resolve-from: 5.0.0
+
+ '@commitlint/rules@19.8.1':
+ dependencies:
+ '@commitlint/ensure': 19.8.1
+ '@commitlint/message': 19.8.1
+ '@commitlint/to-lines': 19.8.1
+ '@commitlint/types': 19.8.1
+
+ '@commitlint/to-lines@19.8.1': {}
+
+ '@commitlint/top-level@19.8.1':
+ dependencies:
+ find-up: 7.0.0
+
+ '@commitlint/types@19.8.1':
+ dependencies:
+ '@types/conventional-commits-parser': 5.0.2
+ chalk: 5.6.2
+
'@emnapi/core@1.10.0':
dependencies:
'@emnapi/wasi-threads': 1.2.1
@@ -2278,6 +2788,10 @@ snapshots:
dependencies:
'@babel/types': 7.29.8
+ '@types/conventional-commits-parser@5.0.2':
+ dependencies:
+ '@types/node': 25.6.0
+
'@types/istanbul-lib-coverage@2.0.6': {}
'@types/istanbul-lib-report@3.0.3':
@@ -2300,6 +2814,66 @@ snapshots:
dependencies:
'@types/yargs-parser': 21.0.3
+ '@typescript/typescript-aix-ppc64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-darwin-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-darwin-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-freebsd-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-freebsd-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-arm@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-loong64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-mips64el@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-ppc64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-riscv64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-s390x@7.0.2':
+ optional: true
+
+ '@typescript/typescript-linux-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-netbsd-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-netbsd-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-openbsd-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-openbsd-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-sunos-x64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-win32-arm64@7.0.2':
+ optional: true
+
+ '@typescript/typescript-win32-x64@7.0.2':
+ optional: true
+
'@ungap/structured-clone@1.3.3': {}
'@unrs/resolver-binding-android-arm-eabi@1.12.2':
@@ -2372,11 +2946,23 @@ snapshots:
'@unrs/resolver-binding-win32-x64-msvc@1.12.2':
optional: true
+ JSONStream@1.3.5:
+ dependencies:
+ jsonparse: 1.3.1
+ through: 2.3.8
+
accepts@2.0.0:
dependencies:
mime-types: 3.0.2
negotiator: 1.1.0
+ ajv@8.20.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.6
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
ansi-escapes@4.3.2:
dependencies:
type-fest: 0.21.3
@@ -2406,6 +2992,10 @@ snapshots:
dependencies:
sprintf-js: 1.0.3
+ argparse@2.0.1: {}
+
+ array-ify@1.0.0: {}
+
asap@2.0.6: {}
asynckit@0.4.0: {}
@@ -2573,6 +3163,11 @@ snapshots:
commander@13.1.0: {}
+ compare-func@2.0.0:
+ dependencies:
+ array-ify: 1.0.0
+ dot-prop: 5.3.0
+
component-emitter@1.3.1: {}
concat-map@0.0.1: {}
@@ -2583,6 +3178,21 @@ snapshots:
content-type@2.1.0: {}
+ conventional-changelog-angular@7.0.0:
+ dependencies:
+ compare-func: 2.0.0
+
+ conventional-changelog-conventionalcommits@7.0.2:
+ dependencies:
+ compare-func: 2.0.0
+
+ conventional-commits-parser@5.0.0:
+ dependencies:
+ JSONStream: 1.3.5
+ is-text-path: 2.0.0
+ meow: 12.1.1
+ split2: 4.2.0
+
convert-source-map@2.0.0: {}
cookie-signature@1.2.2: {}
@@ -2596,12 +3206,30 @@ snapshots:
object-assign: 4.1.1
vary: 1.1.2
+ cosmiconfig-typescript-loader@6.3.0(@types/node@25.6.0)(cosmiconfig@9.0.2(typescript@7.0.2))(typescript@7.0.2):
+ dependencies:
+ '@types/node': 25.6.0
+ cosmiconfig: 9.0.2(typescript@7.0.2)
+ jiti: 2.6.1
+ typescript: 7.0.2
+
+ cosmiconfig@9.0.2(typescript@7.0.2):
+ dependencies:
+ env-paths: 2.2.1
+ import-fresh: 3.3.1
+ js-yaml: 4.3.2
+ parse-json: 5.2.0
+ optionalDependencies:
+ typescript: 7.0.2
+
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
+ dargs@8.1.0: {}
+
debug@4.4.3:
dependencies:
ms: 2.1.3
@@ -2621,6 +3249,10 @@ snapshots:
asap: 2.0.6
wrappy: 1.0.2
+ dot-prop@5.3.0:
+ dependencies:
+ is-obj: 2.0.0
+
dotenv@17.4.2: {}
dunder-proto@1.0.1:
@@ -2645,6 +3277,8 @@ snapshots:
encodeurl@2.0.0: {}
+ env-paths@2.2.1: {}
+
environment@1.1.0: {}
error-ex@1.3.4:
@@ -2746,10 +3380,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ fast-deep-equal@3.1.3: {}
+
fast-json-stable-stringify@2.1.0: {}
fast-safe-stringify@2.1.1: {}
+ fast-uri@3.1.6: {}
+
fb-watchman@2.0.2:
dependencies:
bser: 2.1.1
@@ -2774,6 +3412,12 @@ snapshots:
locate-path: 5.0.0
path-exists: 4.0.0
+ find-up@7.0.0:
+ dependencies:
+ locate-path: 7.2.0
+ path-exists: 5.0.0
+ unicorn-magic: 0.1.0
+
foreground-child@3.3.1:
dependencies:
cross-spawn: 7.0.6
@@ -2834,6 +3478,12 @@ snapshots:
get-stream@8.0.1: {}
+ git-raw-commits@4.0.0:
+ dependencies:
+ dargs: 8.1.0
+ meow: 12.1.1
+ split2: 4.2.0
+
glob@10.5.0:
dependencies:
foreground-child: 3.3.1
@@ -2852,6 +3502,10 @@ snapshots:
once: 1.4.0
path-is-absolute: 1.0.1
+ global-directory@4.0.1:
+ dependencies:
+ ini: 4.1.1
+
gopd@1.2.0: {}
graceful-fs@4.2.11: {}
@@ -2888,11 +3542,18 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
import-local@3.2.0:
dependencies:
pkg-dir: 4.2.0
resolve-cwd: 3.0.0
+ import-meta-resolve@4.2.0: {}
+
imurmurhash@0.1.4: {}
inflight@1.0.6:
@@ -2902,6 +3563,8 @@ snapshots:
inherits@2.0.4: {}
+ ini@4.1.1: {}
+
ipaddr.js@1.9.1: {}
is-arrayish@0.2.1: {}
@@ -2918,12 +3581,18 @@ snapshots:
is-number@7.0.0: {}
+ is-obj@2.0.0: {}
+
is-promise@4.0.0: {}
is-stream@2.0.1: {}
is-stream@3.0.0: {}
+ is-text-path@2.0.0:
+ dependencies:
+ text-extensions: 2.4.0
+
isexe@2.0.0: {}
istanbul-lib-coverage@3.2.2: {}
@@ -3274,6 +3943,8 @@ snapshots:
- supports-color
- ts-node
+ jiti@2.6.1: {}
+
js-tokens@4.0.0: {}
js-yaml@3.15.1:
@@ -3281,12 +3952,20 @@ snapshots:
argparse: 1.0.10
esprima: 4.0.1
+ js-yaml@4.3.2:
+ dependencies:
+ argparse: 2.0.1
+
jsesc@3.1.0: {}
json-parse-even-better-errors@2.3.1: {}
+ json-schema-traverse@1.0.0: {}
+
json5@2.2.3: {}
+ jsonparse@1.3.1: {}
+
leven@3.1.0: {}
lilconfig@3.1.3: {}
@@ -3321,6 +4000,28 @@ snapshots:
dependencies:
p-locate: 4.1.0
+ locate-path@7.2.0:
+ dependencies:
+ p-locate: 6.0.0
+
+ lodash.camelcase@4.3.0: {}
+
+ lodash.isplainobject@4.0.6: {}
+
+ lodash.kebabcase@4.1.1: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash.mergewith@4.6.2: {}
+
+ lodash.snakecase@4.1.1: {}
+
+ lodash.startcase@4.4.0: {}
+
+ lodash.uniq@4.5.0: {}
+
+ lodash.upperfirst@4.3.1: {}
+
log-update@6.1.0:
dependencies:
ansi-escapes: 7.3.0
@@ -3347,6 +4048,8 @@ snapshots:
media-typer@1.1.1: {}
+ meow@12.1.1: {}
+
merge-descriptors@2.0.0: {}
merge-stream@2.0.0: {}
@@ -3386,6 +4089,8 @@ snapshots:
dependencies:
brace-expansion: 2.1.4
+ minimist@1.2.8: {}
+
minipass@7.1.3: {}
ms@2.1.3: {}
@@ -3444,17 +4149,29 @@ snapshots:
dependencies:
yocto-queue: 0.1.0
+ p-limit@4.0.0:
+ dependencies:
+ yocto-queue: 1.2.2
+
p-locate@4.1.0:
dependencies:
p-limit: 2.3.0
+ p-locate@6.0.0:
+ dependencies:
+ p-limit: 4.0.0
+
p-try@2.2.0: {}
package-json-from-dist@1.0.1: {}
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
parse-json@5.2.0:
dependencies:
- '@babel/code-frame': 7.29.0
+ '@babel/code-frame': 7.29.7
error-ex: 1.3.4
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
@@ -3463,6 +4180,8 @@ snapshots:
path-exists@4.0.0: {}
+ path-exists@5.0.0: {}
+
path-is-absolute@1.0.1: {}
path-key@3.1.1: {}
@@ -3524,10 +4243,14 @@ snapshots:
require-directory@2.1.1: {}
+ require-from-string@2.0.2: {}
+
resolve-cwd@3.0.0:
dependencies:
resolve-from: 5.0.0
+ resolve-from@4.0.0: {}
+
resolve-from@5.0.0: {}
restore-cursor@5.1.0:
@@ -3637,6 +4360,8 @@ snapshots:
source-map@0.6.1: {}
+ split2@4.2.0: {}
+
sprintf-js@1.0.3: {}
stack-utils@2.0.6:
@@ -3726,6 +4451,12 @@ snapshots:
glob: 7.2.3
minimatch: 3.1.5
+ text-extensions@2.4.0: {}
+
+ through@2.3.8: {}
+
+ tinyexec@1.3.0: {}
+
tmpl@1.0.5: {}
to-regex-range@5.0.1:
@@ -3747,8 +4478,33 @@ snapshots:
media-typer: 1.1.1
mime-types: 3.0.2
+ typescript@7.0.2:
+ optionalDependencies:
+ '@typescript/typescript-aix-ppc64': 7.0.2
+ '@typescript/typescript-darwin-arm64': 7.0.2
+ '@typescript/typescript-darwin-x64': 7.0.2
+ '@typescript/typescript-freebsd-arm64': 7.0.2
+ '@typescript/typescript-freebsd-x64': 7.0.2
+ '@typescript/typescript-linux-arm': 7.0.2
+ '@typescript/typescript-linux-arm64': 7.0.2
+ '@typescript/typescript-linux-loong64': 7.0.2
+ '@typescript/typescript-linux-mips64el': 7.0.2
+ '@typescript/typescript-linux-ppc64': 7.0.2
+ '@typescript/typescript-linux-riscv64': 7.0.2
+ '@typescript/typescript-linux-s390x': 7.0.2
+ '@typescript/typescript-linux-x64': 7.0.2
+ '@typescript/typescript-netbsd-arm64': 7.0.2
+ '@typescript/typescript-netbsd-x64': 7.0.2
+ '@typescript/typescript-openbsd-arm64': 7.0.2
+ '@typescript/typescript-openbsd-x64': 7.0.2
+ '@typescript/typescript-sunos-x64': 7.0.2
+ '@typescript/typescript-win32-arm64': 7.0.2
+ '@typescript/typescript-win32-x64': 7.0.2
+
undici-types@7.19.2: {}
+ unicorn-magic@0.1.0: {}
+
unpipe@1.0.0: {}
unrs-resolver@1.12.2:
@@ -3844,3 +4600,5 @@ snapshots:
yargs-parser: 21.1.1
yocto-queue@0.1.0: {}
+
+ yocto-queue@1.2.2: {}