From 061e63a7b054099644e2cb8511fdf92589e69b60 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Wed, 9 Apr 2025 22:24:22 -0700 Subject: [PATCH 01/31] Enhance Raynab extension with new features and improvements - Updated "Unreviewed" title for consistency. - Added "Add Transaction" tool to facilitate new YNAB transactions using AI. - Implemented popToRoot functionality in BudgetList for better navigation. - Enhanced TransactionCreateForm to accept launch context properties for category and account IDs. - Improved OpenInYnabAction to simplify the action button. - Refactored transaction creation logic to include transaction details and loading states. - Removed unused groupBy utility file. These changes aim to improve user experience and streamline transaction management in the Raynab extension. --- extensions/raynab/package.json | 9 +- extensions/raynab/src/activeBudget.tsx | 3 +- .../src/components/accounts/accountView.tsx | 2 +- .../components/actions/openInYnabAction.tsx | 11 +- .../transactions/transactionCreateForm.tsx | 185 ++++++++-------- .../raynab/src/hooks/useLaunchContext.ts | 5 + extensions/raynab/src/lib/utils/groupBy.ts | 0 .../raynab/src/tools/add-transaction.ts | 202 ++++++++++++++++++ extensions/raynab/src/transaction.tsx | 7 +- 9 files changed, 327 insertions(+), 97 deletions(-) create mode 100644 extensions/raynab/src/hooks/useLaunchContext.ts delete mode 100644 extensions/raynab/src/lib/utils/groupBy.ts create mode 100644 extensions/raynab/src/tools/add-transaction.ts diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index b2cd6ef1629..797592a8ad3 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -55,13 +55,20 @@ }, { "name": "unreviewed", - "title": "Unreviewed transactions", + "title": "Unreviewed Transactions", "subtitle": "YNAB", "description": "Easily track unapproved or uncategorized transactions.", "mode": "menu-bar", "interval": "2h" } ], + "tools": [ + { + "name": "add-transaction", + "title": "Add Transaction", + "description": "Adds a new YNAB transaction using AI" + } + ], "keywords": [ "ynab", "budget" diff --git a/extensions/raynab/src/activeBudget.tsx b/extensions/raynab/src/activeBudget.tsx index b9da97d5fd1..050ca26b4b8 100644 --- a/extensions/raynab/src/activeBudget.tsx +++ b/extensions/raynab/src/activeBudget.tsx @@ -1,4 +1,4 @@ -import { Icon, List, ActionPanel, Action, Color, showToast } from '@raycast/api'; +import { Icon, List, ActionPanel, Action, Color, showToast, popToRoot } from '@raycast/api'; import { BudgetSummary, CurrencyFormat } from '@srcTypes'; import { useBudgets } from '@hooks/useBudgets'; @@ -32,6 +32,7 @@ function BudgetList() { message: 'It will be used across all commands in Raynab.', }); } + popToRoot(); }; return ( diff --git a/extensions/raynab/src/components/accounts/accountView.tsx b/extensions/raynab/src/components/accounts/accountView.tsx index b7fe6f6421e..74fb291ca89 100644 --- a/extensions/raynab/src/components/accounts/accountView.tsx +++ b/extensions/raynab/src/components/accounts/accountView.tsx @@ -4,7 +4,7 @@ import { TransactionView } from '@components/transactions/transactionView'; import { Shortcuts } from '@constants'; import { useAccounts } from '@hooks/useAccounts'; import { formatToReadableAmount } from '@lib/utils'; -import { Action, ActionPanel, Color, Icon, List } from '@raycast/api'; +import { Action, ActionPanel, Color, Icon, List, showToast, Toast } from '@raycast/api'; import { useLocalStorage } from '@raycast/utils'; import { CurrencyFormat } from '@srcTypes'; diff --git a/extensions/raynab/src/components/actions/openInYnabAction.tsx b/extensions/raynab/src/components/actions/openInYnabAction.tsx index ca59ee18bbf..f41987cb208 100644 --- a/extensions/raynab/src/components/actions/openInYnabAction.tsx +++ b/extensions/raynab/src/components/actions/openInYnabAction.tsx @@ -1,6 +1,7 @@ import { Action } from '@raycast/api'; -import { Shortcuts, URLs } from '@constants'; +import { URLs } from '@constants'; import { useLocalStorage } from '@raycast/utils'; +import { Icon } from '@raycast/api'; interface OpenInYnabActionProps { accounts?: boolean; @@ -21,11 +22,5 @@ export function OpenInYnabAction(props: OpenInYnabActionProps) { return budgetPath; }; - return ( - - ); + return ; } diff --git a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx index 6d2a6662e17..996efb8c3e5 100644 --- a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx @@ -11,7 +11,7 @@ import { captureException, } from '@raycast/api'; import { FormValidation, useForm, useLocalStorage } from '@raycast/utils'; -import { useMemo, useState } from 'react'; +import { useMemo, useState, useEffect } from 'react'; import { createTransaction } from '@lib/api'; import { @@ -43,52 +43,110 @@ interface FormValues { flag_color?: string; categoryList?: string[]; cleared: boolean; + approved: boolean; subtransactions?: SaveSubTransactionWithReadableAmounts[]; } -export function TransactionCreateForm({ categoryId, accountId }: { categoryId?: string; accountId?: string }) { - const { value: activeBudgetCurrency } = useLocalStorage('activeBudgetCurrency', null); - const { value: activeBudgetId = '' } = useLocalStorage('activeBudgetId', ''); +interface TransactionCreateFormProps { + categoryId?: string; + accountId?: string; + transaction?: { + account_id: string; + amount: number; + payee_name: string; + payee_id: string; + memo?: string; + flag_color?: string; + date?: string; + cleared?: string; + approved?: boolean; + }; +} +export function TransactionCreateForm({ categoryId, accountId, transaction }: TransactionCreateFormProps) { + // 1. All hooks must be called unconditionally at the top + const { value: activeBudgetId = '', isLoading: isLoadingBudgetId } = useLocalStorage('activeBudgetId', ''); + const { value: activeBudgetCurrency } = useLocalStorage('activeBudgetCurrency', null); const { value: timeline } = useLocalStorage('timeline', 'month'); - const { mutate } = useTransactions(activeBudgetId, timeline); + // Data fetching hooks - always called but may not execute if no budget ID + const { mutate } = useTransactions(activeBudgetId || '', timeline); + const { data: accounts = [], isLoading: isLoadingAccounts } = useAccounts(activeBudgetId || ''); + const { data: payees = [], isLoading: isLoadingPayees } = usePayees(activeBudgetId || ''); + const { data: categoryGroups, isLoading: isLoadingCategories } = useCategoryGroups(activeBudgetId || ''); - const { data: accounts = [], isLoading: isLoadingAccounts } = useAccounts(activeBudgetId); - const { data: payees, isLoading: isLoadingPayees } = usePayees(activeBudgetId); - const { data: categoryGroups, isLoading: isLoadingCategories } = useCategoryGroups(activeBudgetId); - const categories = categoryGroups?.flatMap((group) => group.categories).filter((c) => !c.hidden); + // Memoize loading state to prevent unnecessary re-renders + const isLoading = useMemo( + () => isLoadingBudgetId || isLoadingAccounts || isLoadingPayees || isLoadingCategories, + [isLoadingBudgetId, isLoadingAccounts, isLoadingPayees, isLoadingCategories], + ); - const [categoryList, setCategoryList] = useState([categoryId ?? '']); - const [subtransactions, setSubtransactions] = useState([]); - const [amount, setAmount] = useState('0'); + // Memoize categories to prevent unnecessary re-renders + const categories = useMemo( + () => categoryGroups?.flatMap((group) => group.categories).filter((c) => !c.hidden), + [categoryGroups], + ); + // Memoize possible accounts to prevent unnecessary re-renders + const possibleAccounts = useMemo(() => { + const filteredAccounts = accounts.filter((account) => !account.closed && !account.deleted && account.on_budget); + return filteredAccounts.map((account) => ( + + )); + }, [accounts]); + + // Memoize payee dropdown items + const payeeItems = useMemo(() => { + return payees?.map((payee) => ); + }, [payees]); + + // State hooks - always called const [isTransfer, setIsTransfer] = useState(false); const [transferFrom, setTransferTo] = useState(''); - const [selectOwnPayee, setselectOwnPayee] = useState(false); + const [selectOwnPayee, setselectOwnPayee] = useState(!!transaction?.payee_name); + const [amount, setAmount] = useState(transaction?.amount?.toString() || ''); + const [categoryList, setCategoryList] = useState([]); + const [subtransactions, setSubtransactions] = useState([]); - const possibleAccounts = useMemo(() => { - return accounts - .filter((account) => { - if (isTransfer) { - return account.transfer_payee_id !== transferFrom; - } - return true; - }) - .map((account) => ); - }, [accounts, isTransfer, transferFrom]); + // Memoize category items + const categoryItems = useMemo(() => { + return categories?.map((category, idx) => ( + + )); + }, [categories]); - const currencySymbol = activeBudgetCurrency?.currency_symbol; + // Memoize subtransaction fields + const subtransactionFields = useMemo(() => { + if (subtransactions.length === 0 || isTransfer) return null; + return subtransactions.map((transaction, idx) => ( + + )); + }, [subtransactions, isTransfer, categories]); + // Form hook - always called const { handleSubmit, itemProps } = useForm({ initialValues: { - date: new Date(), - account_id: accountId, - categoryList: categoryList, - cleared: true, - payee_name: '', - flag_color: '', - payee_id: undefined, + date: transaction?.date ? new Date(transaction.date) : new Date(), + account_id: transaction?.account_id || accountId || '', + amount: transaction?.amount?.toString() || '', + payee_name: transaction?.payee_name || '', + payee_id: transaction?.payee_id || '', + memo: transaction?.memo || '', + flag_color: transaction?.flag_color, + categoryList: [], + cleared: transaction?.cleared === 'cleared', + approved: transaction?.approved || false, }, onSubmit: async (values) => { const toast = await showToast({ style: Toast.Style.Animated, title: 'Creating Transaction' }); @@ -99,7 +157,6 @@ export function TransactionCreateForm({ categoryId, accountId }: { categoryId?: date: (values.date ?? new Date()).toISOString(), amount: formatToYnabAmount(values.amount, activeBudgetCurrency), approved: true, - // In transfers, the category id doesn't matter category_id: isTransfer ? null : values.categoryList?.[0] || undefined, payee_name: values.payee_id ? undefined : values.payee_name, cleared: values.cleared ? TransactionClearedStatus.Cleared : TransactionClearedStatus.Uncleared, @@ -107,13 +164,8 @@ export function TransactionCreateForm({ categoryId, accountId }: { categoryId?: subtransactions: undefined, }; - /** - * We need make sure the total of subtransactions is equal to the transaction. - * That validation makes sense to keep at this level - * */ if (subtransactions.length > 0) { transactionData.category_id = undefined; - /* @ts-expect-error we're not allowing updates to existing subtransactions so this doesn't matter */ transactionData.subtransactions = subtransactions.map((s) => ({ ...s, @@ -206,6 +258,11 @@ export function TransactionCreateForm({ categoryId, accountId }: { categoryId?: }, }); + // Now we can do our conditional rendering + if (isLoading) { + return
; + } + const onSubcategoryAmountChange = onSubtransactionAmountChangeHandler({ amount, currency: activeBudgetCurrency, @@ -228,15 +285,12 @@ export function TransactionCreateForm({ categoryId, accountId }: { categoryId?: ) : null} { - setselectOwnPayee((v) => !v); - }} + onAction={() => setselectOwnPayee((v) => !v)} shortcut={Shortcuts.TogglePayeeFieldType} /> } navigationTitle="Create transaction" - isLoading={isLoadingAccounts || isLoadingCategories} > {isTransfer ? ( - {accounts.map((account) => ( - - ))} + {possibleAccounts} ) : !selectOwnPayee ? ( - - {payees?.map((payee) => )} + + {payeeItems} ) : ( - {categories ? ( - categories.map((category, idx) => ( - - )) - ) : ( - - )} + {categoryItems} ) : null} - - - {subtransactions.length > 0 && !isTransfer ? ( - <> - - {subtransactions.map((transaction, idx) => ( - - ))} - - ) : null} + {subtransactionFields} diff --git a/extensions/raynab/src/hooks/useLaunchContext.ts b/extensions/raynab/src/hooks/useLaunchContext.ts new file mode 100644 index 00000000000..76b12279427 --- /dev/null +++ b/extensions/raynab/src/hooks/useLaunchContext.ts @@ -0,0 +1,5 @@ +import { LaunchProps } from '@raycast/api'; + +export function useLaunchContext() { + return (props: LaunchProps) => props.launchContext as T; +} diff --git a/extensions/raynab/src/lib/utils/groupBy.ts b/extensions/raynab/src/lib/utils/groupBy.ts deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/extensions/raynab/src/tools/add-transaction.ts b/extensions/raynab/src/tools/add-transaction.ts new file mode 100644 index 00000000000..eee7519e353 --- /dev/null +++ b/extensions/raynab/src/tools/add-transaction.ts @@ -0,0 +1,202 @@ +import { Action, Tool, LocalStorage } from '@raycast/api'; +import { launchCommand, LaunchType } from '@raycast/api'; +import { fetchAccounts, fetchBudgets } from '@lib/api'; +import { showToast, Toast } from '@raycast/api'; +import { Account, CurrencyFormat } from '@srcTypes'; +import { formatToReadableAmount } from '@lib/utils'; + +/** + * Input type for creating a new transaction + */ +type TransactionInput = { + /** + * Optional date for the transaction (ISO format) + */ + date?: string; + /** + * The name of the payee + */ + payee_name: string; + /** + * The amount of the transaction (positive for income, negative for expense) with a currency symbol + */ + amount: number; + /** + * Optional date name of the account to create the transaction in + */ + account_name?: string; + /** + * Optional memo for the transaction + */ + memo?: string; +}; + +/** + * Helper function to find a valid account by name or ID + */ +function findAccount(accounts: Account[], accountName?: string, accountId?: string): Account | undefined { + if (!accountName && !accountId) { + throw new Error('Either account_name or account_id must be provided'); + } + + // First try to find by ID if provided + if (accountId) { + const account = accounts.find((acc) => acc.id === accountId); + if (account) { + console.log('Found account by ID:', account); + return account; + } + } + + // Then try to find by name if provided + if (accountName) { + const inputNameLower = accountName.toLowerCase().trim(); + const account = accounts.find((acc) => acc.name.toLowerCase().trim().includes(inputNameLower)); + if (account) { + console.log('Found account by name:', account); + return account; + } + } + + // If we get here, no account was found + const availableAccounts = accounts.map((acc) => acc.name).join(', '); + throw new Error(`Account not found. Available accounts: ${availableAccounts}`); +} + +/** + * Helper function to format transaction data for the form + */ +function formatTransactionData(account: Account, input: TransactionInput) { + if (!account || !account.id) { + throw new Error('Invalid account provided'); + } + + if (typeof input.amount !== 'number' || isNaN(input.amount)) { + throw new Error('Amount must be a valid number'); + } + + if (!input.payee_name || typeof input.payee_name !== 'string') { + throw new Error('Payee name must be a non-empty string'); + } + + let date = input.date; + if (date) { + try { + // Validate date format + new Date(date); + } catch (e) { + throw new Error('Invalid date format. Please use YYYY-MM-DD format'); + } + } else { + date = new Date().toISOString().split('T')[0]; + } + + // Ensure amount is positive - the form will handle the sign + const amount = Math.abs(input.amount); + + return { + account_id: account.id, + amount: amount, + payee_name: input.payee_name, + memo: input.memo || '', + date: date, + }; +} + +export const confirmation: Tool.Confirmation = async (input) => { + // Get the active budget currency + const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); + const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); + if (!activeBudgetId) { + throw new Error('No active budget found'); + } + + const storedCurrency = await LocalStorage.getItem('activeBudgetCurrency'); + const activeBudgetCurrency = storedCurrency ? (JSON.parse(storedCurrency) as CurrencyFormat) : null; + + // Format the amount with currency, using absolute value + const formattedAmount = formatToReadableAmount({ + amount: Math.abs(input.amount) * 1000, // Convert to milliunits for YNAB and make positive + currency: activeBudgetCurrency ?? undefined, + includeSymbol: true, + }); + + return { + style: Action.Style.Regular, + message: `Are you sure you want to create a transaction for ${input.payee_name} with amount ${formattedAmount}?`, + info: [ + { name: 'Payee', value: input.payee_name }, + { name: 'Amount', value: formattedAmount }, + { name: 'Account', value: input.account_name || '' }, + { name: 'Memo', value: input.memo || '' }, + { name: 'Date', value: input.date || new Date().toISOString().split('T')[0] }, + ], + }; +}; + +export default async function (input: TransactionInput) { + try { + const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); + const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); + if (!activeBudgetId) + return { + success: false, + error: 'No active budget found', + debug: { activeBudgetId: null }, + }; + + const accounts = await fetchAccounts(activeBudgetId); + if (!accounts || accounts.length === 0) { + console.log('No accounts found for budget'); + throw new Error('No accounts found for the selected budget'); + } + + console.log('Finding account with name:', input.account_name); + const account = findAccount(accounts, input.account_name); + if (!account) { + console.log('Account not found'); + const validAccounts = accounts + .filter((acc) => !acc.closed && !acc.deleted && acc.on_budget) + .map((acc) => acc.name); + + throw new Error(`Account not found. Available accounts: ${validAccounts.join(', ')}`); + } + + console.log('Found account:', account); + const transaction = formatTransactionData(account, input); + console.log('Formatted transaction:', transaction); + + await launchCommand({ + name: 'transaction', + type: LaunchType.UserInitiated, + context: { + transaction: transaction, + }, + }); + + console.log('Transaction form launched successfully'); + return { success: true }; + } catch (error) { + console.error('Error in add-transaction tool:', error); + await showToast({ + style: Toast.Style.Failure, + title: 'Failed to Create Transaction', + message: error instanceof Error ? error.message : 'Unknown error occurred', + }); + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown error occurred', + debug: { + input, + error: + error instanceof Error + ? { + name: error.name, + message: error.message, + stack: error.stack, + } + : error, + }, + }; + } +} diff --git a/extensions/raynab/src/transaction.tsx b/extensions/raynab/src/transaction.tsx index e35e4cbb375..437329babd2 100644 --- a/extensions/raynab/src/transaction.tsx +++ b/extensions/raynab/src/transaction.tsx @@ -1,5 +1,8 @@ import { TransactionCreateForm } from '@components/transactions/transactionCreateForm'; +import { LaunchProps } from '@raycast/api'; -export default function Command() { - return ; +export default function Command(props: LaunchProps) { + const { categoryId, accountId, transaction } = props.launchContext || {}; + + return ; } From ddbb854cd5f542fd8e8879c8efc938fe269b45a8 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Thu, 10 Apr 2025 00:08:03 -0700 Subject: [PATCH 02/31] Add checkForActiveBudget hook to Raynab extension - Introduced a new utility hook to check for an active budget. - Displays a toast notification if no active budget is found, prompting the user to select one. - Utilizes local storage for managing the active budget ID. This addition enhances user experience by providing immediate feedback regarding budget selection. --- .../src/lib/utils/checkForActiveBudget.ts | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 extensions/raynab/src/lib/utils/checkForActiveBudget.ts diff --git a/extensions/raynab/src/lib/utils/checkForActiveBudget.ts b/extensions/raynab/src/lib/utils/checkForActiveBudget.ts new file mode 100644 index 00000000000..52babc54e84 --- /dev/null +++ b/extensions/raynab/src/lib/utils/checkForActiveBudget.ts @@ -0,0 +1,39 @@ +import { showToast, Toast, LocalStorage } from '@raycast/api'; +import { useLocalStorage } from '@raycast/utils'; + +/** + * Hook to check for active budget and show a toast if none is found + * @returns The active budget ID or null if none is found + */ +export function useActiveBudget() { + const { value: activeBudgetId, isLoading } = useLocalStorage('activeBudgetId', ''); + + if (!isLoading && !activeBudgetId) { + showToast({ + style: Toast.Style.Failure, + title: 'No Active Budget', + message: 'Please select a budget first by running the "Select Budget" command.', + }); + } + + return { activeBudgetId, isLoading }; +} + +/** + * Function to check for active budget and show a toast if none is found + * @returns The active budget ID or null if none is found + */ +export async function checkForActiveBudget() { + const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); + const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); + + if (!activeBudgetId) { + await showToast({ + style: Toast.Style.Failure, + title: 'No Active Budget', + message: 'Please select a budget first by running the "Select Budget" command.', + }); + } + + return activeBudgetId; +} From 87e1ee079c5448d450a7c6160dc42224bed8ffea Mon Sep 17 00:00:00 2001 From: omarshahine Date: Thu, 10 Apr 2025 00:09:31 -0700 Subject: [PATCH 03/31] Update Raynab extension to utilize checkForActiveBudget hook - Updated multiple components to incorporate the new checkForActiveBudget hook for managing active budget states. - Enhanced user experience by conditionally rendering components based on the active budget status. - Updated package dependency for @raycast/api to version 1.95.0. These changes improve the functionality and responsiveness of the Raynab extension. --- extensions/raynab/package.json | 2 +- extensions/raynab/src/accounts.tsx | 11 ++++++++ .../src/components/accounts/accountView.tsx | 2 +- .../transactions/transactionCreateForm.tsx | 4 +-- .../src/lib/utils/checkForActiveBudget.ts | 26 +++++-------------- extensions/raynab/src/lib/utils/index.ts | 1 + extensions/raynab/src/scheduleTransaction.tsx | 11 ++++++++ .../raynab/src/tools/add-transaction.ts | 2 +- extensions/raynab/src/transaction.tsx | 12 ++++++++- extensions/raynab/src/transactions.tsx | 11 ++++++++ extensions/raynab/src/unreviewed.tsx | 11 ++++++++ 11 files changed, 67 insertions(+), 26 deletions(-) diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index 797592a8ad3..cd2ee62551f 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -74,7 +74,7 @@ "budget" ], "dependencies": { - "@raycast/api": "^1.88.4", + "@raycast/api": "^1.95.0", "@raycast/utils": "^1.18.1", "dayjs": "^1.11.13", "fuse.js": "^6.5.3", diff --git a/extensions/raynab/src/accounts.tsx b/extensions/raynab/src/accounts.tsx index 3227587a563..5ed344d030d 100644 --- a/extensions/raynab/src/accounts.tsx +++ b/extensions/raynab/src/accounts.tsx @@ -1,5 +1,16 @@ import { AccountView } from '@components/accounts/accountView'; +import { checkForActiveBudget } from '@lib/utils/checkForActiveBudget'; export default function Command() { + const { activeBudgetId, isLoading } = checkForActiveBudget(); + + if (isLoading) { + return null; + } + + if (!activeBudgetId) { + return null; + } + return ; } diff --git a/extensions/raynab/src/components/accounts/accountView.tsx b/extensions/raynab/src/components/accounts/accountView.tsx index 74fb291ca89..b7fe6f6421e 100644 --- a/extensions/raynab/src/components/accounts/accountView.tsx +++ b/extensions/raynab/src/components/accounts/accountView.tsx @@ -4,7 +4,7 @@ import { TransactionView } from '@components/transactions/transactionView'; import { Shortcuts } from '@constants'; import { useAccounts } from '@hooks/useAccounts'; import { formatToReadableAmount } from '@lib/utils'; -import { Action, ActionPanel, Color, Icon, List, showToast, Toast } from '@raycast/api'; +import { Action, ActionPanel, Color, Icon, List } from '@raycast/api'; import { useLocalStorage } from '@raycast/utils'; import { CurrencyFormat } from '@srcTypes'; diff --git a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx index 996efb8c3e5..74774c65d53 100644 --- a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx @@ -11,7 +11,7 @@ import { captureException, } from '@raycast/api'; import { FormValidation, useForm, useLocalStorage } from '@raycast/utils'; -import { useMemo, useState, useEffect } from 'react'; +import { useMemo, useState } from 'react'; import { createTransaction } from '@lib/api'; import { @@ -63,7 +63,7 @@ interface TransactionCreateFormProps { }; } -export function TransactionCreateForm({ categoryId, accountId, transaction }: TransactionCreateFormProps) { +export function TransactionCreateForm({ accountId, transaction }: TransactionCreateFormProps) { // 1. All hooks must be called unconditionally at the top const { value: activeBudgetId = '', isLoading: isLoadingBudgetId } = useLocalStorage('activeBudgetId', ''); const { value: activeBudgetCurrency } = useLocalStorage('activeBudgetCurrency', null); diff --git a/extensions/raynab/src/lib/utils/checkForActiveBudget.ts b/extensions/raynab/src/lib/utils/checkForActiveBudget.ts index 52babc54e84..e03e39c7363 100644 --- a/extensions/raynab/src/lib/utils/checkForActiveBudget.ts +++ b/extensions/raynab/src/lib/utils/checkForActiveBudget.ts @@ -1,11 +1,11 @@ -import { showToast, Toast, LocalStorage } from '@raycast/api'; +import { launchCommand, LaunchType, showToast, Toast } from '@raycast/api'; import { useLocalStorage } from '@raycast/utils'; /** * Hook to check for active budget and show a toast if none is found * @returns The active budget ID or null if none is found */ -export function useActiveBudget() { +export function checkForActiveBudget() { const { value: activeBudgetId, isLoading } = useLocalStorage('activeBudgetId', ''); if (!isLoading && !activeBudgetId) { @@ -14,26 +14,12 @@ export function useActiveBudget() { title: 'No Active Budget', message: 'Please select a budget first by running the "Select Budget" command.', }); - } - - return { activeBudgetId, isLoading }; -} - -/** - * Function to check for active budget and show a toast if none is found - * @returns The active budget ID or null if none is found - */ -export async function checkForActiveBudget() { - const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); - const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); - if (!activeBudgetId) { - await showToast({ - style: Toast.Style.Failure, - title: 'No Active Budget', - message: 'Please select a budget first by running the "Select Budget" command.', + launchCommand({ + name: 'activeBudget', + type: LaunchType.UserInitiated, }); } - return activeBudgetId; + return { activeBudgetId, isLoading }; } diff --git a/extensions/raynab/src/lib/utils/index.ts b/extensions/raynab/src/lib/utils/index.ts index 1a45df1bcc6..12ed00c504e 100644 --- a/extensions/raynab/src/lib/utils/index.ts +++ b/extensions/raynab/src/lib/utils/index.ts @@ -3,3 +3,4 @@ export * from './transactions'; export * from './ui-helpers'; export * from './validation'; export * from './time'; +export * from './checkForActiveBudget'; diff --git a/extensions/raynab/src/scheduleTransaction.tsx b/extensions/raynab/src/scheduleTransaction.tsx index 9ff04bdd413..4876ba9acd0 100644 --- a/extensions/raynab/src/scheduleTransaction.tsx +++ b/extensions/raynab/src/scheduleTransaction.tsx @@ -1,5 +1,16 @@ import { ScheduleTransactionCreateForm } from '@components/transactions/scheduledTransactionCreateForm'; +import { checkForActiveBudget } from '@lib/utils/checkForActiveBudget'; export default function Command() { + const { activeBudgetId, isLoading } = checkForActiveBudget(); + + if (isLoading) { + return null; + } + + if (!activeBudgetId) { + return null; + } + return ; } diff --git a/extensions/raynab/src/tools/add-transaction.ts b/extensions/raynab/src/tools/add-transaction.ts index eee7519e353..6ba2fb6e37d 100644 --- a/extensions/raynab/src/tools/add-transaction.ts +++ b/extensions/raynab/src/tools/add-transaction.ts @@ -1,6 +1,6 @@ import { Action, Tool, LocalStorage } from '@raycast/api'; import { launchCommand, LaunchType } from '@raycast/api'; -import { fetchAccounts, fetchBudgets } from '@lib/api'; +import { fetchAccounts } from '@lib/api'; import { showToast, Toast } from '@raycast/api'; import { Account, CurrencyFormat } from '@srcTypes'; import { formatToReadableAmount } from '@lib/utils'; diff --git a/extensions/raynab/src/transaction.tsx b/extensions/raynab/src/transaction.tsx index 437329babd2..038ab1c8f6d 100644 --- a/extensions/raynab/src/transaction.tsx +++ b/extensions/raynab/src/transaction.tsx @@ -1,8 +1,18 @@ import { TransactionCreateForm } from '@components/transactions/transactionCreateForm'; +import { checkForActiveBudget } from '@lib/utils/checkForActiveBudget'; import { LaunchProps } from '@raycast/api'; export default function Command(props: LaunchProps) { - const { categoryId, accountId, transaction } = props.launchContext || {}; + const { activeBudgetId, isLoading } = checkForActiveBudget(); + + if (isLoading) { + return null; + } + if (!activeBudgetId) { + return null; + } + + const { categoryId, accountId, transaction } = props.launchContext || {}; return ; } diff --git a/extensions/raynab/src/transactions.tsx b/extensions/raynab/src/transactions.tsx index ef6ef8c72c8..a7a989ef67c 100644 --- a/extensions/raynab/src/transactions.tsx +++ b/extensions/raynab/src/transactions.tsx @@ -1,6 +1,17 @@ import { TransactionView } from '@components/transactions/transactionView'; +import { checkForActiveBudget } from '@lib/utils/checkForActiveBudget'; import { LaunchProps } from '@raycast/api'; export default function Command(props: LaunchProps) { + const { activeBudgetId, isLoading } = checkForActiveBudget(); + + if (isLoading) { + return null; + } + + if (!activeBudgetId) { + return null; + } + return ; } diff --git a/extensions/raynab/src/unreviewed.tsx b/extensions/raynab/src/unreviewed.tsx index 71b9183cb0a..ede707660e0 100644 --- a/extensions/raynab/src/unreviewed.tsx +++ b/extensions/raynab/src/unreviewed.tsx @@ -1,5 +1,16 @@ import { UnreviewedTransactionView } from '@components/transactions/unreviewedTransactionView'; +import { checkForActiveBudget } from '@lib/utils/checkForActiveBudget'; export default function Command() { + const { activeBudgetId, isLoading } = checkForActiveBudget(); + + if (isLoading) { + return null; + } + + if (!activeBudgetId) { + return null; + } + return ; } From 55116d5a61571be7ca03e80b80fe51a773449bd6 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Thu, 10 Apr 2025 16:13:18 -0700 Subject: [PATCH 04/31] Update Raynab extension with new transaction features and dependency upgrades - Added new AI tools for managing YNAB transactions: "Add Transaction", "Get Transactions", and "Get Transaction Details". - Updated the description and input/output structure for the "Add Transaction" tool. - Upgraded package dependencies, including @raycast/api to version 1.95.0 and @types/react to version 19.1.0. These enhancements improve the functionality and user experience of the Raynab extension. --- extensions/raynab/ai.json | 210 + extensions/raynab/package-lock.json | 6267 ++++++++++------- extensions/raynab/package.json | 41 +- .../raynab/src/tools/add-transaction.ts | 8 +- .../src/tools/get-transaction-details.ts | 52 + .../raynab/src/tools/get-transactions.ts | 145 + 6 files changed, 4053 insertions(+), 2670 deletions(-) create mode 100644 extensions/raynab/ai.json create mode 100644 extensions/raynab/src/tools/get-transaction-details.ts create mode 100644 extensions/raynab/src/tools/get-transactions.ts diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json new file mode 100644 index 00000000000..1a342ebaf7d --- /dev/null +++ b/extensions/raynab/ai.json @@ -0,0 +1,210 @@ +{ + "instructions": "You are a helpful assistant for managing YNAB (You Need A Budget) transactions. Always format amounts correctly and handle dates in ISO format. Be precise with payee names and account names. When showing transactions, format the information clearly and concisely.\n\nFor transaction queries, you can specify time periods using natural language. The following time periods are supported:\n- 'last year' or 'past year' for the last 12 months\n- 'last quarter' or 'past quarter' for the last 3 months\n- 'last month' or 'past month' for the last 30 days\n- 'last week' or 'past week' for the last 7 days\n- 'last day', 'past day', 'yesterday', or 'today' for the last 24 hours\n\nIf no time period is specified, the default is the last month.", + "tools": [ + { + "name": "add-transaction", + "title": "Add Transaction", + "description": "Add a new YNAB transaction using AI", + "input": { + "date": "string", + "payee_name": "string", + "amount": "number", + "account_name": "string", + "memo": "string" + }, + "output": { + "success": "boolean", + "error": "string", + "debug": "any" + } + }, + { + "name": "get-transactions", + "title": "Get Transactions", + "description": "Get YNAB transactions using AI", + "input": { + "filter": "string" + }, + "output": { + "transactions": "array" + } + }, + { + "name": "get-transaction-details", + "title": "Get Transaction Details", + "description": "Get details of a specific YNAB transaction using AI", + "input": { + "transaction_id": "string" + }, + "output": { + "transaction": "object" + } + } + ], + "evals": [ + { + "input": "@ynab add a transaction for $25.50 at Starbucks", + "mocks": { + "add-transaction": { + "success": true, + "transaction": { + "date": "2024-03-15", + "payee_name": "Starbucks", + "amount": -25.50, + "account_name": "Checking", + "memo": "Morning coffee" + } + } + }, + "expected": [ + { + "callsTool": { + "name": "add-transaction", + "arguments": { + "date": "2024-03-15", + "payee_name": "Starbucks", + "amount": -25.50, + "account_name": "Checking", + "memo": "Morning coffee" + } + } + } + ], + "usedAsExample": true + }, + { + "input": "@ynab show me my recent transactions", + "mocks": { + "get-transactions": [ + { + "id": "123", + "date": "2024-03-14", + "payee_name": "Amazon", + "amount": -99.99, + "account_name": "Credit Card", + "memo": "Office supplies", + "category_name": "Office Supplies", + "cleared": true + }, + { + "id": "124", + "date": "2024-03-13", + "payee_name": "Whole Foods", + "amount": -75.25, + "account_name": "Checking", + "memo": "Groceries", + "category_name": "Groceries", + "cleared": true + } + ] + }, + "expected": [ + { + "callsTool": { + "name": "get-transactions", + "arguments": { + "filter": "recent" + } + } + } + ], + "usedAsExample": true + }, + { + "input": "@ynab show me my Amazon purchases from last year", + "mocks": { + "get-transactions": [ + { + "id": "123", + "date": "2023-12-14", + "payee_name": "Amazon", + "amount": -99.99, + "account_name": "Credit Card", + "memo": "Office supplies", + "category_name": "Office Supplies", + "cleared": true + }, + { + "id": "124", + "date": "2023-06-13", + "payee_name": "Amazon", + "amount": -75.25, + "account_name": "Credit Card", + "memo": "Books", + "category_name": "Entertainment", + "cleared": true + } + ] + }, + "expected": [ + { + "callsTool": { + "name": "get-transactions", + "arguments": { + "filter": "recent", + "payee": "Amazon", + "query": "last year" + } + } + } + ], + "usedAsExample": true + }, + { + "input": "@ynab what did I spend at Target in the past month?", + "mocks": { + "get-transactions": [ + { + "id": "125", + "date": "2024-03-10", + "payee_name": "Target", + "amount": -150.00, + "account_name": "Credit Card", + "memo": "Household items", + "category_name": "Household", + "cleared": true + } + ] + }, + "expected": [ + { + "callsTool": { + "name": "get-transactions", + "arguments": { + "filter": "recent", + "payee": "Target", + "query": "past month" + } + } + } + ], + "usedAsExample": true + }, + { + "input": "@ynab what was my Amazon purchase on March 14th?", + "mocks": { + "get-transaction-details": { + "id": "123", + "date": "2024-03-14", + "payee_name": "Amazon", + "amount": -99.99, + "account_name": "Credit Card", + "memo": "Office supplies", + "category_name": "Office Supplies", + "cleared": true + } + }, + "expected": [ + { + "callsTool": { + "name": "get-transaction-details", + "arguments": { + "transaction_id": "123" + } + } + } + ], + "usedAsExample": true + } + ] +} \ No newline at end of file diff --git a/extensions/raynab/package-lock.json b/extensions/raynab/package-lock.json index 80d7d50493a..f160e5f1dd6 100644 --- a/extensions/raynab/package-lock.json +++ b/extensions/raynab/package-lock.json @@ -7,7 +7,7 @@ "name": "raynab", "license": "MIT", "dependencies": { - "@raycast/api": "^1.88.4", + "@raycast/api": "^1.95.0", "@raycast/utils": "^1.18.1", "dayjs": "^1.11.13", "fuse.js": "^6.5.3", @@ -21,7 +21,7 @@ "devDependencies": { "@raycast/eslint-config": "^1.0.11", "@types/node": "^20.17.12", - "@types/react": "^18.3.18", + "@types/react": "^19.1.0", "eslint": "^8.57.1", "eslint-config-prettier": "^8.3.0", "prettier": "^3.4.2", @@ -32,7 +32,9 @@ }, "node_modules/@electron/get": { "version": "2.0.3", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.1", @@ -52,82 +54,82 @@ }, "node_modules/@electron/get/node_modules/semver": { "version": "6.3.1", - "devOptional": true, + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.2", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", "cpu": [ "arm64" ], @@ -141,213 +143,201 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", "cpu": [ "arm64" ], @@ -361,26 +351,25 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", "cpu": [ "arm64" ], @@ -394,92 +383,89 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", "dev": true, "license": "MIT", "dependencies": { @@ -497,6 +483,8 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -505,6 +493,8 @@ }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -525,8 +515,34 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/js": { "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", "engines": { @@ -535,6 +551,9 @@ }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -546,8 +565,34 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -560,16 +605,21 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@inquirer/checkbox": { - "version": "4.0.4", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.5.tgz", + "integrity": "sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/figures": "^1.0.9", - "@inquirer/type": "^3.0.2", + "@inquirer/core": "^10.1.10", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, @@ -578,52 +628,65 @@ }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/confirm": { - "version": "5.1.1", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.9.tgz", + "integrity": "sha512-NgQCnHqFTjF7Ys2fsqK2WtnA8X1kHyInyG+nMIuHowVTIgIuS10T4AznI/PvbqSpJqjCUqNBlKGh1v3bwLFL4w==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/type": "^3.0.2" + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6" }, "engines": { "node": ">=18" }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/core": { - "version": "10.1.2", + "version": "10.1.10", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.10.tgz", + "integrity": "sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw==", "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.9", - "@inquirer/type": "^3.0.2", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" - } - }, - "node_modules/@inquirer/core/node_modules/signal-exit": { - "version": "4.1.0", - "license": "ISC", - "engines": { - "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/core/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -635,11 +698,13 @@ } }, "node_modules/@inquirer/editor": { - "version": "4.2.1", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.10.tgz", + "integrity": "sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/type": "^3.0.2", + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", "external-editor": "^3.1.0" }, "engines": { @@ -647,14 +712,21 @@ }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/expand": { - "version": "4.0.4", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.12.tgz", + "integrity": "sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/type": "^3.0.2", + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -662,49 +734,72 @@ }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/figures": { - "version": "1.0.9", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz", + "integrity": "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@inquirer/input": { - "version": "4.1.1", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.9.tgz", + "integrity": "sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/type": "^3.0.2" + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6" }, "engines": { "node": ">=18" }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/number": { - "version": "3.0.4", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.12.tgz", + "integrity": "sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/type": "^3.0.2" + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6" }, "engines": { "node": ">=18" }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/password": { - "version": "4.0.4", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.12.tgz", + "integrity": "sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/type": "^3.0.2", + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2" }, "engines": { @@ -712,36 +807,50 @@ }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/prompts": { - "version": "7.2.1", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.4.1.tgz", + "integrity": "sha512-UlmM5FVOZF0gpoe1PT/jN4vk8JmpIWBlMvTL8M+hlvPmzN89K6z03+IFmyeu/oFCenwdwHDr2gky7nIGSEVvlA==", "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^4.0.4", - "@inquirer/confirm": "^5.1.1", - "@inquirer/editor": "^4.2.1", - "@inquirer/expand": "^4.0.4", - "@inquirer/input": "^4.1.1", - "@inquirer/number": "^3.0.4", - "@inquirer/password": "^4.0.4", - "@inquirer/rawlist": "^4.0.4", - "@inquirer/search": "^3.0.4", - "@inquirer/select": "^4.0.4" + "@inquirer/checkbox": "^4.1.5", + "@inquirer/confirm": "^5.1.9", + "@inquirer/editor": "^4.2.10", + "@inquirer/expand": "^4.0.12", + "@inquirer/input": "^4.1.9", + "@inquirer/number": "^3.0.12", + "@inquirer/password": "^4.0.12", + "@inquirer/rawlist": "^4.0.12", + "@inquirer/search": "^3.0.12", + "@inquirer/select": "^4.1.1" }, "engines": { "node": ">=18" }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/rawlist": { - "version": "4.0.4", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.12.tgz", + "integrity": "sha512-wNPJZy8Oc7RyGISPxp9/MpTOqX8lr0r+lCCWm7hQra+MDtYRgINv1hxw7R+vKP71Bu/3LszabxOodfV/uTfsaA==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/type": "^3.0.2", + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -749,15 +858,22 @@ }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/search": { - "version": "3.0.4", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.12.tgz", + "integrity": "sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/figures": "^1.0.9", - "@inquirer/type": "^3.0.2", + "@inquirer/core": "^10.1.10", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", "yoctocolors-cjs": "^2.1.2" }, "engines": { @@ -765,15 +881,22 @@ }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/select": { - "version": "4.0.4", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.1.1.tgz", + "integrity": "sha512-IUXzzTKVdiVNMA+2yUvPxWsSgOG4kfX93jOM4Zb5FgujeInotv5SPIJVeXQ+fO4xu7tW8VowFhdG5JRmmCyQ1Q==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/figures": "^1.0.9", - "@inquirer/type": "^3.0.2", + "@inquirer/core": "^10.1.10", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, @@ -782,18 +905,30 @@ }, "peerDependencies": { "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/type": { - "version": "3.0.2", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.6.tgz", + "integrity": "sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==", "license": "MIT", "engines": { "node": ">=18" }, "peerDependencies": { "@types/node": ">=18" - } - }, + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -803,6 +938,8 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -814,6 +951,8 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", "engines": { "node": ">= 8" @@ -821,6 +960,8 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -831,11 +972,13 @@ } }, "node_modules/@oclif/core": { - "version": "4.2.0", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.2.10.tgz", + "integrity": "sha512-fAqcXgqkUm4v5FYy7qWP4w1HaOlVSVJveah+yVTo5Nm5kTiXhmD5mQQ7+knGeBaStyrtQy6WardoC2xSic9rlQ==", "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.2", - "ansis": "^3.3.2", + "ansis": "^3.17.0", "clean-stack": "^3.0.1", "cli-spinners": "^2.9.2", "debug": "^4.4.0", @@ -857,55 +1000,14 @@ "node": ">=18.0.0" } }, - "node_modules/@oclif/core/node_modules/brace-expansion": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@oclif/core/node_modules/minimatch": { - "version": "9.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@oclif/core/node_modules/supports-color": { - "version": "8.1.1", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/@oclif/core/node_modules/widest-line": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@oclif/plugin-autocomplete": { - "version": "3.2.15", + "version": "3.2.27", + "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.27.tgz", + "integrity": "sha512-Aywx0Vw36k0fQVBa2uLb8FKblGAP7ly1cQ5bdKqL4BmhJnUasy37tpyIDMUor93asOS+kKFQg+52pOxQgXHi1A==", "license": "MIT", "dependencies": { "@oclif/core": "^4", - "ansis": "^3.4.0", + "ansis": "^3.16.0", "debug": "^4.4.0", "ejs": "^3.1.10" }, @@ -914,7 +1016,9 @@ } }, "node_modules/@oclif/plugin-help": { - "version": "6.2.20", + "version": "6.2.27", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.27.tgz", + "integrity": "sha512-RWSWtCFVObRmCwgxVOye3lsYbPHTnB7G4He5LEAg2tf600Sil5yXEOL/ULx1TqL/XOQxKqRvmLn/rLQOMT85YA==", "license": "MIT", "dependencies": { "@oclif/core": "^4" @@ -924,48 +1028,45 @@ } }, "node_modules/@oclif/plugin-not-found": { - "version": "3.2.31", + "version": "3.2.49", + "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.49.tgz", + "integrity": "sha512-3V74/O5aFAqTTCJ7+X04M6vmt59Dk8HimB2uOlGgJrR7yLMW9JsVWKpDZZ6fl1hfd5kK9Jn4oaEt/1LuwfW1wQ==", "license": "MIT", "dependencies": { - "@inquirer/prompts": "^7.2.0", + "@inquirer/prompts": "^7.4.1", "@oclif/core": "^4", - "ansis": "^3.3.1", + "ansis": "^3.17.0", "fast-levenshtein": "^3.0.0" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@oclif/plugin-not-found/node_modules/fast-levenshtein": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "fastest-levenshtein": "^1.0.7" - } - }, "node_modules/@raycast/api": { - "version": "1.88.4", + "version": "1.95.0", + "resolved": "https://registry.npmjs.org/@raycast/api/-/api-1.95.0.tgz", + "integrity": "sha512-uf12AUd7QiMG6LUGCRZNImdFe1sAOijNRSwMqRb/vAomusOBueORsukNhrfaKpmrufiYNvUoRDssVclJcvsYgw==", "license": "MIT", "dependencies": { "@oclif/core": "^4.0.33", "@oclif/plugin-autocomplete": "^3.2.10", "@oclif/plugin-help": "^6.2.18", "@oclif/plugin-not-found": "^3.2.28", - "@types/node": "20.8.10", - "@types/react": "18.3.3", - "esbuild": "^0.24.0", - "react": "18.3.1" + "@types/node": "22.13.10", + "@types/react": "19.0.10", + "esbuild": "^0.25.1", + "react": "19.0.0" }, "bin": { "ray": "bin/run.js" }, "engines": { - "node": ">=20.5.0" + "node": ">=22.14.0" }, "peerDependencies": { - "@types/node": "20.8.10", - "@types/react": "18.3.3", - "react-devtools": "5.2.0" + "@types/node": "22.13.10", + "@types/react": "19.0.10", + "react-devtools": "6.1.1" }, "peerDependenciesMeta": { "@types/node": { @@ -980,22 +1081,42 @@ } }, "node_modules/@raycast/api/node_modules/@types/node": { - "version": "20.8.10", + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.20.0" } }, "node_modules/@raycast/api/node_modules/@types/react": { - "version": "18.3.3", + "version": "19.0.10", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.10.tgz", + "integrity": "sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==", "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, + "node_modules/@raycast/api/node_modules/react": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@raycast/api/node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, "node_modules/@raycast/eslint-config": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@raycast/eslint-config/-/eslint-config-1.0.11.tgz", + "integrity": "sha512-I0Lt8bwahVGkANUBxripIxKptMBz1Ou+UXGwfqgFvKwo1gVLrnlEngxaspQJA8L5pvzQkQMwizVCSgNC3bddWg==", "dev": true, "license": "MIT", "dependencies": { @@ -1011,172 +1132,10 @@ "typescript": ">=4" } }, - "node_modules/@raycast/eslint-config/node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@raycast/eslint-config/node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@raycast/eslint-config/node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@raycast/eslint-config/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@raycast/eslint-config/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@raycast/eslint-config/node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@raycast/eslint-config/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@raycast/eslint-config/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@raycast/eslint-config/node_modules/eslint-config-prettier": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "license": "MIT", "bin": { @@ -1186,22 +1145,10 @@ "eslint": ">=7.0.0" } }, - "node_modules/@raycast/eslint-config/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@raycast/eslint-plugin": { - "version": "1.0.15", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@raycast/eslint-plugin/-/eslint-plugin-1.0.16.tgz", + "integrity": "sha512-OyFL/W75/4hlgdUUI80Eoes0HjpVrJ8I1kB/PBH2RLjbcK22TC6IwZPXvhBZ5jF962O1TqtOuHrTjySwDaa/cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1212,7 +1159,9 @@ } }, "node_modules/@raycast/utils": { - "version": "1.18.1", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@raycast/utils/-/utils-1.19.1.tgz", + "integrity": "sha512-/udUGcTZCgZZwzesmjBkqG5naQZTD/ZLHbqRwkWcF+W97vf9tr9raxKyQjKsdZ17OVllw2T3sHBQsVUdEmCm2g==", "license": "MIT", "dependencies": { "cross-fetch": "^3.1.6", @@ -1226,20 +1175,10 @@ "@raycast/api": ">=1.69.0" } }, - "node_modules/@raycast/utils/node_modules/signal-exit": { - "version": "4.1.0", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz", - "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz", + "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==", "cpu": [ "arm" ], @@ -1251,9 +1190,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz", - "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz", + "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==", "cpu": [ "arm64" ], @@ -1265,9 +1204,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz", - "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz", + "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==", "cpu": [ "arm64" ], @@ -1279,9 +1218,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz", - "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz", + "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==", "cpu": [ "x64" ], @@ -1293,9 +1232,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz", - "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz", + "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==", "cpu": [ "arm64" ], @@ -1307,9 +1246,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz", - "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz", + "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==", "cpu": [ "x64" ], @@ -1321,9 +1260,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz", - "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz", + "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==", "cpu": [ "arm" ], @@ -1335,9 +1274,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz", - "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz", + "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==", "cpu": [ "arm" ], @@ -1349,9 +1288,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz", - "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz", + "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==", "cpu": [ "arm64" ], @@ -1363,9 +1302,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz", - "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz", + "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==", "cpu": [ "arm64" ], @@ -1377,9 +1316,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz", - "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz", + "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==", "cpu": [ "loong64" ], @@ -1391,9 +1330,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz", - "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz", + "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==", "cpu": [ "ppc64" ], @@ -1405,9 +1344,23 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz", - "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz", + "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz", + "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==", "cpu": [ "riscv64" ], @@ -1419,9 +1372,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz", - "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz", + "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==", "cpu": [ "s390x" ], @@ -1433,9 +1386,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz", - "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz", + "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", "cpu": [ "x64" ], @@ -1447,9 +1400,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz", - "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz", + "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==", "cpu": [ "x64" ], @@ -1461,9 +1414,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz", - "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz", + "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==", "cpu": [ "arm64" ], @@ -1475,9 +1428,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz", - "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz", + "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==", "cpu": [ "ia32" ], @@ -1489,9 +1442,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz", - "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==", + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz", + "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==", "cpu": [ "x64" ], @@ -1503,13 +1456,17 @@ ] }, "node_modules/@rushstack/eslint-patch": { - "version": "1.10.4", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", + "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -1520,7 +1477,9 @@ }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" @@ -1531,7 +1490,9 @@ }, "node_modules/@types/cacheable-request": { "version": "6.0.3", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", @@ -1541,69 +1502,77 @@ } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true, "license": "MIT" }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/keyv": { "version": "3.1.4", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "20.17.12", + "version": "20.17.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz", + "integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } }, - "node_modules/@types/node/node_modules/undici-types": { - "version": "6.19.8", - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.14", - "license": "MIT" - }, "node_modules/@types/react": { - "version": "18.3.18", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.0.tgz", + "integrity": "sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==", "dev": true, "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/responselike": { "version": "1.0.3", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/semver": { - "version": "7.5.8", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", "dev": true, "license": "MIT" }, "node_modules/@types/yauzl": { "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, "license": "MIT", "optional": true, @@ -1611,14 +1580,23 @@ "@types/node": "*" } }, - "node_modules/@typescript-eslint/type-utils": { + "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "engines": { @@ -1629,6 +1607,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { @@ -1637,13 +1616,20 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "license": "MIT", "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1651,32 +1637,68 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "node_modules/@typescript-eslint/parser": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, "engines": { "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "node_modules/@typescript-eslint/scope-manager": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, "engines": { @@ -1686,6 +1708,9 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, "peerDependenciesMeta": { "typescript": { "optional": true @@ -1694,6 +1719,8 @@ }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1716,14 +1743,12 @@ "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "node_modules/@typescript-eslint/types": { "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -1732,16 +1757,39 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "balanced-match": "^1.0.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "license": "ISC", "dependencies": { @@ -1756,6 +1804,8 @@ }, "node_modules/@typescript-eslint/utils": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1781,6 +1831,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "license": "MIT", "dependencies": { @@ -1797,6 +1849,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "license": "MIT", "engines": { @@ -1809,6 +1863,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -1835,6 +1891,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "license": "MIT", "dependencies": { @@ -1849,8 +1907,28 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@ungap/structured-clone": { - "version": "1.2.1", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true, "license": "ISC" }, @@ -1968,7 +2046,9 @@ } }, "node_modules/acorn": { - "version": "8.14.0", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -1980,6 +2060,8 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1988,6 +2070,8 @@ }, "node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -2003,15 +2087,19 @@ }, "node_modules/ansi-align": { "version": "2.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^2.0.0" } }, "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "3.0.0", - "devOptional": true, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -2019,7 +2107,9 @@ }, "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -2027,7 +2117,9 @@ }, "node_modules/ansi-align/node_modules/string-width": { "version": "2.1.1", - "devOptional": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", @@ -2039,7 +2131,9 @@ }, "node_modules/ansi-align/node_modules/strip-ansi": { "version": "4.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" @@ -2050,6 +2144,8 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -2061,18 +2157,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -2080,6 +2168,8 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -2092,19 +2182,25 @@ } }, "node_modules/ansis": { - "version": "3.4.0", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", "license": "ISC", "engines": { - "node": ">=16" + "node": ">=14" } }, "node_modules/argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "license": "MIT", "engines": { "node": ">=8" @@ -2122,21 +2218,30 @@ }, "node_modules/async": { "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, "node_modules/balanced-match": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, "node_modules/boolean": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, "license": "MIT", "optional": true }, "node_modules/boxen": { "version": "1.3.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, "license": "MIT", "dependencies": { "ansi-align": "^2.0.0", @@ -2152,8 +2257,10 @@ } }, "node_modules/boxen/node_modules/ansi-regex": { - "version": "3.0.0", - "devOptional": true, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -2161,7 +2268,9 @@ }, "node_modules/boxen/node_modules/ansi-styles": { "version": "3.2.1", - "devOptional": true, + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -2172,7 +2281,9 @@ }, "node_modules/boxen/node_modules/chalk": { "version": "2.4.2", - "devOptional": true, + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -2185,7 +2296,9 @@ }, "node_modules/boxen/node_modules/color-convert": { "version": "1.9.3", - "devOptional": true, + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -2193,12 +2306,16 @@ }, "node_modules/boxen/node_modules/color-name": { "version": "1.1.3", - "devOptional": true, + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, "license": "MIT" }, "node_modules/boxen/node_modules/escape-string-regexp": { "version": "1.0.5", - "devOptional": true, + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -2206,7 +2323,9 @@ }, "node_modules/boxen/node_modules/has-flag": { "version": "3.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -2214,7 +2333,9 @@ }, "node_modules/boxen/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -2222,7 +2343,9 @@ }, "node_modules/boxen/node_modules/string-width": { "version": "2.1.1", - "devOptional": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", @@ -2234,7 +2357,9 @@ }, "node_modules/boxen/node_modules/strip-ansi": { "version": "4.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" @@ -2245,7 +2370,9 @@ }, "node_modules/boxen/node_modules/supports-color": { "version": "5.5.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -2254,16 +2381,32 @@ "node": ">=4" } }, + "node_modules/boxen/node_modules/widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/brace-expansion": { - "version": "1.1.11", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -2274,7 +2417,9 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", - "devOptional": true, + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, "license": "MIT", "engines": { "node": "*" @@ -2292,7 +2437,9 @@ }, "node_modules/cacheable-lookup": { "version": "5.0.4", - "devOptional": true, + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.6.0" @@ -2300,7 +2447,9 @@ }, "node_modules/cacheable-request": { "version": "7.0.4", - "devOptional": true, + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, "license": "MIT", "dependencies": { "clone-response": "^1.0.2", @@ -2315,35 +2464,10 @@ "node": ">=8" } }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -2352,24 +2476,31 @@ }, "node_modules/camelcase": { "version": "4.1.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/capture-stack-trace": { - "version": "1.0.1", - "devOptional": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz", + "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/chai": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", - "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "dev": true, "license": "MIT", "dependencies": { @@ -2385,6 +2516,8 @@ }, "node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -2397,8 +2530,22 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/chardet": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "license": "MIT" }, "node_modules/check-error": { @@ -2413,11 +2560,15 @@ }, "node_modules/ci-info": { "version": "1.6.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true, "license": "MIT" }, "node_modules/clean-stack": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", "license": "MIT", "dependencies": { "escape-string-regexp": "4.0.0" @@ -2431,7 +2582,9 @@ }, "node_modules/cli-boxes": { "version": "1.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2439,6 +2592,8 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "license": "MIT", "engines": { "node": ">=6" @@ -2449,18 +2604,18 @@ }, "node_modules/cli-width": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "license": "ISC", "engines": { "node": ">= 12" } }, - "node_modules/client-only": { - "version": "0.0.1", - "license": "MIT" - }, "node_modules/clone-response": { "version": "1.0.3", - "devOptional": true, + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" @@ -2471,6 +2626,8 @@ }, "node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -2481,15 +2638,21 @@ }, "node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, "node_modules/configstore": { "version": "3.1.5", - "devOptional": true, + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "dot-prop": "^4.2.1", @@ -2503,9 +2666,30 @@ "node": ">=4" } }, + "node_modules/configstore/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/configstore/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "node_modules/create-error-class": { "version": "3.0.2", - "devOptional": true, + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", + "dev": true, "license": "MIT", "dependencies": { "capture-stack-trace": "^1.0.0" @@ -2516,6 +2700,8 @@ }, "node_modules/cross-fetch": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" @@ -2523,6 +2709,8 @@ }, "node_modules/cross-fetch/node_modules/node-fetch": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -2540,7 +2728,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -2554,18 +2744,24 @@ }, "node_modules/crypto-random-string": { "version": "1.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/csstype": { - "version": "3.0.10", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, "node_modules/data-uri-to-buffer": { - "version": "4.0.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "license": "MIT", "engines": { "node": ">= 12" @@ -2573,10 +2769,14 @@ }, "node_modules/dayjs": { "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", "license": "MIT" }, "node_modules/debug": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -2592,7 +2792,9 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" @@ -2606,7 +2808,9 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -2627,7 +2831,9 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, "license": "MIT", "engines": { "node": ">=4.0.0" @@ -2635,12 +2841,29 @@ }, "node_modules/deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/defer-to-connect": { "version": "2.0.1", - "devOptional": true, + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -2648,6 +2871,8 @@ }, "node_modules/define-data-property": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "optional": true, @@ -2665,6 +2890,8 @@ }, "node_modules/define-properties": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "optional": true, @@ -2682,6 +2909,8 @@ }, "node_modules/dequal": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "license": "MIT", "engines": { "node": ">=6" @@ -2689,12 +2918,16 @@ }, "node_modules/detect-node": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true, "license": "MIT", "optional": true }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "license": "MIT", "dependencies": { "path-type": "^4.0.0" @@ -2705,6 +2938,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2716,7 +2951,9 @@ }, "node_modules/dot-prop": { "version": "4.2.1", - "devOptional": true, + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "dev": true, "license": "MIT", "dependencies": { "is-obj": "^1.0.0" @@ -2726,12 +2963,16 @@ } }, "node_modules/duplexer3": { - "version": "0.1.4", - "devOptional": true, + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/ejs": { "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" @@ -2745,7 +2986,9 @@ }, "node_modules/electron": { "version": "23.3.13", - "devOptional": true, + "resolved": "https://registry.npmjs.org/electron/-/electron-23.3.13.tgz", + "integrity": "sha512-BaXtHEb+KYKLouUXlUVDa/lj9pj4F5kiE0kwFdJV84Y2EU7euIDgPthfKtchhr5MVHmjtavRMIV/zAwEiSQ9rQ==", + "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2761,17 +3004,23 @@ } }, "node_modules/electron/node_modules/@types/node": { - "version": "16.18.121", - "devOptional": true, + "version": "16.18.126", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", + "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==", + "dev": true, "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/end-of-stream": { "version": "1.4.4", - "devOptional": true, + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -2779,26 +3028,29 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "devOptional": true, + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/es-define-property": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", "optional": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } }, "node_modules/es-errors": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", "optional": true, @@ -2815,12 +3067,16 @@ }, "node_modules/es6-error": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, "license": "MIT", "optional": true }, "node_modules/esbuild": { - "version": "0.24.2", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -2830,388 +3086,563 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.2", - "@esbuild/android-arm": "0.24.2", - "@esbuild/android-arm64": "0.24.2", - "@esbuild/android-x64": "0.24.2", - "@esbuild/darwin-arm64": "0.24.2", - "@esbuild/darwin-x64": "0.24.2", - "@esbuild/freebsd-arm64": "0.24.2", - "@esbuild/freebsd-x64": "0.24.2", - "@esbuild/linux-arm": "0.24.2", - "@esbuild/linux-arm64": "0.24.2", - "@esbuild/linux-ia32": "0.24.2", - "@esbuild/linux-loong64": "0.24.2", - "@esbuild/linux-mips64el": "0.24.2", - "@esbuild/linux-ppc64": "0.24.2", - "@esbuild/linux-riscv64": "0.24.2", - "@esbuild/linux-s390x": "0.24.2", - "@esbuild/linux-x64": "0.24.2", - "@esbuild/netbsd-arm64": "0.24.2", - "@esbuild/netbsd-x64": "0.24.2", - "@esbuild/openbsd-arm64": "0.24.2", - "@esbuild/openbsd-x64": "0.24.2", - "@esbuild/sunos-x64": "0.24.2", - "@esbuild/win32-arm64": "0.24.2", - "@esbuild/win32-ia32": "0.24.2", - "@esbuild/win32-x64": "0.24.2" - } - }, - "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", - "cpu": [ - "ppc64" - ], + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", - "optional": true, - "os": [ - "aix" - ], "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", - "cpu": [ - "arm" - ], + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", - "cpu": [ - "arm64" - ], + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, "engines": { - "node": ">=18" + "node": ">=8.0.0" } }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", - "cpu": [ - "x64" - ], + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=18" + "node": ">=4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", - "cpu": [ - "arm" - ], + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", - "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", - "cpu": [ - "arm64" - ], + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", - "cpu": [ - "ia32" - ], + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", - "cpu": [ - "loong64" - ], + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/expect-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", + "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", - "cpu": [ - "mips64el" - ], + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, "engines": { - "node": ">=18" + "node": ">=8.6.0" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=18" + "node": ">= 6" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", - "cpu": [ - "riscv64" - ], + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "fastest-levenshtein": "^1.0.7" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", - "cpu": [ - "s390x" - ], + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">= 4.9.1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", - "cpu": [ - "x64" - ], + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "pend": "~1.2.0" } }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", - "cpu": [ - "x64" + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } ], "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, "engines": { - "node": ">=18" + "node": "^12.20 || >= 14.13" } }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", - "cpu": [ - "x64" - ], + "node_modules/fetch-ponyfill": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-7.1.0.tgz", + "integrity": "sha512-FhbbL55dj/qdVO3YNK7ZEkshvj3eQ7EuIGV2I6ic/2YiocvyWv+7jg2s4AyS0wdRU75s3tA8ZxI/xPigb0v5Aw==", "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "node-fetch": "~2.6.1" } }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", - "cpu": [ - "x64" - ], + "node_modules/fetch-ponyfill/node_modules/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { - "node": ">=18" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", - "cpu": [ - "arm64" - ], + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "flat-cache": "^3.0.4" + }, "engines": { - "node": ">=18" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", - "cpu": [ - "x64" - ], + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=10" }, @@ -3219,1795 +3650,2213 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "8.57.1", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, - "bin": { - "eslint": "bin/eslint.js" + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12.20.0" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/eslint-config-prettier": { - "version": "8.3.0", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, + "node_modules/fuse.js": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz", + "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", "engines": { "node": ">=8.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "*" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=4.0" + "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.3" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10.13.0" + "node": "*" } }, - "node_modules/eslint/node_modules/is-path-inside": { - "version": "3.0.3", + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "dev": true, "license": "MIT", + "dependencies": { + "ini": "^1.3.4" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/espree": { - "version": "9.6.1", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "type-fest": "^0.20.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery": { - "version": "1.6.0", + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "estraverse": "^5.1.0" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "optional": true, "engines": { - "node": ">=4.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=4.0" + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/estraverse": { - "version": "4.3.0", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" } }, - "node_modules/esutils": { - "version": "2.0.3", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "BSD-2-Clause", + "license": "Apache-2.0", "engines": { - "node": ">=0.10.0" + "node": ">=10.17.0" } }, - "node_modules/execa": { - "version": "0.7.0", - "devOptional": true, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "5.1.0", - "devOptional": true, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "license": "MIT", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "engines": { + "node": ">= 4" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "3.0.0", - "devOptional": true, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa/node_modules/lru-cache": { - "version": "4.1.5", - "devOptional": true, - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "devOptional": true, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.19" } }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "devOptional": true, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "devOptional": true, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "license": "ISC", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/execa/node_modules/yallist": { - "version": "2.1.2", - "devOptional": true, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, "license": "ISC" }, - "node_modules/expect-type": { - "version": "1.1.0", + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } + "license": "ISC" }, - "node_modules/external-editor": { - "version": "3.1.0", + "node_modules/internal-ip": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", + "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", + "dev": true, "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "devOptional": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" + "default-gateway": "^6.0.0", + "ipaddr.js": "^1.9.1", + "is-ip": "^3.1.0", + "p-event": "^4.2.0" }, "engines": { - "node": ">= 10.17.0" + "node": ">=10" }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "funding": { + "url": "https://github.com/sindresorhus/internal-ip?sponsor=1" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.2", "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, "engines": { - "node": ">=8.6.0" + "node": ">=8" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.10" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", + "node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "ci-info": "^1.5.0" + }, + "bin": { + "is-ci": "bin.js" + } }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">= 4.9.1" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fastq": { - "version": "1.17.1", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "devOptional": true, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", - "dependencies": { - "pend": "~1.2.0" + "engines": { + "node": ">=8" } }, - "node_modules/fetch-blob": { - "version": "3.1.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { - "web-streams-polyfill": "^3.0.3" + "is-extglob": "^2.1.1" }, "engines": { - "node": "^12.20 || >= 14.13" + "node": ">=0.10.0" } }, - "node_modules/fetch-ponyfill": { - "version": "7.1.0", + "node_modules/is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==", + "dev": true, "license": "MIT", "dependencies": { - "node-fetch": "~2.6.1" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/fetch-ponyfill/node_modules/node-fetch": { - "version": "2.6.7", + "node_modules/is-installed-globally/node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "dev": true, "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "path-is-inside": "^1.0.1" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "node_modules/is-ip": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "ip-regex": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=8" } }, - "node_modules/filelist": { - "version": "1.0.4", - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" + "node_modules/is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/fill-range": { - "version": "7.1.1", + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/find-up": { - "version": "5.0.0", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "is-docker": "^2.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=8" } }, - "node_modules/flatted": { - "version": "3.2.4", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "license": "MIT", + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "license": "Apache-2.0", "dependencies": { - "fetch-blob": "^3.1.2" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": ">=12.20.0" + "node": ">=10" } }, - "node_modules/fs-extra": { - "version": "8.1.0", - "devOptional": true, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6 <7 || >=8" + "node": "*" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/function-bind": { - "version": "1.1.2", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", - "optional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/fuse.js": { - "version": "6.5.3", - "license": "Apache-2.0", - "engines": { - "node": ">=10" + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", + "node_modules/latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "package-json": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/get-package-type": { - "version": "0.1.0", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.8.0" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "devOptional": true, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/glob": { - "version": "7.2.0", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" }, - "node_modules/global-agent": { - "version": "3.0.0", + "node_modules/loupe": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, + "license": "MIT" + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10.0" + "node": ">=8" } }, - "node_modules/global-dirs": { - "version": "0.1.1", - "devOptional": true, - "license": "MIT", + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "license": "ISC", "dependencies": { - "ini": "^1.3.4" - }, - "engines": { - "node": ">=4" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "node_modules/globals": { - "version": "13.24.0", + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/globalthis": { - "version": "1.0.4", + "node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "pify": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/globby": { - "version": "11.1.0", + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "escape-string-regexp": "^4.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.2.0", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "license": "MIT", - "optional": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, - "node_modules/got": { - "version": "11.8.6", - "devOptional": true, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": ">=8.6" } }, - "node_modules/got/node_modules/lowercase-keys": { - "version": "2.0.0", - "devOptional": true, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "optional": true, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { - "es-define-property": "^1.0.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/has-proto": { - "version": "1.1.0", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/hasown": { - "version": "2.0.2", - "dev": true, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", - "optional": true, - "dependencies": { - "function-bind": "^1.1.2" + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "devOptional": true, - "license": "BSD-2-Clause" + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "devOptional": true, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, "engines": { - "node": ">=10.19.0" + "node": ">=10.5.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/ignore": { - "version": "5.3.2", + "node_modules/node-localstorage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-2.2.1.tgz", + "integrity": "sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw==", "license": "MIT", + "dependencies": { + "write-file-atomic": "^1.1.4" + }, "engines": { - "node": ">= 4" + "node": ">=0.12" } }, - "node_modules/import-fresh": { - "version": "3.3.0", + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { - "version": "2.1.0", - "devOptional": true, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">= 6" } }, - "node_modules/indent-string": { - "version": "4.0.0", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/inflight": { - "version": "1.0.6", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "license": "ISC", "dependencies": { - "once": "^1.3.0", "wrappy": "1" } }, - "node_modules/inherits": { - "version": "2.0.4", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "devOptional": true, - "license": "ISC" - }, - "node_modules/ip": { - "version": "1.1.9", - "devOptional": true, - "license": "MIT" - }, - "node_modules/is-ci": { - "version": "1.2.1", - "devOptional": true, "license": "MIT", "dependencies": { - "ci-info": "^1.5.0" + "mimic-fn": "^2.1.0" }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-docker": { - "version": "2.2.1", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", + "node_modules/optionator/node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "p-timeout": "^3.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-installed-globally": { - "version": "0.1.0", - "devOptional": true, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, "license": "MIT", - "dependencies": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - }, "engines": { "node": ">=4" } }, - "node_modules/is-npm": { - "version": "1.0.0", - "devOptional": true, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-number": { - "version": "7.0.0", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">=0.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-obj": { - "version": "1.0.1", - "devOptional": true, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-path-inside": { - "version": "1.0.1", - "devOptional": true, + "node_modules/package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==", + "dev": true, "license": "MIT", "dependencies": { - "path-is-inside": "^1.0.1" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-redirect": { - "version": "1.0.0", - "devOptional": true, + "node_modules/package-json/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "devOptional": true, + "node_modules/package-json/node_modules/got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==", + "dev": true, "license": "MIT", + "dependencies": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-stream": { + "node_modules/package-json/node_modules/is-stream": { "version": "1.1.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", + "node_modules/package-json/node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "devOptional": true, - "license": "ISC" - }, - "node_modules/jake": { - "version": "10.9.2", - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, + "node_modules/package-json/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" + "semver": "bin/semver" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "callsites": "^3.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=6" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "devOptional": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/jsonfile": { + "node_modules/path-exists": { "version": "4.0.0", - "devOptional": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "devOptional": true, + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/latest-version": { - "version": "3.1.0", - "devOptional": true, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "license": "MIT", - "dependencies": { - "package-json": "^4.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/levn": { - "version": "0.4.1", + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/lilconfig": { - "version": "3.1.3", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" + "node": ">=8" } }, - "node_modules/locate-path": { - "version": "6.0.0", + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14.16" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/loose-envify": { - "version": "1.4.0", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "engines": { + "node": ">=8.6" }, - "bin": { - "loose-envify": "cli.js" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/loupe": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", - "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "license": "MIT" - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "devOptional": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/make-dir": { - "version": "1.3.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">=4" + "node": "^10 || ^12 || >=14" } }, - "node_modules/matcher": { - "version": "3.0.0", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/merge2": { - "version": "1.4.1", + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/micromatch": { - "version": "4.0.8", + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=8.6" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "devOptional": true, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/minimist": { - "version": "1.2.5", - "devOptional": true, - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/mute-stream": { - "version": "2.0.0", - "license": "ISC", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">=6" } }, - "node_modules/nanoid": { - "version": "3.3.8", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/ai" + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, "license": "MIT" }, - "node_modules/node-fetch": { - "version": "3.1.0", + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.2", - "formdata-polyfill": "^4.0.10" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-localstorage": { - "version": "2.2.1", - "license": "MIT", + "node_modules/random-hex-color-generator": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/random-hex-color-generator/-/random-hex-color-generator-1.0.12.tgz", + "integrity": "sha512-4SwGx7eK57okyQT0XBCawKaxU562aDdnhU2DVZF0ZdHCEBaOfw50Ivs3w4J5MiOnkX4HU4UZoPab6jYIGLAmbA==", + "license": "ISC" + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { - "write-file-atomic": "^1.1.4" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "engines": { - "node": ">=0.12" + "bin": { + "rc": "cli.js" } }, - "node_modules/node-localstorage/node_modules/write-file-atomic": { - "version": "1.3.4", - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "devOptional": true, + "node_modules/react-devtools": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/react-devtools/-/react-devtools-5.3.2.tgz", + "integrity": "sha512-Yvx2ZLqIaW0KBdT0C87YTlSzmaLy9vmorBj6dp4hEwfKR74GC/29+hdrTjWFqIVXRNjbknSQPaxFk0qBikwttw==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "cross-spawn": "^5.0.1", + "electron": "^23.1.2", + "internal-ip": "^6.2.0", + "minimist": "^1.2.3", + "react-devtools-core": "5.3.2", + "update-notifier": "^2.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "react-devtools": "bin.js" } }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "devOptional": true, + "node_modules/react-devtools-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.2.tgz", + "integrity": "sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" + "shell-quote": "^1.6.1", + "ws": "^7" } }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "devOptional": true, + "node_modules/react-devtools/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "node_modules/object-hash": { - "version": "3.0.0", + "node_modules/react-devtools/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/object-keys": { - "version": "1.1.1", + "node_modules/react-devtools/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "license": "MIT", - "optional": true, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/once": { - "version": "1.4.0", - "devOptional": true, + "node_modules/react-devtools/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "license": "ISC", "dependencies": { - "wrappy": "1" + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/optionator": { - "version": "0.9.4", + "node_modules/registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "dev": true, "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", + "node_modules/registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", + "dev": true, "license": "MIT", + "dependencies": { + "rc": "^1.0.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" }, - "node_modules/p-finally": { - "version": "1.0.0", - "devOptional": true, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/p-limit": { - "version": "3.1.0", + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "lowercase-keys": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "dev": true, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", "dependencies": { - "p-limit": "^3.0.2" + "glob": "^7.1.3" }, - "engines": { - "node": ">=10" + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/package-json": { - "version": "4.0.1", - "devOptional": true, - "license": "MIT", + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, "dependencies": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/package-json/node_modules/get-stream": { - "version": "3.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4" + "node": ">=8.0" } }, - "node_modules/package-json/node_modules/got": { - "version": "6.7.1", - "devOptional": true, + "node_modules/rollup": { + "version": "4.39.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", + "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", + "dev": true, "license": "MIT", "dependencies": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=4" + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.39.0", + "@rollup/rollup-android-arm64": "4.39.0", + "@rollup/rollup-darwin-arm64": "4.39.0", + "@rollup/rollup-darwin-x64": "4.39.0", + "@rollup/rollup-freebsd-arm64": "4.39.0", + "@rollup/rollup-freebsd-x64": "4.39.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.39.0", + "@rollup/rollup-linux-arm-musleabihf": "4.39.0", + "@rollup/rollup-linux-arm64-gnu": "4.39.0", + "@rollup/rollup-linux-arm64-musl": "4.39.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.39.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0", + "@rollup/rollup-linux-riscv64-gnu": "4.39.0", + "@rollup/rollup-linux-riscv64-musl": "4.39.0", + "@rollup/rollup-linux-s390x-gnu": "4.39.0", + "@rollup/rollup-linux-x64-gnu": "4.39.0", + "@rollup/rollup-linux-x64-musl": "4.39.0", + "@rollup/rollup-win32-arm64-msvc": "4.39.0", + "@rollup/rollup-win32-ia32-msvc": "4.39.0", + "@rollup/rollup-win32-x64-msvc": "4.39.0", + "fsevents": "~2.3.2" } }, - "node_modules/package-json/node_modules/prepend-http": { - "version": "1.0.4", - "devOptional": true, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "node_modules/package-json/node_modules/semver": { - "version": "5.7.1", - "devOptional": true, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "license": "ISC", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/package-json/node_modules/url-parse-lax": { + "node_modules/semver-compare": { "version": "1.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==", + "dev": true, "license": "MIT", "dependencies": { - "prepend-http": "^1.0.1" + "semver": "^5.0.3" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/parent-module": { - "version": "1.0.1", + "node_modules/semver-diff/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/path-exists": { - "version": "4.0.0", + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", + "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "devOptional": true, - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/path-type": { - "version": "4.0.0", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pathval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 14.16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pend": { - "version": "1.2.0", - "devOptional": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, "license": "ISC" }, - "node_modules/picomatch": { - "version": "2.3.1", - "license": "MIT", + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { - "node": ">=8.6" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pify": { + "node_modules/slash": { "version": "3.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/postcss": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz", - "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, + "node_modules/slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", + "license": "ISC", "engines": { - "node": "^10 || ^12 || >=14" + "node": "*" } }, - "node_modules/prelude-ls": { + "node_modules/source-map-js": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/prettier": { - "version": "3.4.2", + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", "dev": true, + "license": "MIT" + }, + "node_modules/stream-chain": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", + "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", + "license": "BSD-3-Clause" + }, + "node_modules/stream-json": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.9.1.tgz", + "integrity": "sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==", + "license": "BSD-3-Clause", + "dependencies": { + "stream-chain": "^2.2.5" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node": ">=8" } }, - "node_modules/progress": { - "version": "2.0.3", - "devOptional": true, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/pseudomap": { - "version": "1.0.2", - "devOptional": true, - "license": "ISC" - }, - "node_modules/pump": { - "version": "3.0.2", - "devOptional": true, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/punycode": { - "version": "2.3.1", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "devOptional": true, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/random-hex-color-generator": { - "version": "1.0.12", - "license": "ISC" - }, - "node_modules/rc": { - "version": "1.2.8", - "devOptional": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "debug": "^4.1.0" }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "devOptional": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 8.0" } }, - "node_modules/react": { - "version": "18.3.1", + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/react-devtools": { - "version": "5.2.0", - "devOptional": true, + "node_modules/swr": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.3.tgz", + "integrity": "sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==", "license": "MIT", "dependencies": { - "cross-spawn": "^5.0.1", - "electron": "^23.1.2", - "ip": "^1.1.4", - "minimist": "^1.2.3", - "react-devtools-core": "5.2.0", - "update-notifier": "^2.1.0" + "dequal": "^2.0.3", + "use-sync-external-store": "^1.4.0" }, - "bin": { - "react-devtools": "bin.js" + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/react-devtools-core": { - "version": "5.2.0", - "devOptional": true, + "node_modules/term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==", + "dev": true, "license": "MIT", "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" + "execa": "^0.7.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/react-devtools/node_modules/cross-spawn": { + "node_modules/term-size/node_modules/cross-spawn": { "version": "5.1.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, "license": "MIT", "dependencies": { "lru-cache": "^4.0.1", @@ -5015,828 +5864,918 @@ "which": "^1.2.9" } }, - "node_modules/react-devtools/node_modules/lru-cache": { - "version": "4.1.5", - "devOptional": true, - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/react-devtools/node_modules/shebang-command": { - "version": "1.2.0", - "devOptional": true, + "node_modules/term-size/node_modules/execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/react-devtools/node_modules/shebang-regex": { - "version": "1.0.0", - "devOptional": true, + "node_modules/term-size/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-devtools/node_modules/which": { - "version": "1.3.1", - "devOptional": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "node": ">=4" } }, - "node_modules/react-devtools/node_modules/yallist": { - "version": "2.1.2", - "devOptional": true, - "license": "ISC" - }, - "node_modules/registry-auth-token": { - "version": "3.4.0", - "devOptional": true, + "node_modules/term-size/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, "license": "MIT", - "dependencies": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/registry-url": { - "version": "3.1.0", - "devOptional": true, + "node_modules/term-size/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, "license": "MIT", "dependencies": { - "rc": "^1.0.1" + "path-key": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "devOptional": true, - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", + "node_modules/term-size/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/responselike": { - "version": "2.0.1", - "devOptional": true, + "node_modules/term-size/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, "license": "MIT", "dependencies": { - "lowercase-keys": "^2.0.0" + "shebang-regex": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", - "devOptional": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/reusify": { - "version": "1.0.4", + "node_modules/term-size/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, "license": "MIT", "engines": { - "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", + "node_modules/term-size/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "ISC" }, - "node_modules/roarr": { - "version": "2.15.4", + "node_modules/term-size/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "BSD-3-Clause", - "optional": true, + "license": "ISC", "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" + "isexe": "^2.0.0" }, - "engines": { - "node": ">=8.0" + "bin": { + "which": "bin/which" } }, - "node_modules/roarr/node_modules/sprintf-js": { - "version": "1.1.3", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, - "license": "BSD-3-Clause", - "optional": true + "license": "MIT" }, - "node_modules/rollup": { - "version": "4.34.6", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.6.tgz", - "integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==", + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.6", - "@rollup/rollup-android-arm64": "4.34.6", - "@rollup/rollup-darwin-arm64": "4.34.6", - "@rollup/rollup-darwin-x64": "4.34.6", - "@rollup/rollup-freebsd-arm64": "4.34.6", - "@rollup/rollup-freebsd-x64": "4.34.6", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.6", - "@rollup/rollup-linux-arm-musleabihf": "4.34.6", - "@rollup/rollup-linux-arm64-gnu": "4.34.6", - "@rollup/rollup-linux-arm64-musl": "4.34.6", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.6", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6", - "@rollup/rollup-linux-riscv64-gnu": "4.34.6", - "@rollup/rollup-linux-s390x-gnu": "4.34.6", - "@rollup/rollup-linux-x64-gnu": "4.34.6", - "@rollup/rollup-linux-x64-musl": "4.34.6", - "@rollup/rollup-win32-arm64-msvc": "4.34.6", - "@rollup/rollup-win32-ia32-msvc": "4.34.6", - "@rollup/rollup-win32-x64-msvc": "4.34.6", - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" + "node": ">=0.10.0" } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "devOptional": true, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, "license": "MIT" }, - "node_modules/safer-buffer": { - "version": "2.1.2", + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, "license": "MIT" }, - "node_modules/semver": { - "version": "7.6.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", "dev": true, "license": "MIT", - "optional": true - }, - "node_modules/semver-diff": { - "version": "2.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "semver": "^5.0.3" - }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "5.7.1", - "devOptional": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node": "^18.0.0 || >=20.0.0" } }, - "node_modules/serialize-error": { - "version": "7.0.1", + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "dev": true, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "license": "MIT", - "optional": true, "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=0.6.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/shell-quote": { - "version": "1.8.2", - "devOptional": true, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, "engines": { - "node": ">= 0.4" + "node": ">= 6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/siginfo": { - "version": "2.0.0", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "ISC" - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "devOptional": true, - "license": "ISC" - }, - "node_modules/slash": { - "version": "3.0.0", "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/slide": { - "version": "1.1.6", - "license": "ISC", + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.17" } }, - "node_modules/stackback": { - "version": "0.0.2", + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, "license": "MIT" }, - "node_modules/std-env": { - "version": "3.8.0", + "node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", "dev": true, - "license": "MIT" - }, - "node_modules/stream-chain": { - "version": "2.2.5", - "license": "BSD-3-Clause" - }, - "node_modules/stream-json": { - "version": "1.9.1", - "license": "BSD-3-Clause", - "dependencies": { - "stream-chain": "^2.2.5" - } - }, - "node_modules/string-width": { - "version": "4.2.3", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "crypto-random-string": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 4.0.0" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "devOptional": true, + "node_modules/unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/sumchecker": { - "version": "3.0.1", - "devOptional": true, - "license": "Apache-2.0", + "node_modules/update-notifier/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.1.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 8.0" + "node": ">=4" } }, - "node_modules/supports-color": { - "version": "7.2.0", + "node_modules/update-notifier/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/swr": { - "version": "2.2.5", + "node_modules/update-notifier/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "license": "MIT", "dependencies": { - "client-only": "^0.0.1", - "use-sync-external-store": "^1.2.0" - }, - "peerDependencies": { - "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + "color-name": "1.1.3" } }, - "node_modules/term-size": { - "version": "1.2.0", - "devOptional": true, + "node_modules/update-notifier/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-notifier/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/update-notifier/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/update-notifier/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "license": "MIT", "dependencies": { - "execa": "^0.7.0" + "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/text-table": { - "version": "0.2.0", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } }, - "node_modules/timed-out": { - "version": "4.0.1", - "devOptional": true, + "node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "dev": true, "license": "MIT", + "dependencies": { + "prepend-http": "^1.0.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/tinybench": { - "version": "2.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "dev": true, - "license": "MIT" + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } }, - "node_modules/tinypool": { - "version": "1.0.2", + "node_modules/vite": { + "version": "5.4.18", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.18.tgz", + "integrity": "sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==", "dev": true, "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/tinyrainbow": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "node_modules/vite-node": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", + "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", "dev": true, "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, "engines": { - "node": ">=14.0.0" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/tinyspy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", - "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=14.0.0" + "node": ">=12" } }, - "node_modules/tmp": { - "version": "0.0.33", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.6.0" + "node": ">=12" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8.0" + "node": ">=12" } }, - "node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" + "node": ">=12" } }, - "node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "node": ">=12" } }, - "node_modules/type-check": { - "version": "0.4.0", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.8.0" + "node": ">=12" } }, - "node_modules/type-fest": { - "version": "0.20.2", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/typescript": { - "version": "5.7.2", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=14.17" + "node": ">=12" } }, - "node_modules/undici-types": { - "version": "5.26.5", - "license": "MIT" - }, - "node_modules/unique-string": { - "version": "1.0.0", - "devOptional": true, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, "license": "MIT", - "dependencies": { - "crypto-random-string": "^1.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/universalify": { - "version": "0.1.2", - "devOptional": true, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 4.0.0" + "node": ">=12" } }, - "node_modules/unzip-response": { - "version": "2.0.1", - "devOptional": true, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/update-notifier": { - "version": "2.5.0", - "devOptional": true, - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/ansi-styles": { - "version": "3.2.1", - "devOptional": true, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "2.4.2", - "devOptional": true, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/color-convert": { - "version": "1.9.3", - "devOptional": true, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/color-name": { - "version": "1.1.3", - "devOptional": true, - "license": "MIT" - }, - "node_modules/update-notifier/node_modules/escape-string-regexp": { - "version": "1.0.5", - "devOptional": true, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.8.0" + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/has-flag": { - "version": "3.0.0", - "devOptional": true, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/supports-color": { - "version": "5.5.0", - "devOptional": true, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/uri-js": { - "version": "4.4.1", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vite": { - "version": "5.4.14", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", - "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">=12" } }, - "node_modules/vite-node": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", - "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.7", - "es-module-lexer": "^1.5.4", - "pathe": "^1.1.2", - "vite": "^5.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "node_modules/vite/node_modules/@esbuild/win32-x64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">=12" @@ -5948,7 +6887,9 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.2.0", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "license": "MIT", "engines": { "node": ">= 8" @@ -5956,10 +6897,14 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -5968,6 +6913,8 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -5982,6 +6929,8 @@ }, "node_modules/why-is-node-running": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", "dependencies": { @@ -5996,57 +6945,21 @@ } }, "node_modules/widest-line": { - "version": "2.0.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "string-width": "^2.1.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "3.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/widest-line/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "2.1.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "4.0.0", - "devOptional": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "license": "MIT", "dependencies": { - "ansi-regex": "^3.0.0" + "string-width": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/word-wrap": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -6055,10 +6968,14 @@ }, "node_modules/wordwrap": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "license": "MIT" }, "node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -6074,22 +6991,27 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "devOptional": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { - "version": "2.4.3", - "devOptional": true, + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==", "license": "ISC", "dependencies": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "slide": "^1.1.5" } }, "node_modules/ws": { "version": "7.5.10", - "devOptional": true, + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.3.0" @@ -6109,15 +7031,26 @@ }, "node_modules/xdg-basedir": { "version": "3.0.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true, + "license": "ISC" + }, "node_modules/yauzl": { "version": "2.10.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", @@ -6125,7 +7058,9 @@ } }, "node_modules/ynab": { - "version": "2.6.0", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/ynab/-/ynab-2.9.0.tgz", + "integrity": "sha512-gb8rFdyaOAgN+RWSHyX26tCropButlpfCPdFb7Mfrj+hr5LBKBLivZPz6Ea70pEcsuS/Vdoj1Nc3kEneWAQYZg==", "license": "Apache-2.0", "dependencies": { "fetch-ponyfill": "^7.1.0" @@ -6136,6 +7071,8 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -6147,6 +7084,8 @@ }, "node_modules/yoctocolors-cjs": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", "license": "MIT", "engines": { "node": ">=18" diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index cd2ee62551f..33999e428d5 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -66,7 +66,44 @@ { "name": "add-transaction", "title": "Add Transaction", - "description": "Adds a new YNAB transaction using AI" + "description": "Add a new YNAB transaction using AI", + "type": "ai", + "input": { + "date": "string", + "payee_name": "string", + "amount": "number", + "account_name": "string", + "memo": "string" + }, + "output": { + "success": "boolean", + "error": "string", + "debug": "any" + } + }, + { + "name": "get-transactions", + "title": "Get Transactions", + "description": "Get YNAB transactions using AI", + "type": "ai", + "input": { + "filter": "string" + }, + "output": { + "transactions": "array" + } + }, + { + "name": "get-transaction-details", + "title": "Get Transaction Details", + "description": "Get details of a specific YNAB transaction using AI", + "type": "ai", + "input": { + "transaction_id": "string" + }, + "output": { + "transaction": "object" + } } ], "keywords": [ @@ -88,7 +125,7 @@ "devDependencies": { "@raycast/eslint-config": "^1.0.11", "@types/node": "^20.17.12", - "@types/react": "^18.3.18", + "@types/react": "^19.1.0", "eslint": "^8.57.1", "eslint-config-prettier": "^8.3.0", "prettier": "^3.4.2", diff --git a/extensions/raynab/src/tools/add-transaction.ts b/extensions/raynab/src/tools/add-transaction.ts index 6ba2fb6e37d..b93fb05426e 100644 --- a/extensions/raynab/src/tools/add-transaction.ts +++ b/extensions/raynab/src/tools/add-transaction.ts @@ -10,7 +10,7 @@ import { formatToReadableAmount } from '@lib/utils'; */ type TransactionInput = { /** - * Optional date for the transaction (ISO format) + * Optional date for the transaction */ date?: string; /** @@ -18,15 +18,15 @@ type TransactionInput = { */ payee_name: string; /** - * The amount of the transaction (positive for income, negative for expense) with a currency symbol + * The amount of the transaction like $25.00 */ amount: number; /** - * Optional date name of the account to create the transaction in + * Optional account name of the account to create the transaction in */ account_name?: string; /** - * Optional memo for the transaction + * Optional memo for the transaction. Any text not part of the previous fields will be added as a memo. */ memo?: string; }; diff --git a/extensions/raynab/src/tools/get-transaction-details.ts b/extensions/raynab/src/tools/get-transaction-details.ts new file mode 100644 index 00000000000..96f5eee0cb4 --- /dev/null +++ b/extensions/raynab/src/tools/get-transaction-details.ts @@ -0,0 +1,52 @@ +import { LocalStorage } from '@raycast/api'; +import { fetchTransactions } from '../lib/api'; +import { Period } from '../types'; + +type GetTransactionDetailsInput = { + /** + * The unique identifier of the transaction to retrieve + */ + transaction_id: string; +}; + +/** + * Get detailed information about a specific YNAB transaction + * @param input The input parameters containing the transaction ID + * @returns Detailed information about the specified transaction + */ +export default async function (input: GetTransactionDetailsInput) { + try { + const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); + const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); + + if (!activeBudgetId) { + return { + success: false, + error: 'No active budget found', + transaction: null, + }; + } + + const transactions = (await fetchTransactions(activeBudgetId, 'current' as Period)) || []; + const transaction = transactions.find((t) => t.id === input.transaction_id); + + if (!transaction) { + return { + success: false, + error: 'Transaction not found', + transaction: null, + }; + } + + return { + success: true, + transaction, + }; + } catch (error) { + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown error occurred', + transaction: null, + }; + } +} diff --git a/extensions/raynab/src/tools/get-transactions.ts b/extensions/raynab/src/tools/get-transactions.ts new file mode 100644 index 00000000000..a19bdc16bc6 --- /dev/null +++ b/extensions/raynab/src/tools/get-transactions.ts @@ -0,0 +1,145 @@ +import { LocalStorage } from '@raycast/api'; +import { fetchTransactions } from '../lib/api'; +import { Period } from '../types'; + +type GetTransactionsInput = { + /** + * Filter type for transactions + * - 'active': Shows unapproved or uncategorized transactions + * - 'recent': Shows the 10 most recent transactions by date + */ + filter: 'active' | 'recent'; + /** + * Optional payee name to filter transactions + */ + payee?: string; + /** + * Optional category name to filter transactions + */ + category?: string; + /** + * Optional query string that might contain period information + */ + query?: string; +}; + +/** + * Detects period from query string + * @param query The input query string + * @returns Detected period or 'month' as default + */ +function detectPeriodFromQuery(query?: string): Period { + if (!query) return 'month'; + + const queryLower = query.toLowerCase(); + + if (queryLower.includes('last year') || queryLower.includes('past year')) return 'year'; + if (queryLower.includes('last quarter') || queryLower.includes('past quarter')) return 'quarter'; + if (queryLower.includes('last month') || queryLower.includes('past month')) return 'month'; + if (queryLower.includes('last week') || queryLower.includes('past week')) return 'week'; + if ( + queryLower.includes('last day') || + queryLower.includes('past day') || + queryLower.includes('yesterday') || + queryLower.includes('today') + ) + return 'day'; + + return 'month'; +} + +/** + * Get transactions from YNAB based on the specified filter + * @param input The input parameters for filtering transactions + * @returns A list of transactions matching the filter criteria + */ +export default async function (input: GetTransactionsInput) { + try { + console.log('get-transactions tool called with:', input); + + const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); + const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); + + if (!activeBudgetId) { + console.log('No active budget found'); + return { + success: false, + error: 'No active budget found', + transactions: [], + }; + } + + // Detect period from query if available + const period = detectPeriodFromQuery(input.query); + console.log(`Detected period: ${period}`); + + const transactions = (await fetchTransactions(activeBudgetId, period)) || []; + console.log(`Fetched ${transactions.length} total transactions from the last ${period}`); + + // First filter by payee and/or category if provided + let filteredTransactions = transactions; + + if (input.payee) { + const payeeLower = input.payee.toLowerCase(); + console.log(`Filtering by payee: ${input.payee}`); + filteredTransactions = filteredTransactions.filter((t) => { + const matches = + t.payee_name?.toLowerCase().includes(payeeLower) || t.payee_id?.toLowerCase().includes(payeeLower); + if (matches) { + console.log(`Found matching transaction: ${t.payee_name} (${t.date})`); + } + return matches; + }); + console.log(`Found ${filteredTransactions.length} transactions matching payee`); + } + + if (input.category) { + const categoryLower = input.category.toLowerCase(); + console.log(`Filtering by category: ${input.category}`); + filteredTransactions = filteredTransactions.filter((t) => { + const matches = + t.category_name?.toLowerCase().includes(categoryLower) || + t.category_id?.toLowerCase().includes(categoryLower); + if (matches) { + console.log(`Found matching transaction: ${t.category_name} (${t.date})`); + } + return matches; + }); + console.log(`Found ${filteredTransactions.length} transactions matching category`); + } + + // Then apply the main filter + if (input.filter === 'recent') { + // Sort by date in descending order and take the 10 most recent + filteredTransactions = filteredTransactions + .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()) + .slice(0, 10); + console.log(`Returning ${filteredTransactions.length} most recent transactions`); + } else { + // Get active (unapproved/uncategorized) transactions + filteredTransactions = filteredTransactions.filter((t) => !t.approved || !t.category_id); + console.log(`Returning ${filteredTransactions.length} active transactions`); + } + + const result = { + success: true, + transactions: filteredTransactions, + }; + console.log('get-transactions tool returned with:', { + ...result, + transactions: result.transactions.map((t) => ({ + payee: t.payee_name, + date: t.date, + amount: t.amount, + })), + }); + return result; + } catch (error) { + console.error('Error in get-transactions tool:', error); + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown error occurred', + transactions: [], + }; + } +} From 37b1a7131edd5e2399953a2374c2f36d0b4ce62c Mon Sep 17 00:00:00 2001 From: omarshahine Date: Fri, 11 Apr 2025 13:32:51 -0700 Subject: [PATCH 05/31] Fixes --- extensions/raynab/CHANGELOG.md | 23 +++++++++++++++++++++++ extensions/raynab/ai.json | 19 ++----------------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/extensions/raynab/CHANGELOG.md b/extensions/raynab/CHANGELOG.md index 4ae856ca95d..ca4890ebbdf 100644 --- a/extensions/raynab/CHANGELOG.md +++ b/extensions/raynab/CHANGELOG.md @@ -1,5 +1,28 @@ # Raynab Changelog +## [Improvements & AI Integration] - {PR_MERGE_DATE} + +### ✨ New Features +- Added error UX for budget selection with clear error messages +- Added support for AI Extensions with transaction management tools + +### 💎 Improvements +- Removed hidden categories in transaction forms +- Improved error handling and user feedback for API calls +- Enhanced transaction form validation and error messages + +### 🐞 Bug Fixes +- Fixed relative time of locally created transactions being set at midnight +- Fixed error messages of certain API calls being swallowed without proper error toast +- Fixed transaction form validation issues +- Resolved issues with transaction form state management + +### 🔧 Technical Updates +- Updated dependencies to latest versions +- Added AI tools configuration with TypeScript types +- Implemented error handling for AI tool operations +- Added comprehensive evals for AI tool testing + ## [Improvements & Bug fixes] - 2025-02-14 - Add a dropdown to choose the transaction's payee. Optionally allow manual input diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json index 1a342ebaf7d..c09e160bf3b 100644 --- a/extensions/raynab/ai.json +++ b/extensions/raynab/ai.json @@ -22,9 +22,7 @@ "name": "get-transactions", "title": "Get Transactions", "description": "Get YNAB transactions using AI", - "input": { - "filter": "string" - }, + "input": {}, "output": { "transactions": "array" } @@ -82,7 +80,6 @@ "payee_name": "Amazon", "amount": -99.99, "account_name": "Credit Card", - "memo": "Office supplies", "category_name": "Office Supplies", "cleared": true }, @@ -92,7 +89,6 @@ "payee_name": "Whole Foods", "amount": -75.25, "account_name": "Checking", - "memo": "Groceries", "category_name": "Groceries", "cleared": true } @@ -102,9 +98,7 @@ { "callsTool": { "name": "get-transactions", - "arguments": { - "filter": "recent" - } + "arguments": {} } } ], @@ -120,7 +114,6 @@ "payee_name": "Amazon", "amount": -99.99, "account_name": "Credit Card", - "memo": "Office supplies", "category_name": "Office Supplies", "cleared": true }, @@ -130,7 +123,6 @@ "payee_name": "Amazon", "amount": -75.25, "account_name": "Credit Card", - "memo": "Books", "category_name": "Entertainment", "cleared": true } @@ -141,7 +133,6 @@ "callsTool": { "name": "get-transactions", "arguments": { - "filter": "recent", "payee": "Amazon", "query": "last year" } @@ -155,13 +146,10 @@ "mocks": { "get-transactions": [ { - "id": "125", "date": "2024-03-10", "payee_name": "Target", "amount": -150.00, "account_name": "Credit Card", - "memo": "Household items", - "category_name": "Household", "cleared": true } ] @@ -171,7 +159,6 @@ "callsTool": { "name": "get-transactions", "arguments": { - "filter": "recent", "payee": "Target", "query": "past month" } @@ -189,8 +176,6 @@ "payee_name": "Amazon", "amount": -99.99, "account_name": "Credit Card", - "memo": "Office supplies", - "category_name": "Office Supplies", "cleared": true } }, From fee100813810bef82c23fd2ae9d9f6d7430e4e41 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Mon, 14 Apr 2025 07:47:19 -0700 Subject: [PATCH 06/31] Enhance Raynab extension with new account management features - Added new AI tools: "Get Accounts" and "Get Account Details" for retrieving YNAB account information and balances. - Updated instructions to include guidance on using the new account balance queries. - Improved example inputs and expected outputs for better clarity in usage. These changes enhance the functionality of the Raynab extension, allowing users to manage their YNAB accounts more effectively. --- extensions/raynab/ai.json | 99 ++++++++++++++++++- extensions/raynab/package.json | 10 ++ .../raynab/src/tools/get-account-details.ts | 50 ++++++++++ extensions/raynab/src/tools/get-accounts.ts | 71 +++++++++++++ 4 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 extensions/raynab/src/tools/get-account-details.ts create mode 100644 extensions/raynab/src/tools/get-accounts.ts diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json index c09e160bf3b..5774738cb41 100644 --- a/extensions/raynab/ai.json +++ b/extensions/raynab/ai.json @@ -1,5 +1,5 @@ { - "instructions": "You are a helpful assistant for managing YNAB (You Need A Budget) transactions. Always format amounts correctly and handle dates in ISO format. Be precise with payee names and account names. When showing transactions, format the information clearly and concisely.\n\nFor transaction queries, you can specify time periods using natural language. The following time periods are supported:\n- 'last year' or 'past year' for the last 12 months\n- 'last quarter' or 'past quarter' for the last 3 months\n- 'last month' or 'past month' for the last 30 days\n- 'last week' or 'past week' for the last 7 days\n- 'last day', 'past day', 'yesterday', or 'today' for the last 24 hours\n\nIf no time period is specified, the default is the last month.", + "instructions": "You are a helpful assistant for managing YNAB (You Need A Budget) transactions. Always format amounts correctly and handle dates in ISO format. Be precise with payee names and account names. When showing transactions, format the information clearly and concisely.\n\nFor transaction queries, you can specify time periods using natural language. The following time periods are supported:\n- 'last year' or 'past year' for the last 12 months\n- 'last quarter' or 'past quarter' for the last 3 months\n- 'last month' or 'past month' for the last 30 days\n- 'last week' or 'past week' for the last 7 days\n- 'last day', 'past day', 'yesterday', or 'today' for the last 24 hours\n\nIf no time period is specified, the default is the last month.\n\nFor account balance queries, use get-accounts or get-account-details tools, not get-transactions.", "tools": [ { "name": "add-transaction", @@ -37,6 +37,30 @@ "output": { "transaction": "object" } + }, + { + "name": "get-accounts", + "title": "Get Accounts", + "description": "Get all YNAB accounts and their balances using AI", + "input": { + "on_budget": "boolean" + }, + "output": { + "accounts": "array", + "error": "string" + } + }, + { + "name": "get-account-details", + "title": "Get Account Details", + "description": "Get details of a specific YNAB account using AI", + "input": { + "account_name": "string" + }, + "output": { + "account": "object", + "error": "string" + } } ], "evals": [ @@ -190,6 +214,79 @@ } ], "usedAsExample": true + }, + { + "input": "@ynab show me my account balances", + "mocks": { + "get-accounts": [ + { + "name": "Checking", + "balance": 5000.00, + "on_budget": true + }, + { + "name": "Savings", + "balance": 10000.00, + "on_budget": true + } + ] + }, + "expected": [ + { + "callsTool": { + "name": "get-accounts", + "arguments": {} + } + } + ], + "usedAsExample": true + }, + { + "input": "@ynab what's my checking account balance?", + "mocks": { + "get-account-details": { + "name": "Checking", + "balance": 5000.00, + "on_budget": true + } + }, + "expected": [ + { + "callsTool": { + "name": "get-account-details", + "arguments": { + "account_name": "Checking" + } + } + } + ], + "usedAsExample": true + }, + { + "input": "@ynab show me all my account balances", + "mocks": { + "get-accounts": [ + { + "name": "Checking", + "balance": 5000.00, + "on_budget": true + }, + { + "name": "Savings", + "balance": 10000.00, + "on_budget": true + } + ] + }, + "expected": [ + { + "callsTool": { + "name": "get-accounts", + "arguments": {} + } + } + ], + "usedAsExample": true } ] } \ No newline at end of file diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index 33999e428d5..fcdf39bfec6 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -104,6 +104,16 @@ "output": { "transaction": "object" } + }, + { + "name": "get-accounts", + "title": "Get Accounts", + "description": "Get all YNAB accounts and their balances using AI" + }, + { + "name": "get-account-details", + "title": "Get Account Details", + "description": "Get details of a specific YNAB account using AI" } ], "keywords": [ diff --git a/extensions/raynab/src/tools/get-account-details.ts b/extensions/raynab/src/tools/get-account-details.ts new file mode 100644 index 00000000000..e16f3f92693 --- /dev/null +++ b/extensions/raynab/src/tools/get-account-details.ts @@ -0,0 +1,50 @@ +import { LocalStorage } from '@raycast/api'; +import { fetchAccounts } from '../lib/api'; +import { Account } from '../types'; + +type GetAccountDetailsInput = { + /** + * The unique identifier of the account to retrieve + */ + accountId: string; +}; + +type GetAccountDetailsOutput = { + success: boolean; + account: Account | null; + error?: string; +}; + +/** + * Get detailed information about a specific YNAB account + * @param input The input parameters containing the account ID + * @returns Detailed information about the specified account + */ +export default async function (input: GetAccountDetailsInput): Promise { + const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); + const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); + + if (!activeBudgetId) { + return { + success: false, + error: 'No active budget found', + account: null, + }; + } + + const accounts = await fetchAccounts(activeBudgetId); + const account = accounts?.find((a) => a.id === input.accountId); + + if (!account) { + return { + success: false, + error: 'Account not found', + account: null, + }; + } + + return { + success: true, + account, + }; +} diff --git a/extensions/raynab/src/tools/get-accounts.ts b/extensions/raynab/src/tools/get-accounts.ts new file mode 100644 index 00000000000..875dc9c49b0 --- /dev/null +++ b/extensions/raynab/src/tools/get-accounts.ts @@ -0,0 +1,71 @@ +import { LocalStorage } from '@raycast/api'; +import { fetchAccounts } from '../lib/api'; +import { Account, CurrencyFormat } from '../types'; +import { formatToReadableAmount } from '../lib/utils/transactions'; + +type GetAccountsOutput = { + success: boolean; + accounts: Array<{ + id: string; + name: string; + balance: string; + type: string; + on_budget: boolean; + }>; + error?: string; +}; + +/** + * Get all accounts from YNAB + * @returns A list of all accounts with formatted data + */ +export default async function (): Promise { + const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); + const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); + + if (!activeBudgetId) { + return { + success: false, + error: 'No active budget found', + accounts: [], + }; + } + + const storedCurrency = await LocalStorage.getItem('activeBudgetCurrency'); + const activeBudgetCurrency = storedCurrency ? (JSON.parse(storedCurrency) as CurrencyFormat) : null; + + const accounts = await fetchAccounts(activeBudgetId); + + // Format accounts to include only relevant fields and filter out closed accounts + const formattedAccounts = (accounts || []) + .filter((account) => !account.closed) + .map((account) => ({ + id: account.id, + name: account.name, + balance: formatToReadableAmount({ + amount: account.balance, + currency: activeBudgetCurrency ?? undefined, + includeSymbol: true, + }), + type: account.type, + on_budget: account.on_budget, + })); + + const result = { + success: true, + accounts: formattedAccounts, + }; + + // Log the result with account details + console.log('get-accounts tool returned with:', { + ...result, + accounts: result.accounts.map((acc) => ({ + name: acc.name, + balance: acc.balance, + type: acc.type, + on_budget: acc.on_budget, + })), + }); + + return result; +} From 90c83b4a7029f448eeede0f5f96ec628e2fc3860 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Mon, 14 Apr 2025 07:52:53 -0700 Subject: [PATCH 07/31] Refine account management descriptions and improve account detail retrieval - Updated descriptions for "Get Accounts" and "Get Account Details" tools to provide clearer usage guidance. - Enhanced input handling in the "Get Account Details" tool to search by account name instead of ID. - Improved error messaging for account retrieval failures and added logging for better debugging. These changes enhance the user experience by providing clearer instructions and more robust account querying capabilities in the Raynab extension. --- extensions/raynab/ai.json | 50 ++++++++++----- .../raynab/src/tools/get-account-details.ts | 62 +++++++++++++++---- 2 files changed, 82 insertions(+), 30 deletions(-) diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json index 5774738cb41..4db0c0ac3d3 100644 --- a/extensions/raynab/ai.json +++ b/extensions/raynab/ai.json @@ -41,7 +41,7 @@ { "name": "get-accounts", "title": "Get Accounts", - "description": "Get all YNAB accounts and their balances using AI", + "description": "Get all YNAB accounts and their balances using AI. Use this for queries about multiple accounts or all accounts.", "input": { "on_budget": "boolean" }, @@ -53,7 +53,7 @@ { "name": "get-account-details", "title": "Get Account Details", - "description": "Get details of a specific YNAB account using AI", + "description": "Get details of a specific YNAB account using AI. Use this for queries about a single account's balance or details.", "input": { "account_name": "string" }, @@ -242,7 +242,7 @@ "usedAsExample": true }, { - "input": "@ynab what's my checking account balance?", + "input": "@ynab what is my checking account balance?", "mocks": { "get-account-details": { "name": "Checking", @@ -263,26 +263,42 @@ "usedAsExample": true }, { - "input": "@ynab show me all my account balances", + "input": "@ynab show me my checking account", "mocks": { - "get-accounts": [ - { - "name": "Checking", - "balance": 5000.00, - "on_budget": true - }, - { - "name": "Savings", - "balance": 10000.00, - "on_budget": true + "get-account-details": { + "name": "Checking", + "balance": 5000.00, + "on_budget": true + } + }, + "expected": [ + { + "callsTool": { + "name": "get-account-details", + "arguments": { + "account_name": "Checking" + } } - ] + } + ], + "usedAsExample": true + }, + { + "input": "@ynab how much is in my checking?", + "mocks": { + "get-account-details": { + "name": "Checking", + "balance": 5000.00, + "on_budget": true + } }, "expected": [ { "callsTool": { - "name": "get-accounts", - "arguments": {} + "name": "get-account-details", + "arguments": { + "account_name": "Checking" + } } } ], diff --git a/extensions/raynab/src/tools/get-account-details.ts b/extensions/raynab/src/tools/get-account-details.ts index e16f3f92693..8cc4bc6ea28 100644 --- a/extensions/raynab/src/tools/get-account-details.ts +++ b/extensions/raynab/src/tools/get-account-details.ts @@ -1,24 +1,31 @@ import { LocalStorage } from '@raycast/api'; import { fetchAccounts } from '../lib/api'; -import { Account } from '../types'; +import { Account, CurrencyFormat } from '../types'; +import { formatToReadableAmount } from '../lib/utils/transactions'; type GetAccountDetailsInput = { /** - * The unique identifier of the account to retrieve + * The name of the account to retrieve */ - accountId: string; + account_name: string; }; type GetAccountDetailsOutput = { success: boolean; - account: Account | null; + account?: { + id: string; + name: string; + balance: string; + type: string; + on_budget: boolean; + }; error?: string; }; /** - * Get detailed information about a specific YNAB account - * @param input The input parameters containing the account ID - * @returns Detailed information about the specified account + * Get details of a specific YNAB account + * @param input The account name to search for + * @returns Details of the matching account */ export default async function (input: GetAccountDetailsInput): Promise { const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); @@ -28,23 +35,52 @@ export default async function (input: GetAccountDetailsInput): Promise('activeBudgetCurrency'); + const activeBudgetCurrency = storedCurrency ? (JSON.parse(storedCurrency) as CurrencyFormat) : null; + const accounts = await fetchAccounts(activeBudgetId); - const account = accounts?.find((a) => a.id === input.accountId); + const searchQuery = input.account_name.toLowerCase(); + + // Find the account by matching the name + const account = (accounts || []).find( + (acc) => acc.name.toLowerCase().includes(searchQuery) || searchQuery.includes(acc.name.toLowerCase()), + ); if (!account) { return { success: false, - error: 'Account not found', - account: null, + error: `No account found matching "${input.account_name}"`, }; } - return { + const result = { success: true, - account, + account: { + id: account.id, + name: account.name, + balance: formatToReadableAmount({ + amount: account.balance, + currency: activeBudgetCurrency ?? undefined, + includeSymbol: true, + }), + type: account.type, + on_budget: account.on_budget, + }, }; + + // Log the result with account details + console.log('get-account-details tool returned with:', { + ...result, + account: { + name: result.account.name, + balance: result.account.balance, + type: result.account.type, + on_budget: result.account.on_budget, + }, + }); + + return result; } From b2f66c3bbf630d8a2f63f2ef8a4f0e684c056f37 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Mon, 14 Apr 2025 08:12:46 -0700 Subject: [PATCH 08/31] Enhance transaction creation functionality and error handling - Added a validation reset trigger in the TransactionCreateForm to ensure category list updates are properly handled. - Improved error messaging in the add-transaction tool to provide clearer guidance when no account is specified. - Filtered available accounts to exclude closed accounts and those not on budget, enhancing the accuracy of account retrieval. These changes improve the user experience by ensuring better validation and clearer error messages in the Raynab extension. --- .../transactions/transactionCreateForm.tsx | 2 ++ extensions/raynab/src/tools/add-transaction.ts | 12 ++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx index 74774c65d53..fe058d83e3d 100644 --- a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx @@ -343,6 +343,8 @@ export function TransactionCreateForm({ accountId, transaction }: TransactionCre setCategoryList(newCategories); setSubtransactions([]); } + // Force validation reset + itemProps.categoryList.onChange?.(newCategories); }} > {categoryItems} diff --git a/extensions/raynab/src/tools/add-transaction.ts b/extensions/raynab/src/tools/add-transaction.ts index b93fb05426e..75079513b72 100644 --- a/extensions/raynab/src/tools/add-transaction.ts +++ b/extensions/raynab/src/tools/add-transaction.ts @@ -35,8 +35,9 @@ type TransactionInput = { * Helper function to find a valid account by name or ID */ function findAccount(accounts: Account[], accountName?: string, accountId?: string): Account | undefined { + // If no account specified, we'll need to ask the user if (!accountName && !accountId) { - throw new Error('Either account_name or account_id must be provided'); + throw new Error('Please specify an account for this transaction'); } // First try to find by ID if provided @@ -59,7 +60,10 @@ function findAccount(accounts: Account[], accountName?: string, accountId?: stri } // If we get here, no account was found - const availableAccounts = accounts.map((acc) => acc.name).join(', '); + const availableAccounts = accounts + .filter((acc) => !acc.closed && acc.on_budget) + .map((acc) => acc.name) + .join(', '); throw new Error(`Account not found. Available accounts: ${availableAccounts}`); } @@ -91,8 +95,8 @@ function formatTransactionData(account: Account, input: TransactionInput) { date = new Date().toISOString().split('T')[0]; } - // Ensure amount is positive - the form will handle the sign - const amount = Math.abs(input.amount); + // Convert amount to negative for withdrawals (positive amounts are deposits) + const amount = input.amount < 0 ? input.amount : -input.amount; return { account_id: account.id, From 5eba54bab7ac7fededc318209cfd3baf2615b8b7 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Mon, 14 Apr 2025 19:46:29 -0700 Subject: [PATCH 09/31] Refactor YNAB transaction tools and enhance functionality - Removed outdated tools from the AI instructions in ai.json to streamline the transaction management process. - Introduced new input parameters for the "Get Transactions" tool, allowing for optional filters and improved output structure with success and error handling. - Added a new "Get Big Numbers" tool to retrieve spending statistics for today, this week, and this month, enhancing user insights into their budgeting. - Updated the transaction fetching logic to utilize the new input structure and improve data formatting. These changes enhance the Raynab extension's transaction management capabilities, providing users with more flexible querying options and clearer output. --- extensions/raynab/ai.json | 136 ++++++++++-------- extensions/raynab/package.json | 46 +++++- .../raynab/src/tools/get-account-details.ts | 2 +- extensions/raynab/src/tools/get-accounts.ts | 2 +- .../raynab/src/tools/get-big-numbers.ts | 129 +++++++++++++++++ .../raynab/src/tools/get-transactions.ts | 60 +++----- 6 files changed, 265 insertions(+), 110 deletions(-) create mode 100644 extensions/raynab/src/tools/get-big-numbers.ts diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json index 4db0c0ac3d3..dbb24579b71 100644 --- a/extensions/raynab/ai.json +++ b/extensions/raynab/ai.json @@ -1,68 +1,5 @@ { "instructions": "You are a helpful assistant for managing YNAB (You Need A Budget) transactions. Always format amounts correctly and handle dates in ISO format. Be precise with payee names and account names. When showing transactions, format the information clearly and concisely.\n\nFor transaction queries, you can specify time periods using natural language. The following time periods are supported:\n- 'last year' or 'past year' for the last 12 months\n- 'last quarter' or 'past quarter' for the last 3 months\n- 'last month' or 'past month' for the last 30 days\n- 'last week' or 'past week' for the last 7 days\n- 'last day', 'past day', 'yesterday', or 'today' for the last 24 hours\n\nIf no time period is specified, the default is the last month.\n\nFor account balance queries, use get-accounts or get-account-details tools, not get-transactions.", - "tools": [ - { - "name": "add-transaction", - "title": "Add Transaction", - "description": "Add a new YNAB transaction using AI", - "input": { - "date": "string", - "payee_name": "string", - "amount": "number", - "account_name": "string", - "memo": "string" - }, - "output": { - "success": "boolean", - "error": "string", - "debug": "any" - } - }, - { - "name": "get-transactions", - "title": "Get Transactions", - "description": "Get YNAB transactions using AI", - "input": {}, - "output": { - "transactions": "array" - } - }, - { - "name": "get-transaction-details", - "title": "Get Transaction Details", - "description": "Get details of a specific YNAB transaction using AI", - "input": { - "transaction_id": "string" - }, - "output": { - "transaction": "object" - } - }, - { - "name": "get-accounts", - "title": "Get Accounts", - "description": "Get all YNAB accounts and their balances using AI. Use this for queries about multiple accounts or all accounts.", - "input": { - "on_budget": "boolean" - }, - "output": { - "accounts": "array", - "error": "string" - } - }, - { - "name": "get-account-details", - "title": "Get Account Details", - "description": "Get details of a specific YNAB account using AI. Use this for queries about a single account's balance or details.", - "input": { - "account_name": "string" - }, - "output": { - "account": "object", - "error": "string" - } - } - ], "evals": [ { "input": "@ynab add a transaction for $25.50 at Starbucks", @@ -303,6 +240,79 @@ } ], "usedAsExample": true + }, + { + "input": "@ynab what are my big three numbers?", + "mocks": { + "get-big-numbers": { + "success": true, + "today": "$150.00", + "thisWeek": "$750.00", + "thisMonth": "$2,500.00" + } + }, + "expected": [ + { + "callsTool": { + "name": "get-big-numbers", + "arguments": {} + } + } + ], + "usedAsExample": true + }, + { + "input": "@ynab show me my big numbers", + "mocks": { + "get-big-numbers": { + "success": true, + "today": "$150.00", + "thisWeek": "$750.00", + "thisMonth": "$2,500.00" + } + }, + "expected": [ + { + "callsTool": { + "name": "get-big-numbers", + "arguments": {} + } + } + ], + "usedAsExample": true + }, + { + "input": "@ynab what did I spend at amazon last month?", + "mocks": { + "get-transactions": [ + { + "date": "2024-03-10", + "payee_name": "Amazon", + "amount": -150.00, + "account_name": "Credit Card", + "cleared": true + }, + { + "date": "2024-03-05", + "payee_name": "Amazon.com", + "amount": -75.25, + "account_name": "Credit Card", + "cleared": true + } + ] + }, + "expected": [ + { + "callsTool": { + "name": "get-transactions", + "arguments": { + "payee": "Amazon", + "query": "last month" + } + } + } + ], + "usedAsExample": true } ] } \ No newline at end of file diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index fcdf39bfec6..bf4c8f70f27 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -87,10 +87,15 @@ "description": "Get YNAB transactions using AI", "type": "ai", "input": { - "filter": "string" + "filter": "string?", + "payee": "string?", + "category": "string?", + "period": "string?" }, "output": { - "transactions": "array" + "success": "boolean", + "transactions": "array", + "error": "string" } }, { @@ -108,12 +113,45 @@ { "name": "get-accounts", "title": "Get Accounts", - "description": "Get all YNAB accounts and their balances using AI" + "description": "Get all YNAB accounts and their balances using AI", + "type": "ai", + "input": { + "on_budget": "boolean?" + }, + "output": { + "success": "boolean", + "accounts": "array", + "error": "string" + } }, { "name": "get-account-details", "title": "Get Account Details", - "description": "Get details of a specific YNAB account using AI" + "description": "Get details of a specific YNAB account using AI", + "type": "ai", + "input": { + "account_name": "string" + }, + "output": { + "success": "boolean", + "account": "object", + "error": "string" + } + }, + { + "name": "get-big-numbers", + "title": "Big Numbers", + "description": "Get spending statistics for today, this week, and this month from budget accounts", + "type": "ai", + "input": {}, + "output": { + "success": "boolean", + "today": "string", + "thisWeek": "string", + "thisMonth": "string", + "error": "string", + "debug": "any" + } } ], "keywords": [ diff --git a/extensions/raynab/src/tools/get-account-details.ts b/extensions/raynab/src/tools/get-account-details.ts index 8cc4bc6ea28..f912bc23ce6 100644 --- a/extensions/raynab/src/tools/get-account-details.ts +++ b/extensions/raynab/src/tools/get-account-details.ts @@ -1,6 +1,6 @@ import { LocalStorage } from '@raycast/api'; import { fetchAccounts } from '../lib/api'; -import { Account, CurrencyFormat } from '../types'; +import { CurrencyFormat } from '../types'; import { formatToReadableAmount } from '../lib/utils/transactions'; type GetAccountDetailsInput = { diff --git a/extensions/raynab/src/tools/get-accounts.ts b/extensions/raynab/src/tools/get-accounts.ts index 875dc9c49b0..eaaeaefe59b 100644 --- a/extensions/raynab/src/tools/get-accounts.ts +++ b/extensions/raynab/src/tools/get-accounts.ts @@ -1,6 +1,6 @@ import { LocalStorage } from '@raycast/api'; import { fetchAccounts } from '../lib/api'; -import { Account, CurrencyFormat } from '../types'; +import { CurrencyFormat } from '../types'; import { formatToReadableAmount } from '../lib/utils/transactions'; type GetAccountsOutput = { diff --git a/extensions/raynab/src/tools/get-big-numbers.ts b/extensions/raynab/src/tools/get-big-numbers.ts new file mode 100644 index 00000000000..e6f331fe414 --- /dev/null +++ b/extensions/raynab/src/tools/get-big-numbers.ts @@ -0,0 +1,129 @@ +import { LocalStorage } from '@raycast/api'; +import { fetchTransactions, fetchAccounts } from '../lib/api'; +import { formatToReadableAmount } from '../lib/utils/transactions'; +import type { TransactionDetail, CurrencyFormat, Period } from '@srcTypes'; + +interface BigNumbersOutput { + success: boolean; + today: string; + thisWeek: string; + thisMonth: string; + error?: string; + debug?: any; +} + +export const getBigNumbers = async (): Promise => { + try { + console.log('get-big-numbers tool called'); + + const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); + const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); + + if (!activeBudgetId) { + console.log('No active budget found'); + return { + success: false, + today: '0', + thisWeek: '0', + thisMonth: '0', + error: 'No active budget found', + }; + } + + const storedCurrency = await LocalStorage.getItem('activeBudgetCurrency'); + const activeBudgetCurrency = storedCurrency ? (JSON.parse(storedCurrency) as CurrencyFormat) : null; + + // Get all accounts to filter valid ones + const accounts = await fetchAccounts(activeBudgetId); + console.log(`Fetched ${accounts?.length || 0} total accounts`); + + // Format accounts to include only relevant fields and filter out closed accounts + const validAccounts = (accounts || []) + .filter((account) => !account.closed && account.on_budget) + .map((account) => account.id); + + console.log(`Found ${validAccounts.length} valid accounts (non-closed and on-budget)`); + + if (validAccounts.length === 0) { + return { + success: false, + today: '0', + thisWeek: '0', + thisMonth: '0', + error: 'No valid accounts found for the selected budget', + }; + } + + // Get transactions for the last month + const transactions = (await fetchTransactions(activeBudgetId, 'month' as Period)) ?? []; + console.log(`Fetched ${transactions.length} total transactions from the last month`); + + if (transactions.length === 0) { + console.log('No transactions found'); + return { + success: true, + today: '0', + thisWeek: '0', + thisMonth: '0', + }; + } + + const now = new Date(); + const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); + const weekAgo = new Date(today); + weekAgo.setDate(weekAgo.getDate() - 7); + const monthAgo = new Date(today); + monthAgo.setMonth(monthAgo.getMonth() - 1); + + // Filter transactions to only include non-transfer spending from valid accounts + const validTransactions = transactions.filter( + (t) => !t.transfer_account_id && t.amount < 0 && validAccounts.includes(t.account_id), + ); + + console.log(`Found ${validTransactions.length} valid transactions (non-transfer, spending, from valid accounts)`); + + // Calculate spending for each period + const todaySpending = validTransactions + .filter((t) => new Date(t.date) >= today) + .reduce((sum, t) => sum + Math.abs(t.amount), 0); + + const weekSpending = validTransactions + .filter((t) => new Date(t.date) >= weekAgo) + .reduce((sum, t) => sum + Math.abs(t.amount), 0); + + const monthSpending = validTransactions + .filter((t) => new Date(t.date) >= monthAgo) + .reduce((sum, t) => sum + Math.abs(t.amount), 0); + + // Log the results for debugging + console.log('get-big-numbers tool calculated:', { + todaySpending, + weekSpending, + monthSpending, + validTransactionsCount: validTransactions.length, + totalTransactionsCount: transactions.length, + period: 'month', + validAccountIds: validAccounts, + }); + + return { + success: true, + today: formatToReadableAmount({ amount: todaySpending, currency: activeBudgetCurrency }), + thisWeek: formatToReadableAmount({ amount: weekSpending, currency: activeBudgetCurrency }), + thisMonth: formatToReadableAmount({ amount: monthSpending, currency: activeBudgetCurrency }), + }; + } catch (error) { + console.error('Error in get-big-numbers tool:', error); + return { + success: false, + today: '0', + thisWeek: '0', + thisMonth: '0', + error: error instanceof Error ? error.message : 'Unknown error occurred', + debug: error, + }; + } +}; + +// Add default export +export default getBigNumbers; diff --git a/extensions/raynab/src/tools/get-transactions.ts b/extensions/raynab/src/tools/get-transactions.ts index a19bdc16bc6..d9d71ef7e2f 100644 --- a/extensions/raynab/src/tools/get-transactions.ts +++ b/extensions/raynab/src/tools/get-transactions.ts @@ -1,14 +1,15 @@ import { LocalStorage } from '@raycast/api'; import { fetchTransactions } from '../lib/api'; import { Period } from '../types'; +import { formatToReadableAmount } from '../lib/utils/transactions'; +import type { CurrencyFormat } from '@srcTypes'; type GetTransactionsInput = { /** * Filter type for transactions * - 'active': Shows unapproved or uncategorized transactions - * - 'recent': Shows the 10 most recent transactions by date */ - filter: 'active' | 'recent'; + filter?: string; /** * Optional payee name to filter transactions */ @@ -18,36 +19,11 @@ type GetTransactionsInput = { */ category?: string; /** - * Optional query string that might contain period information + * Optional period to fetch transactions for */ - query?: string; + period?: Period; }; -/** - * Detects period from query string - * @param query The input query string - * @returns Detected period or 'month' as default - */ -function detectPeriodFromQuery(query?: string): Period { - if (!query) return 'month'; - - const queryLower = query.toLowerCase(); - - if (queryLower.includes('last year') || queryLower.includes('past year')) return 'year'; - if (queryLower.includes('last quarter') || queryLower.includes('past quarter')) return 'quarter'; - if (queryLower.includes('last month') || queryLower.includes('past month')) return 'month'; - if (queryLower.includes('last week') || queryLower.includes('past week')) return 'week'; - if ( - queryLower.includes('last day') || - queryLower.includes('past day') || - queryLower.includes('yesterday') || - queryLower.includes('today') - ) - return 'day'; - - return 'month'; -} - /** * Get transactions from YNAB based on the specified filter * @param input The input parameters for filtering transactions @@ -69,9 +45,11 @@ export default async function (input: GetTransactionsInput) { }; } - // Detect period from query if available - const period = detectPeriodFromQuery(input.query); - console.log(`Detected period: ${period}`); + const storedCurrency = await LocalStorage.getItem('activeBudgetCurrency'); + const activeBudgetCurrency = storedCurrency ? (JSON.parse(storedCurrency) as CurrencyFormat) : null; + + const period = input.period || 'month'; + console.log(`Using period: ${period}`); const transactions = (await fetchTransactions(activeBudgetId, period)) || []; console.log(`Fetched ${transactions.length} total transactions from the last ${period}`); @@ -108,22 +86,22 @@ export default async function (input: GetTransactionsInput) { console.log(`Found ${filteredTransactions.length} transactions matching category`); } - // Then apply the main filter - if (input.filter === 'recent') { - // Sort by date in descending order and take the 10 most recent - filteredTransactions = filteredTransactions - .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()) - .slice(0, 10); - console.log(`Returning ${filteredTransactions.length} most recent transactions`); - } else { + // Then apply the main filter if specified + if (input.filter === 'active') { // Get active (unapproved/uncategorized) transactions filteredTransactions = filteredTransactions.filter((t) => !t.approved || !t.category_id); console.log(`Returning ${filteredTransactions.length} active transactions`); } + // Sort by date in descending order + filteredTransactions = filteredTransactions.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()); + const result = { success: true, - transactions: filteredTransactions, + transactions: filteredTransactions.map((t) => ({ + ...t, + amount: formatToReadableAmount({ amount: t.amount, currency: activeBudgetCurrency }), + })), }; console.log('get-transactions tool returned with:', { ...result, From 4ce01940c6468a9c1fffa712aa5cc5337a4e4350 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Mon, 14 Apr 2025 20:07:44 -0700 Subject: [PATCH 10/31] Refactor transaction handling in Raynab extension - Updated AI instructions in ai.json to replace the "Get Transaction Details" tool with a more versatile "Get Transactions" tool, allowing for improved transaction querying and output structure. - Enhanced the TransactionCreateForm component to include subtransaction handling and automatic closure of the Raycast window upon successful transaction creation. - Removed the obsolete get-transaction-details tool to streamline the codebase. These changes improve the functionality and user experience of the Raynab extension by providing more flexible transaction management options. --- extensions/raynab/ai.json | 85 ++++++++++++++++--- extensions/raynab/package.json | 12 --- .../transactions/transactionCreateForm.tsx | 3 + .../src/tools/get-transaction-details.ts | 52 ------------ 4 files changed, 78 insertions(+), 74 deletions(-) delete mode 100644 extensions/raynab/src/tools/get-transaction-details.ts diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json index dbb24579b71..57529994993 100644 --- a/extensions/raynab/ai.json +++ b/extensions/raynab/ai.json @@ -129,23 +129,88 @@ "usedAsExample": true }, { - "input": "@ynab what was my Amazon purchase on March 14th?", + "input": "@ynab what was my transaction with Amazon on March 14", "mocks": { - "get-transaction-details": { - "id": "123", - "date": "2024-03-14", - "payee_name": "Amazon", - "amount": -99.99, - "account_name": "Credit Card", - "cleared": true + "get-transactions": { + "success": true, + "transactions": [ + { + "id": "123", + "date": "2024-03-14", + "payee_name": "Amazon", + "amount": -85.00, + "account_name": "Chase Amazon card" + } + ] + } + }, + "expected": [ + { + "callsTool": { + "name": "get-transactions", + "arguments": { + "payee": "Amazon", + "period": "month" + } + } + } + ], + "usedAsExample": true + }, + { + "input": "@ynab show me my transactions with Amazon this month", + "mocks": { + "get-transactions": { + "success": true, + "transactions": [ + { + "id": "456", + "date": "2024-03-15", + "payee_name": "Amazon", + "amount": -99.99, + "account_name": "Credit Card" + } + ] } }, "expected": [ { "callsTool": { - "name": "get-transaction-details", + "name": "get-transactions", + "arguments": { + "payee": "Amazon", + "period": "month" + } + } + } + ], + "usedAsExample": true + }, + { + "input": "@ynab what are my active transactions", + "mocks": { + "get-transactions": { + "success": true, + "transactions": [ + { + "id": "789", + "date": "2024-03-16", + "payee_name": "Grocery Store", + "amount": -50.00, + "account_name": "Checking", + "category_name": "Groceries", + "cleared": false, + "approved": false + } + ] + } + }, + "expected": [ + { + "callsTool": { + "name": "get-transactions", "arguments": { - "transaction_id": "123" + "filter": "active" } } } diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index bf4c8f70f27..9f59ae1d3d9 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -98,18 +98,6 @@ "error": "string" } }, - { - "name": "get-transaction-details", - "title": "Get Transaction Details", - "description": "Get details of a specific YNAB transaction using AI", - "type": "ai", - "input": { - "transaction_id": "string" - }, - "output": { - "transaction": "object" - } - }, { "name": "get-accounts", "title": "Get Accounts", diff --git a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx index fe058d83e3d..8edb99b5d9c 100644 --- a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx @@ -9,6 +9,7 @@ import { confirmAlert, Alert, captureException, + useNavigation, } from '@raycast/api'; import { FormValidation, useForm, useLocalStorage } from '@raycast/utils'; import { useMemo, useState } from 'react'; @@ -64,6 +65,7 @@ interface TransactionCreateFormProps { } export function TransactionCreateForm({ accountId, transaction }: TransactionCreateFormProps) { + const { pop } = useNavigation(); // 1. All hooks must be called unconditionally at the top const { value: activeBudgetId = '', isLoading: isLoadingBudgetId } = useLocalStorage('activeBudgetId', ''); const { value: activeBudgetCurrency } = useLocalStorage('activeBudgetCurrency', null); @@ -220,6 +222,7 @@ export function TransactionCreateForm({ accountId, transaction }: TransactionCre await mutate(createTransaction(activeBudgetId, transactionData)); toast.style = Toast.Style.Success; toast.title = 'Transaction created successfully'; + pop(); } catch (error) { toast.style = Toast.Style.Failure; captureException(error); diff --git a/extensions/raynab/src/tools/get-transaction-details.ts b/extensions/raynab/src/tools/get-transaction-details.ts deleted file mode 100644 index 96f5eee0cb4..00000000000 --- a/extensions/raynab/src/tools/get-transaction-details.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { LocalStorage } from '@raycast/api'; -import { fetchTransactions } from '../lib/api'; -import { Period } from '../types'; - -type GetTransactionDetailsInput = { - /** - * The unique identifier of the transaction to retrieve - */ - transaction_id: string; -}; - -/** - * Get detailed information about a specific YNAB transaction - * @param input The input parameters containing the transaction ID - * @returns Detailed information about the specified transaction - */ -export default async function (input: GetTransactionDetailsInput) { - try { - const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); - const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); - - if (!activeBudgetId) { - return { - success: false, - error: 'No active budget found', - transaction: null, - }; - } - - const transactions = (await fetchTransactions(activeBudgetId, 'current' as Period)) || []; - const transaction = transactions.find((t) => t.id === input.transaction_id); - - if (!transaction) { - return { - success: false, - error: 'Transaction not found', - transaction: null, - }; - } - - return { - success: true, - transaction, - }; - } catch (error) { - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown error occurred', - transaction: null, - }; - } -} From 6aa1c72e067c67df2756dd1b746af157bd9e4f4c Mon Sep 17 00:00:00 2001 From: omarshahine Date: Mon, 14 Apr 2025 20:19:31 -0700 Subject: [PATCH 11/31] Refactor transaction edit form and update AI instructions - Removed outdated example input from ai.json to streamline transaction querying. - Simplified imports in transactionEditForm.tsx for better readability. - Enhanced state management for payees and categories, ensuring proper validation and handling of transaction data. - Improved loading state handling and validation messages in the transaction edit form. These changes enhance the user experience by providing clearer transaction management and improved code maintainability in the Raynab extension. --- extensions/raynab/ai.json | 31 --- .../transactions/transactionEditForm.tsx | 218 +++++------------- 2 files changed, 64 insertions(+), 185 deletions(-) diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json index 57529994993..005a65bff7c 100644 --- a/extensions/raynab/ai.json +++ b/extensions/raynab/ai.json @@ -186,37 +186,6 @@ ], "usedAsExample": true }, - { - "input": "@ynab what are my active transactions", - "mocks": { - "get-transactions": { - "success": true, - "transactions": [ - { - "id": "789", - "date": "2024-03-16", - "payee_name": "Grocery Store", - "amount": -50.00, - "account_name": "Checking", - "category_name": "Groceries", - "cleared": false, - "approved": false - } - ] - } - }, - "expected": [ - { - "callsTool": { - "name": "get-transactions", - "arguments": { - "filter": "active" - } - } - } - ], - "usedAsExample": true - }, { "input": "@ynab show me my account balances", "mocks": { diff --git a/extensions/raynab/src/components/transactions/transactionEditForm.tsx b/extensions/raynab/src/components/transactions/transactionEditForm.tsx index bf9b7759363..2693ea7ff2e 100644 --- a/extensions/raynab/src/components/transactions/transactionEditForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionEditForm.tsx @@ -1,40 +1,16 @@ import { updateTransaction } from '@lib/api'; -import { - autoDistribute, - easyGetColorFromId, - formatToReadableAmount, - formatToYnabAmount, - getSubtransacionCategoryname, - isSplitTransaction, - onSubtransactionAmountChangeHandler, -} from '@lib/utils'; +import { autoDistribute, easyGetColorFromId, formatToReadableAmount, formatToYnabAmount, getSubtransacionCategoryname, isSplitTransaction, onSubtransactionAmountChangeHandler } from '@lib/utils'; import { TransactionClearedStatus, TransactionFlagColor } from 'ynab'; -import { - Action, - ActionPanel, - Alert, - confirmAlert, - Color, - Form, - Icon, - showToast, - Toast, - useNavigation, - getPreferenceValues, - captureException, -} from '@raycast/api'; +import { Action, ActionPanel, confirmAlert, Color, Form, Icon, showToast, Toast, useNavigation, getPreferenceValues, captureException } from '@raycast/api'; import { FormValidation, useForm, useLocalStorage } from '@raycast/utils'; import { CurrencyFormat, Period, SaveSubTransactionWithReadableAmounts, TransactionDetail } from '@srcTypes'; import { useEffect, useState } from 'react'; - import { useCategoryGroups } from '@hooks/useCategoryGroups'; import { usePayees } from '@hooks/usePayees'; import { useTransactions } from '@hooks/useTransactions'; import { AutoDistributeAction } from '@components/actions/autoDistributeAction'; import { Shortcuts } from '@constants'; -const preferences = getPreferenceValues(); - interface FormValues { date: Date | null; amount: string; @@ -61,30 +37,46 @@ export function TransactionEditForm({ transaction, forApproval = false }: Transa const { value: timeline } = useLocalStorage('timeline', 'month'); const { mutate } = useTransactions(activeBudgetId, timeline); - const { data: payees, isLoading: isLoadingPayees } = usePayees(activeBudgetId); - const { data: categoryGroups, isLoading: isLoadingCategories } = useCategoryGroups(activeBudgetId); + const { data: payees = [], isLoading: isLoadingPayees } = usePayees(activeBudgetId || ''); + const { data: categoryGroups, isLoading: isLoadingCategories } = useCategoryGroups(activeBudgetId || ''); + + const isLoading = isLoadingCategories || isLoadingPayees; + const categories = categoryGroups?.flatMap((group) => group.categories).filter((c) => !c.hidden); + const [selectOwnPayee, setselectOwnPayee] = useState(false); + const [isTransfer, setIsTransfer] = useState(false); const [amount, setAmount] = useState(() => formatToReadableAmount({ amount: transaction.amount, currency: activeBudgetCurrency, includeSymbol: false }), ); + const [subtransactions, setSubtransactions] = useState(() => { - return transaction.subtransactions.map((s) => ({ - ...s, - amount: formatToReadableAmount({ amount: s.amount, currency: activeBudgetCurrency, includeSymbol: false }), - })); + return ( + transaction.subtransactions?.map((s) => ({ + ...s, + amount: formatToReadableAmount({ amount: s.amount, currency: activeBudgetCurrency, includeSymbol: false }), + })) ?? [] + ); }); - const [categoryList, setCategoryList] = useState(() => { - if (isSplitTransaction(transaction)) { - return subtransactions.map((s) => s.category_id ?? ''); - } - return [transaction.category_id ?? '']; + const [categoryList, setCategoryList] = useState(() => { + if (!categories) return []; + const initialCategories = transaction.subtransactions?.length + ? transaction.subtransactions.map((s) => s.category_id ?? '') + : [transaction.category_id ?? '']; + + return initialCategories.filter((catId) => categories.some((cat) => cat.id === catId)); }); - // It can happen that the payee name is not in the list of payees - // creating a new payee require providing a name instead of an id - const [selectOwnPayee, setselectOwnPayee] = useState(false); + // Update categoryList when categories change + useEffect(() => { + if (categories) { + const validCategories = categoryList.filter((catId) => categories.some((cat) => cat.id === catId)); + if (validCategories.length !== categoryList.length) { + setCategoryList(validCategories); + } + } + }, [categories]); // Only depend on categories const currencySymbol = activeBudgetCurrency?.currency_symbol; @@ -106,26 +98,45 @@ export function TransactionEditForm({ transaction, forApproval = false }: Transa initialValues: { date: new Date(transaction.date), amount: formatToReadableAmount({ amount: transaction.amount, locale: false }), - payee_id: transaction.payee_id ?? undefined, + payee_id: payees?.some((p) => p.id === transaction.payee_id) ? (transaction.payee_id ?? '') : '', memo: transaction.memo ?? '', flag_color: transaction.flag_color?.toString() ?? undefined, - categoryList: - categoryList.length > 0 && !!categoryList[0] ? categoryList : subtransactions.map((s) => s.category_id ?? ''), + categoryList: categoryList, // Use the validated category list + }, + validation: { + date: FormValidation.Required, + amount: FormValidation.Required, + payee_id: (value) => { + if (!selectOwnPayee && !value) { + return 'Please select or enter a payee'; + } + }, + categoryList: (value) => { + if (!isTransfer && (!value || value.length === 0)) { + return 'Please add at least one category'; + } + }, }, onSubmit: async (values) => { const toast = await showToast({ style: Toast.Style.Animated, title: 'Updating Transaction' }); try { const transactionData = { - ...transaction, + ...values, date: (values.date ?? new Date()).toISOString(), - flag_color: values.flag_color ? (values.flag_color as TransactionFlagColor) : null, amount: formatToYnabAmount(values.amount, activeBudgetCurrency), - payee_id: values.payee_id, - memo: values.memo || null, - category_id: values.categoryList?.[0] || undefined, - payee_name: values.payee_name || transaction.payee_name, approved: true, + category_id: isTransfer ? null : values.categoryList?.[0] || undefined, + payee_name: values.payee_id ? undefined : values.payee_name, + cleared: values.cleared ? TransactionClearedStatus.Cleared : TransactionClearedStatus.Uncleared, + flag_color: values.flag_color ? (values.flag_color as TransactionFlagColor) : null, + subtransactions: + subtransactions.length > 0 + ? subtransactions.map((s) => ({ + ...s, + amount: formatToYnabAmount(s.amount, activeBudgetCurrency), + })) + : undefined, }; if (isReconciled) { @@ -133,121 +144,20 @@ export function TransactionEditForm({ transaction, forApproval = false }: Transa return; } - /** - * We need make sure the total of subtransactions is equal to the transaction. - * That validation makes sense to keep at this level - * */ - if (subtransactions.length > 0) { - transactionData.category_id = undefined; - - /* @ts-expect-error we're not allowing updates to existing subtransactions so this doesn't matter */ - transactionData.subtransactions = subtransactions.map((s) => ({ - ...s, - amount: formatToYnabAmount(s.amount, activeBudgetCurrency), - })); - - const subtransactionsTotal = subtransactions.reduce( - (total, { amount }) => total + formatToYnabAmount(amount, activeBudgetCurrency), - 0, - ); - const difference = subtransactionsTotal - transactionData.amount; - - if (difference !== 0) { - const fmtSubTotal = formatToReadableAmount({ - amount: subtransactionsTotal, - currency: activeBudgetCurrency, - includeSymbol: false, - }); - const fmtDifference = formatToReadableAmount({ - amount: difference, - currency: activeBudgetCurrency, - includeSymbol: false, - }); - - const onAutoDistribute = () => { - const distributedAmounts = autoDistribute(transactionData.amount, subtransactions.length).map((amount) => - formatToReadableAmount({ amount, currency: activeBudgetCurrency, includeSymbol: false }), - ); - setSubtransactions(subtransactions.map((s, idx) => ({ ...s, amount: distributedAmounts[idx] }))); - }; - - const options: Alert.Options = { - title: `Something Doesn't Add Up`, - message: `The total is ${ - values.amount - }, but the splits add up to ${fmtSubTotal}. How would you like to handle the unassigned ${fmtDifference}?`, - primaryAction: { - title: 'Auto-Distribute the amounts', - onAction: onAutoDistribute, - }, - dismissAction: { - title: 'Adjust manually', - }, - }; - - await toast.hide(); - await confirmAlert(options); - return; - } - } - - await mutate( - updateTransaction(activeBudgetId, transaction.id, { - ...transactionData, - payee_id: selectOwnPayee ? null : values.payee_id, - }), - { - optimisticUpdate(currentData) { - if (!currentData) return; - - const transactionIdx = currentData.findIndex((tx) => tx.id === transaction.id); - - if (transactionIdx < 0) return currentData; - - const newData = [...currentData]; - - newData.splice(transactionIdx, 1, { ...transaction, ...transactionData }); - - return newData; - }, - shouldRevalidateAfter: !preferences.quickRevalidate, - }, - ); - + await mutate(updateTransaction(activeBudgetId, transaction.id, transactionData)); toast.style = Toast.Style.Success; toast.title = 'Transaction updated successfully'; - - if (forApproval) { - pop(); - } + pop(); } catch (error) { toast.style = Toast.Style.Failure; captureException(error); - toast.title = 'Failed to create transaction'; + toast.title = 'Failed to update transaction'; if (error instanceof Error) { toast.message = error.message; } } }, - validation: { - date: FormValidation.Required, - amount: FormValidation.Required, - payee_id: (value) => { - const errorMessage = 'Please select or enter a payee'; - - if (!selectOwnPayee && !value) { - return errorMessage; - } - }, - categoryList: (value) => { - const errorMessage = 'Please add one or more categories to this transaction'; - if (!value) { - return errorMessage; - } - if (value?.length === 0 && subtransactions.length === 0) return errorMessage; - }, - }, }); const onSubcategoryAmountChange = onSubtransactionAmountChangeHandler({ @@ -261,7 +171,7 @@ export function TransactionEditForm({ transaction, forApproval = false }: Transa return ( From c5bd12e7d7ba977abbac5c9548202aee65992140 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Mon, 14 Apr 2025 20:25:30 -0700 Subject: [PATCH 12/31] Refactor transaction edit form and improve type definitions - Simplified import statements in transactionEditForm.tsx for better readability. - Removed the unused 'forApproval' prop from the TransactionEditForm component. - Updated state management for 'isTransfer' to eliminate unnecessary state updates. - Enhanced type definitions in get-big-numbers.ts for improved error handling. These changes enhance code maintainability and readability in the Raynab extension. --- .../transactions/transactionEditForm.tsx | 28 +++++++++++++++---- .../raynab/src/tools/get-big-numbers.ts | 4 +-- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/extensions/raynab/src/components/transactions/transactionEditForm.tsx b/extensions/raynab/src/components/transactions/transactionEditForm.tsx index 2693ea7ff2e..b52276f5f0b 100644 --- a/extensions/raynab/src/components/transactions/transactionEditForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionEditForm.tsx @@ -1,7 +1,26 @@ import { updateTransaction } from '@lib/api'; -import { autoDistribute, easyGetColorFromId, formatToReadableAmount, formatToYnabAmount, getSubtransacionCategoryname, isSplitTransaction, onSubtransactionAmountChangeHandler } from '@lib/utils'; +import { + autoDistribute, + easyGetColorFromId, + formatToReadableAmount, + formatToYnabAmount, + getSubtransacionCategoryname, + isSplitTransaction, + onSubtransactionAmountChangeHandler, +} from '@lib/utils'; import { TransactionClearedStatus, TransactionFlagColor } from 'ynab'; -import { Action, ActionPanel, confirmAlert, Color, Form, Icon, showToast, Toast, useNavigation, getPreferenceValues, captureException } from '@raycast/api'; +import { + Action, + ActionPanel, + confirmAlert, + Color, + Form, + Icon, + showToast, + Toast, + useNavigation, + captureException, +} from '@raycast/api'; import { FormValidation, useForm, useLocalStorage } from '@raycast/utils'; import { CurrencyFormat, Period, SaveSubTransactionWithReadableAmounts, TransactionDetail } from '@srcTypes'; import { useEffect, useState } from 'react'; @@ -26,10 +45,9 @@ interface FormValues { interface TransactionEditFormProps { transaction: TransactionDetail; - forApproval?: boolean; } -export function TransactionEditForm({ transaction, forApproval = false }: TransactionEditFormProps) { +export function TransactionEditForm({ transaction }: TransactionEditFormProps) { const { pop } = useNavigation(); const { value: activeBudgetCurrency } = useLocalStorage('activeBudgetCurrency', null); @@ -45,7 +63,7 @@ export function TransactionEditForm({ transaction, forApproval = false }: Transa const categories = categoryGroups?.flatMap((group) => group.categories).filter((c) => !c.hidden); const [selectOwnPayee, setselectOwnPayee] = useState(false); - const [isTransfer, setIsTransfer] = useState(false); + const [isTransfer] = useState(false); const [amount, setAmount] = useState(() => formatToReadableAmount({ amount: transaction.amount, currency: activeBudgetCurrency, includeSymbol: false }), ); diff --git a/extensions/raynab/src/tools/get-big-numbers.ts b/extensions/raynab/src/tools/get-big-numbers.ts index e6f331fe414..6aef62679d6 100644 --- a/extensions/raynab/src/tools/get-big-numbers.ts +++ b/extensions/raynab/src/tools/get-big-numbers.ts @@ -1,7 +1,7 @@ import { LocalStorage } from '@raycast/api'; import { fetchTransactions, fetchAccounts } from '../lib/api'; import { formatToReadableAmount } from '../lib/utils/transactions'; -import type { TransactionDetail, CurrencyFormat, Period } from '@srcTypes'; +import type { CurrencyFormat, Period } from '@srcTypes'; interface BigNumbersOutput { success: boolean; @@ -9,7 +9,7 @@ interface BigNumbersOutput { thisWeek: string; thisMonth: string; error?: string; - debug?: any; + debug?: Error | unknown; } export const getBigNumbers = async (): Promise => { From 2f1a5d4d6bf032293db22e022e79a7a4af9ac209 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Mon, 14 Apr 2025 20:30:51 -0700 Subject: [PATCH 13/31] Enhance transaction deletion handling in Raynab extension - Added an optional callback prop `onTransactionDeleted` to the `DeleteTransactionAction` component to allow parent components to respond to transaction deletions. - Updated the `TransactionItem` component to pass the `onTransactionDeleted` callback to the `DeleteTransactionAction`. - Implemented a `handleTransactionDeleted` function in the `TransactionView` component to refresh the transaction list and reset the view state upon deletion. These changes improve the user experience by ensuring the UI reflects the latest transaction state after deletions. --- .../actions/deleteTransactionAction.tsx | 4 +++- .../transactions/transactionItem.tsx | 10 +++++++-- .../transactions/transactionView.tsx | 22 ++++++++++++++++--- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/extensions/raynab/src/components/actions/deleteTransactionAction.tsx b/extensions/raynab/src/components/actions/deleteTransactionAction.tsx index 5ffcf181ef1..4dc8f8b6768 100644 --- a/extensions/raynab/src/components/actions/deleteTransactionAction.tsx +++ b/extensions/raynab/src/components/actions/deleteTransactionAction.tsx @@ -10,9 +10,10 @@ const preferences = getPreferenceValues(); interface DeleteTransactionActionProps { transaction: TransactionDetail; + onTransactionDeleted?: () => void; } -export function DeleteTransactionAction({ transaction }: DeleteTransactionActionProps) { +export function DeleteTransactionAction({ transaction, onTransactionDeleted }: DeleteTransactionActionProps) { const { value: activeBudgetId = '' } = useLocalStorage('activeBudgetId', ''); const { value: activeBudgetCurrency } = useLocalStorage('activeBudgetCurrency', null); const { value: timeline } = useLocalStorage('timeline', 'month'); @@ -57,6 +58,7 @@ export function DeleteTransactionAction({ transaction }: DeleteTransactionAction toast.style = Toast.Style.Success; toast.title = 'Transaction deleted successfully'; + onTransactionDeleted?.(); return; } catch (error) { toast.style = Toast.Style.Failure; diff --git a/extensions/raynab/src/components/transactions/transactionItem.tsx b/extensions/raynab/src/components/transactions/transactionItem.tsx index 3241fc82e1c..b3bca4bac23 100644 --- a/extensions/raynab/src/components/transactions/transactionItem.tsx +++ b/extensions/raynab/src/components/transactions/transactionItem.tsx @@ -23,7 +23,13 @@ import { DeleteTransactionAction } from '@components/actions/deleteTransactionAc const INFLOW_ICON = { source: Icon.PlusCircle, tintColor: Color.Green }; const OUTFLOW_ICON = { source: Icon.MinusCircle, tintColor: Color.Red }; -export function TransactionItem({ transaction }: { transaction: TransactionDetail }) { +export function TransactionItem({ + transaction, + onTransactionDeleted, +}: { + transaction: TransactionDetail; + onTransactionDeleted: () => void; +}) { const { onGroup, onSort, @@ -158,7 +164,7 @@ export function TransactionItem({ transaction }: { transaction: TransactionDetai - + {transaction.approved ? '' : } diff --git a/extensions/raynab/src/components/transactions/transactionView.tsx b/extensions/raynab/src/components/transactions/transactionView.tsx index 04e19131942..efa78659bc9 100644 --- a/extensions/raynab/src/components/transactions/transactionView.tsx +++ b/extensions/raynab/src/components/transactions/transactionView.tsx @@ -35,7 +35,11 @@ export function TransactionView({ search = '', filter: defaultFilter = null }: T isLoading: isLoadingTimeline, } = useLocalStorage('timeline', 'month'); - const { data: transactions = [], isLoading: isLoadingTransactions } = useTransactions(activeBudgetId, timeline); + const { + data: transactions = [], + isLoading: isLoadingTransactions, + mutate, + } = useTransactions(activeBudgetId, timeline); const { data: scheduledTransactions = [], isLoading: isLoadingScheduled } = useScheduledTransactions(activeBudgetId); const [state, dispatch] = useReducer( @@ -135,6 +139,13 @@ export function TransactionView({ search = '', filter: defaultFilter = null }: T ? 'Search scheduled transactions' : `Search ${dropDownValue === 'unreviewed' ? 'unreviewed ' : ''}transactions in the last ${timeline}`; + const handleTransactionDeleted = () => { + // Refresh the transactions list + mutate(); + // Reset the view state with the updated transactions + dispatch({ type: 'reset', initialCollection: transactions }); + }; + return ( @@ -187,6 +199,7 @@ interface TransactionViewItemsProps { displayScheduled: boolean; currency: CurrencyFormat; activeFilter: 'unreviewed' | 'all'; + onTransactionDeleted: () => void; } function TransactionViewItems({ @@ -195,6 +208,7 @@ function TransactionViewItems({ displayScheduled: displaySchedule, currency, activeFilter, + onTransactionDeleted, }: TransactionViewItemsProps) { if (displaySchedule) { return scheduledTransactions.length > 0 ? ( @@ -235,11 +249,13 @@ function TransactionViewItems({ })} key={group.id} children={group.items.map((t) => ( - + ))} /> )); } - return transactions.map((t) => ); + return transactions.map((t) => ( + + )); } From 55e659a045a52d84b8b573b7edec4cd84dff2352 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Mon, 14 Apr 2025 20:43:58 -0700 Subject: [PATCH 14/31] Improve date handling and validation in TransactionCreateForm - Updated date initialization to ensure it reflects the current date correctly. - Enhanced date formatting to return only the date portion in ISO format. - Added comprehensive validation for the amount field to ensure it is not empty, a valid number, and not zero. These changes enhance the user experience by providing accurate date handling and clearer validation messages in the transaction creation process. --- .../transactions/transactionCreateForm.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx index 8edb99b5d9c..7ae18510211 100644 --- a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx @@ -139,7 +139,7 @@ export function TransactionCreateForm({ accountId, transaction }: TransactionCre // Form hook - always called const { handleSubmit, itemProps } = useForm({ initialValues: { - date: transaction?.date ? new Date(transaction.date) : new Date(), + date: transaction?.date ? new Date(transaction.date) : new Date(new Date().toLocaleDateString()), account_id: transaction?.account_id || accountId || '', amount: transaction?.amount?.toString() || '', payee_name: transaction?.payee_name || '', @@ -156,7 +156,7 @@ export function TransactionCreateForm({ accountId, transaction }: TransactionCre try { const transactionData = { ...values, - date: (values.date ?? new Date()).toISOString(), + date: values.date ? values.date.toISOString().split('T')[0] : new Date().toISOString().split('T')[0], amount: formatToYnabAmount(values.amount, activeBudgetCurrency), approved: true, category_id: isTransfer ? null : values.categoryList?.[0] || undefined, @@ -247,7 +247,13 @@ export function TransactionCreateForm({ accountId, transaction }: TransactionCre return errorMessage; } }, - amount: FormValidation.Required, + amount: (value: string | undefined) => { + if (!value) return 'Please enter an amount'; + const num = Number(value); + if (isNaN(num)) return 'Please enter a valid number'; + if (num === 0) return 'Amount cannot be zero'; + return undefined; + }, categoryList: (value) => { const errorMessage = 'Please add one or more categories to this transaction'; From 7adfd48ae027036797ef982ef3c33e93de73e75b Mon Sep 17 00:00:00 2001 From: omarshahine Date: Tue, 15 Apr 2025 06:45:53 -0700 Subject: [PATCH 15/31] Add new AI tools for budget retrieval in Raynab extension - Introduced the "get-budget" tool in package.json to fetch current budget information, including age of money and monthly budget details. - Updated ai.json with example inputs and outputs for the new budget retrieval functionality, enhancing user interaction with the extension. These changes improve the Raynab extension's capabilities by providing users with detailed insights into their budgeting status. --- extensions/raynab/ai.json | 30 ++++ extensions/raynab/package.json | 18 +++ .../raynab/src/tools/get-big-numbers.ts | 2 + extensions/raynab/src/tools/get-budget.ts | 136 ++++++++++++++++++ 4 files changed, 186 insertions(+) create mode 100644 extensions/raynab/src/tools/get-budget.ts diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json index 005a65bff7c..5374b066291 100644 --- a/extensions/raynab/ai.json +++ b/extensions/raynab/ai.json @@ -347,6 +347,36 @@ } ], "usedAsExample": true + }, + { + "input": "@ynab what is the age of money in my current budget?", + "output": { + "success": true, + "month": "2024-03", + "note": "", + "income": 5000, + "budgeted": 4500, + "activity": -3000, + "to_be_budgeted": 500, + "age_of_money": 45, + "error": "" + }, + "usedAsExample": true + }, + { + "input": "@ynab tell me about my this month's budget?", + "output": { + "success": true, + "month": "2024-03", + "note": "March Budget", + "income": 5000, + "budgeted": 4500, + "activity": -3000, + "to_be_budgeted": 500, + "age_of_money": 45, + "error": "" + }, + "usedAsExample": true } ] } \ No newline at end of file diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index 9f59ae1d3d9..16543c70ad7 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -140,6 +140,24 @@ "error": "string", "debug": "any" } + }, + { + "name": "get-budget", + "title": "Get Budget", + "description": "Get current budget information including age of money and monthly budget details", + "type": "ai", + "input": {}, + "output": { + "success": "boolean", + "month": "string", + "note": "string", + "income": "number", + "budgeted": "number", + "activity": "number", + "to_be_budgeted": "number", + "age_of_money": "number", + "error": "string" + } } ], "keywords": [ diff --git a/extensions/raynab/src/tools/get-big-numbers.ts b/extensions/raynab/src/tools/get-big-numbers.ts index 6aef62679d6..b8f0e28212c 100644 --- a/extensions/raynab/src/tools/get-big-numbers.ts +++ b/extensions/raynab/src/tools/get-big-numbers.ts @@ -12,6 +12,8 @@ interface BigNumbersOutput { debug?: Error | unknown; } +// Big Three Numbers tells you how much you've spent today, this week, and this month. +// https://9to5mac.com/2025/04/14/a-tweet-asked-for-a-simple-finance-app-two-hours-later-it-existed/ export const getBigNumbers = async (): Promise => { try { console.log('get-big-numbers tool called'); diff --git a/extensions/raynab/src/tools/get-budget.ts b/extensions/raynab/src/tools/get-budget.ts new file mode 100644 index 00000000000..b8a49c602fe --- /dev/null +++ b/extensions/raynab/src/tools/get-budget.ts @@ -0,0 +1,136 @@ +import { LocalStorage } from '@raycast/api'; +import { fetchBudget } from '../lib/api'; +import { formatToReadableAmount } from '../lib/utils/transactions'; +import type { CurrencyFormat } from '@srcTypes'; + +interface GetBudgetInput { + month?: string; // Optional month in YYYY-MM format +} + +interface GetBudgetOutput { + success: boolean; + month: string; + note: string; + income: string; + budgeted: string; + activity: string; + to_be_budgeted: string; + age_of_money: number; + error?: string; + debug?: Error | unknown; +} + +export default async function (input: GetBudgetInput = {}): Promise { + try { + console.log('get-budget tool called with:', input); + + const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); + const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); + + if (!activeBudgetId) { + console.log('No active budget found'); + return { + success: false, + month: '', + note: '', + income: '0', + budgeted: '0', + activity: '0', + to_be_budgeted: '0', + age_of_money: 0, + error: 'No active budget selected. Please select a budget first.', + }; + } + + const storedCurrency = await LocalStorage.getItem('activeBudgetCurrency'); + const activeBudgetCurrency = storedCurrency ? (JSON.parse(storedCurrency) as CurrencyFormat) : null; + console.log('Using currency format:', activeBudgetCurrency?.iso_code); + + const budget = await fetchBudget(activeBudgetId); + if (!budget?.months) { + console.log('No budget data found'); + return { + success: false, + month: '', + note: '', + income: '0', + budgeted: '0', + activity: '0', + to_be_budgeted: '0', + age_of_money: 0, + error: 'Could not fetch budget data.', + }; + } + + console.log(`Found ${budget.months.length} months of budget data`); + console.log( + 'Available months:', + budget.months.map((m) => m.month), + ); + + // If month is provided, use it; otherwise use current month + let targetMonthStr: string; + if (input.month) { + // Convert YYYY-MM to YYYY-MM-01 format + targetMonthStr = `${input.month}-01`; + } else { + const currentDate = new Date(); + targetMonthStr = `${currentDate.getFullYear()}-${String(currentDate.getMonth() + 1).padStart(2, '0')}-01`; + } + console.log('Looking for month:', targetMonthStr); + + const targetMonth = budget.months.find((m) => m.month === targetMonthStr); + + if (!targetMonth) { + console.log('No month data found'); + return { + success: false, + month: '', + note: '', + income: '0', + budgeted: '0', + activity: '0', + to_be_budgeted: '0', + age_of_money: 0, + error: `Could not find budget data for ${input.month || 'current month'}.`, + }; + } + + console.log('Found month data:', targetMonth.month); + + const result = { + success: true, + month: targetMonth.month, + note: targetMonth.note || '', + income: formatToReadableAmount({ amount: targetMonth.income, currency: activeBudgetCurrency }), + budgeted: formatToReadableAmount({ amount: targetMonth.budgeted, currency: activeBudgetCurrency }), + activity: formatToReadableAmount({ amount: targetMonth.activity, currency: activeBudgetCurrency }), + to_be_budgeted: formatToReadableAmount({ amount: targetMonth.to_be_budgeted, currency: activeBudgetCurrency }), + age_of_money: 0, // TODO: Add age_of_money when available in API response + }; + + console.log('Budget data:', { + ...result, + income: targetMonth.income, + budgeted: targetMonth.budgeted, + activity: targetMonth.activity, + to_be_budgeted: targetMonth.to_be_budgeted, + }); + + return result; + } catch (error) { + console.error('Error fetching budget:', error); + return { + success: false, + month: '', + note: '', + income: '0', + budgeted: '0', + activity: '0', + to_be_budgeted: '0', + age_of_money: 0, + error: error instanceof Error ? error.message : 'Failed to fetch budget data', + debug: error, + }; + } +} From 3e3f5ba9252841521ae6965335ff685b05c01f81 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Tue, 15 Apr 2025 06:56:28 -0700 Subject: [PATCH 16/31] Update AI instructions in ai.json to reflect user queries with @raynab prefix - Replaced all instances of "@ynab" with "@raynab" in the ai.json file to standardize the command prefix for user interactions. - Enhanced the README.md to include a comprehensive list of sample questions for the new AI tools, improving user guidance on querying budget information. These changes improve the clarity and usability of the Raynab extension's AI features, ensuring users can effectively interact with the system. --- extensions/raynab/CHANGELOG.md | 45 ++++++++++++++++++++-------------- extensions/raynab/README.md | 29 ++++++++++++++++++++++ extensions/raynab/ai.json | 30 +++++++++++------------ 3 files changed, 71 insertions(+), 33 deletions(-) diff --git a/extensions/raynab/CHANGELOG.md b/extensions/raynab/CHANGELOG.md index ca4890ebbdf..235def0b8dc 100644 --- a/extensions/raynab/CHANGELOG.md +++ b/extensions/raynab/CHANGELOG.md @@ -1,27 +1,36 @@ # Raynab Changelog -## [Improvements & AI Integration] - {PR_MERGE_DATE} - -### ✨ New Features -- Added error UX for budget selection with clear error messages -- Added support for AI Extensions with transaction management tools +## [AI Budget Tools & Improvements] - {PR_MERGE_DATE} + +### ✨ New Features - Ask AI - AI Tools +- Added new AI-powered tools for natural language budget queries: + - `get-budget`: Query budget information including age of money and monthly details + - Example: "What is the age of money in my March budget?" + - Example: "Tell me about this month's budget?" + - `get-big-numbers`: Track spending for today, this week, and this month + - Example: "How much have I spent today?" + - Example: "What are my big three numbers?" + - `get-transactions`: Search and filter transactions with natural language + - Example: "Show me all transactions from Taco Bell last month" + - Example: "Find my largest expense this week" + - `get-categories`: Query category information and spending + - Example: "How much did I spend on groceries last month?" + - Example: "Which categories are over budget?" ### 💎 Improvements -- Removed hidden categories in transaction forms -- Improved error handling and user feedback for API calls -- Enhanced transaction form validation and error messages +- Enhanced budget data retrieval with proper date formatting +- Improved error handling for budget queries by sending you to the select a budget screen +- Added detailed logging for budget tool debugging +- Enhanced currency formatting in budget responses +- Added support for natural language queries across all tools +- Improved error messages and user feedback for AI tool operations ### 🐞 Bug Fixes -- Fixed relative time of locally created transactions being set at midnight -- Fixed error messages of certain API calls being swallowed without proper error toast -- Fixed transaction form validation issues -- Resolved issues with transaction form state management - -### 🔧 Technical Updates -- Updated dependencies to latest versions -- Added AI tools configuration with TypeScript types -- Implemented error handling for AI tool operations -- Added comprehensive evals for AI tool testing +- Fixed date format mismatch in budget month queries +- Fixed budget data retrieval for specific months +- Resolved issues with budget currency formatting +- Fixed error handling in AI tool operations +- Resolved issues with transaction form validation for create and edit ## [Improvements & Bug fixes] - 2025-02-14 diff --git a/extensions/raynab/README.md b/extensions/raynab/README.md index 1961858d034..bac9b7f6a7f 100644 --- a/extensions/raynab/README.md +++ b/extensions/raynab/README.md @@ -33,6 +33,35 @@ You can change the active budget at any time using the command. For most people ## Commands +### AI Tools + +Raynab now includes AI-powered tools for querying your budget information through natural language. You can ask questions like: + +Here are all the sample questions from the `ai.json` evals, organized by tool with bullet points: + +#### Transaction Management +- "@raynab add a transaction for $25.50 at Starbucks" +- "@raynab show me my recent transactions" +- "@raynab show me my Amazon purchases from last year" +- "@raynab what did I spend at Target in the past month?" +- "@raynab what was my transaction with Amazon on March 14" +- "@raynab show me my transactions with Amazon this month" +- "@raynab what did I spend at amazon last month?" + +#### Account Queries +- "@raynab show me my account balances" +- "@raynab what is my checking account balance?" +- "@raynab show me my checking account" +- "@raynab how much is in my checking?" + +#### Big Numbers +- "@raynab what are my big three numbers?" +- "@raynab show me my big numbers" + +#### Budget Information +- "@raynab what is the age of money in my current budget?" +- "@raynab tell me about my this month's budget?" + ### List Transactions This command will list your transactions for up to a year. It is the heart of Raynab as this will probably the place where you will spend most of your time understanding your inflows, outflows, and transfers. diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json index 5374b066291..6c8e31b2004 100644 --- a/extensions/raynab/ai.json +++ b/extensions/raynab/ai.json @@ -2,7 +2,7 @@ "instructions": "You are a helpful assistant for managing YNAB (You Need A Budget) transactions. Always format amounts correctly and handle dates in ISO format. Be precise with payee names and account names. When showing transactions, format the information clearly and concisely.\n\nFor transaction queries, you can specify time periods using natural language. The following time periods are supported:\n- 'last year' or 'past year' for the last 12 months\n- 'last quarter' or 'past quarter' for the last 3 months\n- 'last month' or 'past month' for the last 30 days\n- 'last week' or 'past week' for the last 7 days\n- 'last day', 'past day', 'yesterday', or 'today' for the last 24 hours\n\nIf no time period is specified, the default is the last month.\n\nFor account balance queries, use get-accounts or get-account-details tools, not get-transactions.", "evals": [ { - "input": "@ynab add a transaction for $25.50 at Starbucks", + "input": "@raynab add a transaction for $25.50 at Starbucks", "mocks": { "add-transaction": { "success": true, @@ -32,7 +32,7 @@ "usedAsExample": true }, { - "input": "@ynab show me my recent transactions", + "input": "@raynab show me my recent transactions", "mocks": { "get-transactions": [ { @@ -66,7 +66,7 @@ "usedAsExample": true }, { - "input": "@ynab show me my Amazon purchases from last year", + "input": "@raynab show me my Amazon purchases from last year", "mocks": { "get-transactions": [ { @@ -103,7 +103,7 @@ "usedAsExample": true }, { - "input": "@ynab what did I spend at Target in the past month?", + "input": "@raynab what did I spend at Target in the past month?", "mocks": { "get-transactions": [ { @@ -129,7 +129,7 @@ "usedAsExample": true }, { - "input": "@ynab what was my transaction with Amazon on March 14", + "input": "@raynab what was my transaction with Amazon on March 14", "mocks": { "get-transactions": { "success": true, @@ -158,7 +158,7 @@ "usedAsExample": true }, { - "input": "@ynab show me my transactions with Amazon this month", + "input": "@raynab show me my transactions with Amazon this month", "mocks": { "get-transactions": { "success": true, @@ -187,7 +187,7 @@ "usedAsExample": true }, { - "input": "@ynab show me my account balances", + "input": "@raynab show me my account balances", "mocks": { "get-accounts": [ { @@ -213,7 +213,7 @@ "usedAsExample": true }, { - "input": "@ynab what is my checking account balance?", + "input": "@raynab what is my checking account balance?", "mocks": { "get-account-details": { "name": "Checking", @@ -234,7 +234,7 @@ "usedAsExample": true }, { - "input": "@ynab show me my checking account", + "input": "@raynab show me my checking account", "mocks": { "get-account-details": { "name": "Checking", @@ -255,7 +255,7 @@ "usedAsExample": true }, { - "input": "@ynab how much is in my checking?", + "input": "@raynab how much is in my checking?", "mocks": { "get-account-details": { "name": "Checking", @@ -276,7 +276,7 @@ "usedAsExample": true }, { - "input": "@ynab what are my big three numbers?", + "input": "@raynab what are my big three numbers?", "mocks": { "get-big-numbers": { "success": true, @@ -296,7 +296,7 @@ "usedAsExample": true }, { - "input": "@ynab show me my big numbers", + "input": "@raynab show me my big numbers", "mocks": { "get-big-numbers": { "success": true, @@ -316,7 +316,7 @@ "usedAsExample": true }, { - "input": "@ynab what did I spend at amazon last month?", + "input": "@raynab what did I spend at amazon last month?", "mocks": { "get-transactions": [ { @@ -349,7 +349,7 @@ "usedAsExample": true }, { - "input": "@ynab what is the age of money in my current budget?", + "input": "@raynab what is the age of money in my current budget?", "output": { "success": true, "month": "2024-03", @@ -364,7 +364,7 @@ "usedAsExample": true }, { - "input": "@ynab tell me about my this month's budget?", + "input": "@raynab tell me about my this month's budget?", "output": { "success": true, "month": "2024-03", From a08ef5f72a53978c43bac979e68ea2fa228c2cec Mon Sep 17 00:00:00 2001 From: omarshahine Date: Tue, 15 Apr 2025 06:58:46 -0700 Subject: [PATCH 17/31] Update CHANGELOG and README to reflect new AI Extensions in Raynab - Renamed AI tools section to AI Extensions in both CHANGELOG.md and README.md for consistency. - Updated descriptions to clarify the functionality of new AI Extensions for natural language budget queries. These changes enhance documentation clarity and ensure users are informed about the latest features in the Raynab extension. --- extensions/raynab/CHANGELOG.md | 4 ++-- extensions/raynab/README.md | 4 ++-- extensions/raynab/package.json | 3 +++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/extensions/raynab/CHANGELOG.md b/extensions/raynab/CHANGELOG.md index 235def0b8dc..e3dda998501 100644 --- a/extensions/raynab/CHANGELOG.md +++ b/extensions/raynab/CHANGELOG.md @@ -2,8 +2,8 @@ ## [AI Budget Tools & Improvements] - {PR_MERGE_DATE} -### ✨ New Features - Ask AI - AI Tools -- Added new AI-powered tools for natural language budget queries: +### ✨ New Features - AI Extensions +- Added new AI Extensions for natural language budget queries: - `get-budget`: Query budget information including age of money and monthly details - Example: "What is the age of money in my March budget?" - Example: "Tell me about this month's budget?" diff --git a/extensions/raynab/README.md b/extensions/raynab/README.md index bac9b7f6a7f..2ca886af8f1 100644 --- a/extensions/raynab/README.md +++ b/extensions/raynab/README.md @@ -33,9 +33,9 @@ You can change the active budget at any time using the command. For most people ## Commands -### AI Tools +### AI Extensions -Raynab now includes AI-powered tools for querying your budget information through natural language. You can ask questions like: +Raynab now includes AI Extensions for querying your budget information through natural language. You can ask questions like: Here are all the sample questions from the `ai.json` evals, organized by tool with bullet points: diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index 16543c70ad7..a1a0110f92f 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -10,6 +10,9 @@ "Finance", "Productivity" ], + "contributors": [ + "omarshahine" + ], "commands": [ { "name": "activeBudget", From 32c21e3feba087e0d56f13a60561a5cdc782c163 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Tue, 15 Apr 2025 15:06:51 -0700 Subject: [PATCH 18/31] Update package-lock.json and package.json for Raynab extension dependencies - Upgraded "react-devtools" from version 5.2.0 to 6.1.1 for improved debugging capabilities. --- extensions/raynab/package-lock.json | 534 ++++++++++++++-------------- extensions/raynab/package.json | 2 +- 2 files changed, 273 insertions(+), 263 deletions(-) diff --git a/extensions/raynab/package-lock.json b/extensions/raynab/package-lock.json index f160e5f1dd6..44a402a624e 100644 --- a/extensions/raynab/package-lock.json +++ b/extensions/raynab/package-lock.json @@ -25,7 +25,7 @@ "eslint": "^8.57.1", "eslint-config-prettier": "^8.3.0", "prettier": "^3.4.2", - "react-devtools": "^5.2.0", + "react-devtools": "^6.1.1", "typescript": "^5.7.2", "vitest": "^2.1.9" } @@ -34,7 +34,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "debug": "^4.1.1", @@ -56,7 +56,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, + "devOptional": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -463,9 +463,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", - "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.0.tgz", + "integrity": "sha512-WhCn7Z7TauhBtmzhvKpoQs0Wwb/kBcy4CwpuI0/eEIr2Lx2auxmulAzLr91wVZJaz47iUZdkXOK7WlAfxGKCnA==", "dev": true, "license": "MIT", "dependencies": { @@ -1176,9 +1176,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.39.0.tgz", - "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz", + "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==", "cpu": [ "arm" ], @@ -1190,9 +1190,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.39.0.tgz", - "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz", + "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==", "cpu": [ "arm64" ], @@ -1204,9 +1204,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.39.0.tgz", - "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", + "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", "cpu": [ "arm64" ], @@ -1218,9 +1218,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.39.0.tgz", - "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz", + "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==", "cpu": [ "x64" ], @@ -1232,9 +1232,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.39.0.tgz", - "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz", + "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==", "cpu": [ "arm64" ], @@ -1246,9 +1246,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.39.0.tgz", - "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz", + "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==", "cpu": [ "x64" ], @@ -1260,9 +1260,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.39.0.tgz", - "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz", + "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==", "cpu": [ "arm" ], @@ -1274,9 +1274,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.39.0.tgz", - "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz", + "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==", "cpu": [ "arm" ], @@ -1288,9 +1288,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.39.0.tgz", - "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz", + "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==", "cpu": [ "arm64" ], @@ -1302,9 +1302,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.39.0.tgz", - "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz", + "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==", "cpu": [ "arm64" ], @@ -1316,9 +1316,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.39.0.tgz", - "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz", + "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==", "cpu": [ "loong64" ], @@ -1330,9 +1330,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.39.0.tgz", - "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz", + "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==", "cpu": [ "ppc64" ], @@ -1344,9 +1344,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.39.0.tgz", - "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz", + "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==", "cpu": [ "riscv64" ], @@ -1358,9 +1358,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.39.0.tgz", - "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz", + "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==", "cpu": [ "riscv64" ], @@ -1372,9 +1372,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.39.0.tgz", - "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz", + "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==", "cpu": [ "s390x" ], @@ -1386,9 +1386,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.39.0.tgz", - "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz", + "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==", "cpu": [ "x64" ], @@ -1400,9 +1400,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.39.0.tgz", - "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz", + "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==", "cpu": [ "x64" ], @@ -1414,9 +1414,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.39.0.tgz", - "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz", + "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==", "cpu": [ "arm64" ], @@ -1428,9 +1428,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.39.0.tgz", - "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz", + "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==", "cpu": [ "ia32" ], @@ -1442,9 +1442,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.39.0.tgz", - "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz", + "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==", "cpu": [ "x64" ], @@ -1466,7 +1466,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -1479,7 +1479,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" @@ -1492,7 +1492,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", @@ -1512,7 +1512,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@types/json-schema": { @@ -1526,7 +1526,7 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -1536,16 +1536,16 @@ "version": "20.17.30", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz", "integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } }, "node_modules/@types/react": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.0.tgz", - "integrity": "sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==", + "version": "19.1.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz", + "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", "dev": true, "license": "MIT", "dependencies": { @@ -1556,7 +1556,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -2089,7 +2089,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", "integrity": "sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "string-width": "^2.0.0" @@ -2099,7 +2099,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -2109,7 +2109,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -2119,7 +2119,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", @@ -2133,7 +2133,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" @@ -2241,7 +2241,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-align": "^2.0.0", @@ -2260,7 +2260,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -2270,7 +2270,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -2283,7 +2283,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -2298,7 +2298,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -2308,14 +2308,14 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/boxen/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -2325,7 +2325,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -2335,7 +2335,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -2345,7 +2345,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", @@ -2359,7 +2359,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" @@ -2372,7 +2372,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -2385,7 +2385,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "string-width": "^2.1.1" @@ -2419,7 +2419,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": "*" @@ -2439,7 +2439,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10.6.0" @@ -2449,7 +2449,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "clone-response": "^1.0.2", @@ -2478,7 +2478,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -2488,7 +2488,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz", "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2562,7 +2562,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/clean-stack": { @@ -2584,7 +2584,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", "integrity": "sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2615,7 +2615,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" @@ -2652,7 +2652,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", - "dev": true, + "devOptional": true, "license": "BSD-2-Clause", "dependencies": { "dot-prop": "^4.2.1", @@ -2670,14 +2670,14 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/configstore/node_modules/write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "graceful-fs": "^4.1.11", @@ -2689,7 +2689,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "capture-stack-trace": "^1.0.0" @@ -2731,7 +2731,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -2746,7 +2746,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -2794,7 +2794,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" @@ -2810,7 +2810,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -2833,7 +2833,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4.0.0" @@ -2850,7 +2850,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, + "devOptional": true, "license": "BSD-2-Clause", "dependencies": { "execa": "^5.0.0" @@ -2863,7 +2863,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -2953,7 +2953,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-obj": "^1.0.0" @@ -2966,7 +2966,7 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/ejs": { @@ -2988,7 +2988,7 @@ "version": "23.3.13", "resolved": "https://registry.npmjs.org/electron/-/electron-23.3.13.tgz", "integrity": "sha512-BaXtHEb+KYKLouUXlUVDa/lj9pj4F5kiE0kwFdJV84Y2EU7euIDgPthfKtchhr5MVHmjtavRMIV/zAwEiSQ9rQ==", - "dev": true, + "devOptional": true, "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -3007,7 +3007,7 @@ "version": "16.18.126", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/emoji-regex": { @@ -3020,7 +3020,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -3030,7 +3030,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -3371,7 +3371,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", @@ -3395,7 +3395,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -3408,7 +3408,7 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/expect-type": { @@ -3439,7 +3439,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, + "devOptional": true, "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", @@ -3529,7 +3529,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "pend": "~1.2.0" @@ -3688,7 +3688,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -3743,7 +3743,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "pump": "^3.0.0" @@ -3837,7 +3837,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ini": "^1.3.4" @@ -3931,7 +3931,7 @@ "version": "11.8.6", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", @@ -3993,14 +3993,14 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true, + "devOptional": true, "license": "BSD-2-Clause" }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", @@ -4014,7 +4014,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=10.17.0" @@ -4062,7 +4062,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -4109,14 +4109,14 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/internal-ip": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "default-gateway": "^6.0.0", @@ -4135,7 +4135,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -4145,7 +4145,7 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.10" @@ -4155,7 +4155,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ci-info": "^1.5.0" @@ -4213,7 +4213,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", "integrity": "sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "global-dirs": "^0.1.0", @@ -4227,7 +4227,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "path-is-inside": "^1.0.1" @@ -4240,7 +4240,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ip-regex": "^4.0.0" @@ -4253,7 +4253,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", "integrity": "sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4272,7 +4272,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4292,7 +4292,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4302,7 +4302,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4312,7 +4312,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -4337,7 +4337,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/jake": { @@ -4397,7 +4397,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/json-schema-traverse": { @@ -4426,7 +4426,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, + "devOptional": true, "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" @@ -4436,7 +4436,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -4446,7 +4446,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", "integrity": "sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "package-json": "^4.0.0" @@ -4515,7 +4515,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -4525,7 +4525,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", @@ -4546,7 +4546,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "pify": "^3.0.0" @@ -4573,7 +4573,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/merge2": { @@ -4602,7 +4602,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -4612,7 +4612,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -4637,7 +4637,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, + "devOptional": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4736,7 +4736,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -4749,7 +4749,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "path-key": "^3.0.0" @@ -4782,7 +4782,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -4792,7 +4792,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -4842,7 +4842,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -4852,7 +4852,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "p-timeout": "^3.1.0" @@ -4868,7 +4868,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -4910,7 +4910,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "p-finally": "^1.0.0" @@ -4923,7 +4923,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", "integrity": "sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "got": "^6.7.1", @@ -4939,7 +4939,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -4949,7 +4949,7 @@ "version": "6.7.1", "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "create-error-class": "^3.0.0", @@ -4972,7 +4972,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4982,7 +4982,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4992,7 +4992,7 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, + "devOptional": true, "license": "ISC", "bin": { "semver": "bin/semver" @@ -5035,14 +5035,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true, + "devOptional": true, "license": "(WTFPL OR MIT)" }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -5078,7 +5078,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/picocolors": { @@ -5104,7 +5104,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -5153,7 +5153,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5179,7 +5179,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -5189,14 +5189,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -5237,7 +5237,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -5256,7 +5256,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, + "devOptional": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", @@ -5272,24 +5272,34 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/react-devtools": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/react-devtools/-/react-devtools-5.3.2.tgz", - "integrity": "sha512-Yvx2ZLqIaW0KBdT0C87YTlSzmaLy9vmorBj6dp4hEwfKR74GC/29+hdrTjWFqIVXRNjbknSQPaxFk0qBikwttw==", - "dev": true, + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/react-devtools/-/react-devtools-6.1.1.tgz", + "integrity": "sha512-72islUwEOBhW/xdmA+KmUAbFKt1t0t/lFBz6N8SaJ25hCLTuAMyGnGLTbnVfpNHiChHzlLjloRTFVIRRIPF4gg==", + "devOptional": true, "license": "MIT", "dependencies": { "cross-spawn": "^5.0.1", "electron": "^23.1.2", "internal-ip": "^6.2.0", "minimist": "^1.2.3", - "react-devtools-core": "5.3.2", + "react-devtools-core": "6.1.1", "update-notifier": "^2.1.0" }, "bin": { @@ -5297,10 +5307,10 @@ } }, "node_modules/react-devtools-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.2.tgz", - "integrity": "sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==", - "dev": true, + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-6.1.1.tgz", + "integrity": "sha512-TFo1MEnkqE6hzAbaztnyR5uLTMoz6wnEWwWBsCUzNt+sVXJycuRJdDqvL078M4/h65BI/YO5XWTaxZDWVsW0fw==", + "devOptional": true, "license": "MIT", "dependencies": { "shell-quote": "^1.6.1", @@ -5311,7 +5321,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "lru-cache": "^4.0.1", @@ -5323,7 +5333,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" @@ -5336,7 +5346,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5346,7 +5356,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -5359,7 +5369,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "rc": "^1.1.6", @@ -5370,7 +5380,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "rc": "^1.0.1" @@ -5383,7 +5393,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/resolve-from": { @@ -5400,7 +5410,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" @@ -5456,9 +5466,9 @@ } }, "node_modules/rollup": { - "version": "4.39.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.39.0.tgz", - "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz", + "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", "dev": true, "license": "MIT", "dependencies": { @@ -5472,26 +5482,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.39.0", - "@rollup/rollup-android-arm64": "4.39.0", - "@rollup/rollup-darwin-arm64": "4.39.0", - "@rollup/rollup-darwin-x64": "4.39.0", - "@rollup/rollup-freebsd-arm64": "4.39.0", - "@rollup/rollup-freebsd-x64": "4.39.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.39.0", - "@rollup/rollup-linux-arm-musleabihf": "4.39.0", - "@rollup/rollup-linux-arm64-gnu": "4.39.0", - "@rollup/rollup-linux-arm64-musl": "4.39.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.39.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0", - "@rollup/rollup-linux-riscv64-gnu": "4.39.0", - "@rollup/rollup-linux-riscv64-musl": "4.39.0", - "@rollup/rollup-linux-s390x-gnu": "4.39.0", - "@rollup/rollup-linux-x64-gnu": "4.39.0", - "@rollup/rollup-linux-x64-musl": "4.39.0", - "@rollup/rollup-win32-arm64-msvc": "4.39.0", - "@rollup/rollup-win32-ia32-msvc": "4.39.0", - "@rollup/rollup-win32-x64-msvc": "4.39.0", + "@rollup/rollup-android-arm-eabi": "4.40.0", + "@rollup/rollup-android-arm64": "4.40.0", + "@rollup/rollup-darwin-arm64": "4.40.0", + "@rollup/rollup-darwin-x64": "4.40.0", + "@rollup/rollup-freebsd-arm64": "4.40.0", + "@rollup/rollup-freebsd-x64": "4.40.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", + "@rollup/rollup-linux-arm-musleabihf": "4.40.0", + "@rollup/rollup-linux-arm64-gnu": "4.40.0", + "@rollup/rollup-linux-arm64-musl": "4.40.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-gnu": "4.40.0", + "@rollup/rollup-linux-riscv64-musl": "4.40.0", + "@rollup/rollup-linux-s390x-gnu": "4.40.0", + "@rollup/rollup-linux-x64-gnu": "4.40.0", + "@rollup/rollup-linux-x64-musl": "4.40.0", + "@rollup/rollup-win32-arm64-msvc": "4.40.0", + "@rollup/rollup-win32-ia32-msvc": "4.40.0", + "@rollup/rollup-win32-x64-msvc": "4.40.0", "fsevents": "~2.3.2" } }, @@ -5522,7 +5532,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, + "devOptional": true, "funding": [ { "type": "github", @@ -5569,7 +5579,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "semver": "^5.0.3" @@ -5582,7 +5592,7 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, + "devOptional": true, "license": "ISC", "bin": { "semver": "bin/semver" @@ -5623,7 +5633,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -5636,7 +5646,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -5646,7 +5656,7 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -5769,7 +5779,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5779,7 +5789,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" @@ -5802,7 +5812,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "dependencies": { "debug": "^4.1.0" @@ -5843,7 +5853,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", "integrity": "sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "execa": "^0.7.0" @@ -5856,7 +5866,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "lru-cache": "^4.0.1", @@ -5868,7 +5878,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "cross-spawn": "^5.0.1", @@ -5887,7 +5897,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -5897,7 +5907,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5907,7 +5917,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "path-key": "^2.0.0" @@ -5920,7 +5930,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -5930,7 +5940,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" @@ -5943,7 +5953,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5953,14 +5963,14 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/term-size/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -5980,7 +5990,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6139,14 +6149,14 @@ "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "crypto-random-string": "^1.0.0" @@ -6159,7 +6169,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">= 4.0.0" @@ -6169,7 +6179,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -6179,7 +6189,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, + "devOptional": true, "license": "BSD-2-Clause", "dependencies": { "boxen": "^1.2.1", @@ -6201,7 +6211,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -6214,7 +6224,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -6229,7 +6239,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -6239,14 +6249,14 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/update-notifier/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -6256,7 +6266,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -6266,7 +6276,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -6289,7 +6299,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "prepend-http": "^1.0.1" @@ -6915,7 +6925,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "devOptional": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -6993,7 +7003,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -7011,7 +7021,7 @@ "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8.3.0" @@ -7033,7 +7043,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=4" @@ -7043,14 +7053,14 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index a1a0110f92f..f2d66d4e777 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -186,7 +186,7 @@ "eslint": "^8.57.1", "eslint-config-prettier": "^8.3.0", "prettier": "^3.4.2", - "react-devtools": "^5.2.0", + "react-devtools": "^6.1.1", "typescript": "^5.7.2", "vitest": "^2.1.9" }, From 41424f102c18602452aeacf4d0e65c59df6331ed Mon Sep 17 00:00:00 2001 From: omarshahine Date: Tue, 15 Apr 2025 15:14:16 -0700 Subject: [PATCH 19/31] Fixing Property 'forApproval' does not exist on type 'IntrinsicAttributes & TransactionEditFormProps'. --- .../raynab/src/components/transactions/transactionEditForm.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/extensions/raynab/src/components/transactions/transactionEditForm.tsx b/extensions/raynab/src/components/transactions/transactionEditForm.tsx index b52276f5f0b..56c7ca5338f 100644 --- a/extensions/raynab/src/components/transactions/transactionEditForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionEditForm.tsx @@ -45,9 +45,10 @@ interface FormValues { interface TransactionEditFormProps { transaction: TransactionDetail; + forApproval?: boolean; } -export function TransactionEditForm({ transaction }: TransactionEditFormProps) { +export function TransactionEditForm({ transaction, forApproval }: TransactionEditFormProps) { const { pop } = useNavigation(); const { value: activeBudgetCurrency } = useLocalStorage('activeBudgetCurrency', null); From ae7d90f8a8a3a8730f5eec11459b0bb47eef0311 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Tue, 15 Apr 2025 15:52:01 -0700 Subject: [PATCH 20/31] Update AI instructions and improve transaction mock data in Raynab extension - Changed the "query" key to "period" in the get-transactions arguments for consistency in ai.json. - Enhanced balance formatting in mock data to include dollar signs and commas for better readability. - Updated sample questions in README.md to reflect the latest changes in AI queries. - Removed unused properties from package.json to streamline the codebase. These updates improve the clarity and usability of the Raynab extension's AI features, ensuring users have a better experience when interacting with their budget information. --- extensions/raynab/README.md | 8 +- extensions/raynab/ai.json | 84 ++++++++++++------- extensions/raynab/package.json | 80 ++---------------- .../transactions/transactionEditForm.tsx | 2 +- 4 files changed, 64 insertions(+), 110 deletions(-) diff --git a/extensions/raynab/README.md b/extensions/raynab/README.md index 2ca886af8f1..5c0a22ab687 100644 --- a/extensions/raynab/README.md +++ b/extensions/raynab/README.md @@ -37,16 +37,14 @@ You can change the active budget at any time using the command. For most people Raynab now includes AI Extensions for querying your budget information through natural language. You can ask questions like: -Here are all the sample questions from the `ai.json` evals, organized by tool with bullet points: - #### Transaction Management - "@raynab add a transaction for $25.50 at Starbucks" - "@raynab show me my recent transactions" - "@raynab show me my Amazon purchases from last year" - "@raynab what did I spend at Target in the past month?" -- "@raynab what was my transaction with Amazon on March 14" +- "@raynab what was my transaction with Amazon on March 14?" - "@raynab show me my transactions with Amazon this month" -- "@raynab what did I spend at amazon last month?" +- "@raynab what did I spend at Amazon last month?" #### Account Queries - "@raynab show me my account balances" @@ -60,7 +58,7 @@ Here are all the sample questions from the `ai.json` evals, organized by tool wi #### Budget Information - "@raynab what is the age of money in my current budget?" -- "@raynab tell me about my this month's budget?" +- "@raynab tell me about my this month's budget" ### List Transactions diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json index 6c8e31b2004..6a919f110a4 100644 --- a/extensions/raynab/ai.json +++ b/extensions/raynab/ai.json @@ -95,7 +95,7 @@ "name": "get-transactions", "arguments": { "payee": "Amazon", - "query": "last year" + "period": "last year" } } } @@ -121,7 +121,7 @@ "name": "get-transactions", "arguments": { "payee": "Target", - "query": "past month" + "period": "past month" } } } @@ -129,7 +129,7 @@ "usedAsExample": true }, { - "input": "@raynab what was my transaction with Amazon on March 14", + "input": "@raynab what was my transaction with Amazon on March 14?", "mocks": { "get-transactions": { "success": true, @@ -192,12 +192,12 @@ "get-accounts": [ { "name": "Checking", - "balance": 5000.00, + "balance": "$5,000.00", "on_budget": true }, { "name": "Savings", - "balance": 10000.00, + "balance": "$10,000.00", "on_budget": true } ] @@ -217,7 +217,7 @@ "mocks": { "get-account-details": { "name": "Checking", - "balance": 5000.00, + "balance": "$5,000.00", "on_budget": true } }, @@ -238,7 +238,7 @@ "mocks": { "get-account-details": { "name": "Checking", - "balance": 5000.00, + "balance": "$5,000.00", "on_budget": true } }, @@ -259,7 +259,7 @@ "mocks": { "get-account-details": { "name": "Checking", - "balance": 5000.00, + "balance": "$5,000.00", "on_budget": true } }, @@ -341,7 +341,7 @@ "name": "get-transactions", "arguments": { "payee": "Amazon", - "query": "last month" + "period": "last month" } } } @@ -350,33 +350,55 @@ }, { "input": "@raynab what is the age of money in my current budget?", - "output": { - "success": true, - "month": "2024-03", - "note": "", - "income": 5000, - "budgeted": 4500, - "activity": -3000, - "to_be_budgeted": 500, - "age_of_money": 45, - "error": "" + "mocks": { + "get-budget": { + "activity": "-$1,200.00", + "age_of_money": 40, + "budgeted": "$3,800.00", + "income": "$5,000.00", + "month": "2024-03-01", + "note": "", + "success": true, + "to_be_budgeted": "$2,000.00" + } }, + "expected": [ + { + "callsTool": { + "name": "get-budget", + "arguments": { + "month": "2024-03" + } + } + } + ], "usedAsExample": true }, { - "input": "@raynab tell me about my this month's budget?", - "output": { - "success": true, - "month": "2024-03", - "note": "March Budget", - "income": 5000, - "budgeted": 4500, - "activity": -3000, - "to_be_budgeted": 500, - "age_of_money": 45, - "error": "" + "input": "@raynab tell me about my this month's budget", + "mocks": { + "get-budget": { + "activity": "-$1,750.25", + "age_of_money": 38, + "budgeted": "$4,200.00", + "income": "$6,000.00", + "month": "2024-03-01", + "note": "March Budget Overview", + "success": true, + "to_be_budgeted": "$2,050.00" + } }, + "expected": [ + { + "callsTool": { + "name": "get-budget", + "arguments": { + "month": "2024-03" + } + } + } + ], "usedAsExample": true } ] -} \ No newline at end of file +} \ No newline at end of file diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index f2d66d4e777..c77249f860a 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -69,98 +69,32 @@ { "name": "add-transaction", "title": "Add Transaction", - "description": "Add a new YNAB transaction using AI", - "type": "ai", - "input": { - "date": "string", - "payee_name": "string", - "amount": "number", - "account_name": "string", - "memo": "string" - }, - "output": { - "success": "boolean", - "error": "string", - "debug": "any" - } + "description": "Add a new YNAB transaction using AI" }, { "name": "get-transactions", "title": "Get Transactions", - "description": "Get YNAB transactions using AI", - "type": "ai", - "input": { - "filter": "string?", - "payee": "string?", - "category": "string?", - "period": "string?" - }, - "output": { - "success": "boolean", - "transactions": "array", - "error": "string" - } + "description": "Get YNAB transactions using AI" }, { "name": "get-accounts", "title": "Get Accounts", - "description": "Get all YNAB accounts and their balances using AI", - "type": "ai", - "input": { - "on_budget": "boolean?" - }, - "output": { - "success": "boolean", - "accounts": "array", - "error": "string" - } + "description": "Get all YNAB accounts and their balances using AI" }, { "name": "get-account-details", "title": "Get Account Details", - "description": "Get details of a specific YNAB account using AI", - "type": "ai", - "input": { - "account_name": "string" - }, - "output": { - "success": "boolean", - "account": "object", - "error": "string" - } + "description": "Get details of a specific YNAB account using AI" }, { "name": "get-big-numbers", "title": "Big Numbers", - "description": "Get spending statistics for today, this week, and this month from budget accounts", - "type": "ai", - "input": {}, - "output": { - "success": "boolean", - "today": "string", - "thisWeek": "string", - "thisMonth": "string", - "error": "string", - "debug": "any" - } + "description": "Get spending statistics for today, this week, and this month from budget accounts" }, { "name": "get-budget", "title": "Get Budget", - "description": "Get current budget information including age of money and monthly budget details", - "type": "ai", - "input": {}, - "output": { - "success": "boolean", - "month": "string", - "note": "string", - "income": "number", - "budgeted": "number", - "activity": "number", - "to_be_budgeted": "number", - "age_of_money": "number", - "error": "string" - } + "description": "Get current budget information including age of money and monthly budget details" } ], "keywords": [ @@ -226,4 +160,4 @@ "publish": "ray publish", "test": "vitest" } -} +} \ No newline at end of file diff --git a/extensions/raynab/src/components/transactions/transactionEditForm.tsx b/extensions/raynab/src/components/transactions/transactionEditForm.tsx index 56c7ca5338f..36d31b65f97 100644 --- a/extensions/raynab/src/components/transactions/transactionEditForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionEditForm.tsx @@ -48,7 +48,7 @@ interface TransactionEditFormProps { forApproval?: boolean; } -export function TransactionEditForm({ transaction, forApproval }: TransactionEditFormProps) { +export function TransactionEditForm({ transaction }: TransactionEditFormProps) { const { pop } = useNavigation(); const { value: activeBudgetCurrency } = useLocalStorage('activeBudgetCurrency', null); From 6d5f7992feea0145b826c072bb7f2de8c2f81873 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Tue, 15 Apr 2025 15:56:08 -0700 Subject: [PATCH 21/31] Refactor budget check handling in Raynab extension components - Removed loading state checks from the Command function in multiple components (accounts.tsx, scheduleTransaction.tsx, transaction.tsx, transactions.tsx, unreviewed.tsx) to streamline the budget validation process. - Simplified the logic by directly using the activeBudgetId from the checkForActiveBudget utility. These changes enhance code clarity and maintainability across the Raynab extension's components. --- extensions/raynab/src/accounts.tsx | 6 +----- extensions/raynab/src/scheduleTransaction.tsx | 6 +----- extensions/raynab/src/transaction.tsx | 6 +----- extensions/raynab/src/transactions.tsx | 6 +----- extensions/raynab/src/unreviewed.tsx | 6 +----- 5 files changed, 5 insertions(+), 25 deletions(-) diff --git a/extensions/raynab/src/accounts.tsx b/extensions/raynab/src/accounts.tsx index 5ed344d030d..e3bb31ac3cf 100644 --- a/extensions/raynab/src/accounts.tsx +++ b/extensions/raynab/src/accounts.tsx @@ -2,11 +2,7 @@ import { AccountView } from '@components/accounts/accountView'; import { checkForActiveBudget } from '@lib/utils/checkForActiveBudget'; export default function Command() { - const { activeBudgetId, isLoading } = checkForActiveBudget(); - - if (isLoading) { - return null; - } + const { activeBudgetId } = checkForActiveBudget(); if (!activeBudgetId) { return null; diff --git a/extensions/raynab/src/scheduleTransaction.tsx b/extensions/raynab/src/scheduleTransaction.tsx index 4876ba9acd0..47ce0d05575 100644 --- a/extensions/raynab/src/scheduleTransaction.tsx +++ b/extensions/raynab/src/scheduleTransaction.tsx @@ -2,11 +2,7 @@ import { ScheduleTransactionCreateForm } from '@components/transactions/schedule import { checkForActiveBudget } from '@lib/utils/checkForActiveBudget'; export default function Command() { - const { activeBudgetId, isLoading } = checkForActiveBudget(); - - if (isLoading) { - return null; - } + const { activeBudgetId } = checkForActiveBudget(); if (!activeBudgetId) { return null; diff --git a/extensions/raynab/src/transaction.tsx b/extensions/raynab/src/transaction.tsx index 038ab1c8f6d..c991a6886aa 100644 --- a/extensions/raynab/src/transaction.tsx +++ b/extensions/raynab/src/transaction.tsx @@ -3,11 +3,7 @@ import { checkForActiveBudget } from '@lib/utils/checkForActiveBudget'; import { LaunchProps } from '@raycast/api'; export default function Command(props: LaunchProps) { - const { activeBudgetId, isLoading } = checkForActiveBudget(); - - if (isLoading) { - return null; - } + const { activeBudgetId } = checkForActiveBudget(); if (!activeBudgetId) { return null; diff --git a/extensions/raynab/src/transactions.tsx b/extensions/raynab/src/transactions.tsx index a7a989ef67c..88cb30ff072 100644 --- a/extensions/raynab/src/transactions.tsx +++ b/extensions/raynab/src/transactions.tsx @@ -3,11 +3,7 @@ import { checkForActiveBudget } from '@lib/utils/checkForActiveBudget'; import { LaunchProps } from '@raycast/api'; export default function Command(props: LaunchProps) { - const { activeBudgetId, isLoading } = checkForActiveBudget(); - - if (isLoading) { - return null; - } + const { activeBudgetId } = checkForActiveBudget(); if (!activeBudgetId) { return null; diff --git a/extensions/raynab/src/unreviewed.tsx b/extensions/raynab/src/unreviewed.tsx index ede707660e0..04f3a04a9eb 100644 --- a/extensions/raynab/src/unreviewed.tsx +++ b/extensions/raynab/src/unreviewed.tsx @@ -2,11 +2,7 @@ import { UnreviewedTransactionView } from '@components/transactions/unreviewedTr import { checkForActiveBudget } from '@lib/utils/checkForActiveBudget'; export default function Command() { - const { activeBudgetId, isLoading } = checkForActiveBudget(); - - if (isLoading) { - return null; - } + const { activeBudgetId } = checkForActiveBudget(); if (!activeBudgetId) { return null; From 71879401db36ff8f143efcf6c11e7eb27a221fa9 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Tue, 15 Apr 2025 15:59:22 -0700 Subject: [PATCH 22/31] Refactor OpenInYnabAction and TransactionCreateForm components - Added the Icon import to OpenInYnabAction for improved UI representation. - Moved the onSubcategoryAmountChange handler definition in TransactionCreateForm to ensure it is defined before its first usage, enhancing code clarity and organization. These changes improve the structure and maintainability of the Raynab extension's components. --- .../src/components/actions/openInYnabAction.tsx | 3 +-- .../transactions/transactionCreateForm.tsx | 15 ++++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/extensions/raynab/src/components/actions/openInYnabAction.tsx b/extensions/raynab/src/components/actions/openInYnabAction.tsx index f41987cb208..45de3c2eebc 100644 --- a/extensions/raynab/src/components/actions/openInYnabAction.tsx +++ b/extensions/raynab/src/components/actions/openInYnabAction.tsx @@ -1,7 +1,6 @@ -import { Action } from '@raycast/api'; +import { Action, Icon } from '@raycast/api'; import { URLs } from '@constants'; import { useLocalStorage } from '@raycast/utils'; -import { Icon } from '@raycast/api'; interface OpenInYnabActionProps { accounts?: boolean; diff --git a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx index 7ae18510211..5407c343e80 100644 --- a/extensions/raynab/src/components/transactions/transactionCreateForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionCreateForm.tsx @@ -136,6 +136,14 @@ export function TransactionCreateForm({ accountId, transaction }: TransactionCre )); }, [subtransactions, isTransfer, categories]); + // Move the handler definition here so it's before its first usage + const onSubcategoryAmountChange = onSubtransactionAmountChangeHandler({ + amount, + currency: activeBudgetCurrency, + subtransactions, + setSubtransactions, + }); + // Form hook - always called const { handleSubmit, itemProps } = useForm({ initialValues: { @@ -272,13 +280,6 @@ export function TransactionCreateForm({ accountId, transaction }: TransactionCre return ; } - const onSubcategoryAmountChange = onSubtransactionAmountChangeHandler({ - amount, - currency: activeBudgetCurrency, - subtransactions, - setSubtransactions, - }); - return ( Date: Tue, 15 Apr 2025 16:00:52 -0700 Subject: [PATCH 23/31] style: Redundant reconciled check - already handled by useEffect hook on lines 103-113. --- .../src/components/transactions/transactionEditForm.tsx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/extensions/raynab/src/components/transactions/transactionEditForm.tsx b/extensions/raynab/src/components/transactions/transactionEditForm.tsx index 36d31b65f97..8ec4305ef67 100644 --- a/extensions/raynab/src/components/transactions/transactionEditForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionEditForm.tsx @@ -158,11 +158,6 @@ export function TransactionEditForm({ transaction }: TransactionEditFormProps) { : undefined, }; - if (isReconciled) { - await showToast({ style: Toast.Style.Failure, title: 'Cannot edit reconciled transaction' }); - return; - } - await mutate(updateTransaction(activeBudgetId, transaction.id, transactionData)); toast.style = Toast.Style.Success; toast.title = 'Transaction updated successfully'; From bc88b68292ea65aa92d597c09ebb2fc99e2035b4 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Tue, 15 Apr 2025 16:08:58 -0700 Subject: [PATCH 24/31] Refactor logging and improve account search logic in Raynab extension tools - Removed unnecessary console log statements from various tools (add-transaction, get-account-details, get-accounts, get-big-numbers, get-budget, get-transactions) to clean up the code and reduce clutter in the console output. - Enhanced the account search logic in get-account-details to prioritize exact name matches before partial matches, improving accuracy in account retrieval. These changes streamline the codebase and enhance the performance of the Raynab extension's tools. --- .../raynab/src/tools/add-transaction.ts | 9 ---- .../raynab/src/tools/get-account-details.ts | 15 ++----- extensions/raynab/src/tools/get-accounts.ts | 11 ----- .../raynab/src/tools/get-big-numbers.ts | 43 +++++++------------ extensions/raynab/src/tools/get-budget.ts | 24 ----------- .../raynab/src/tools/get-transactions.ts | 25 ----------- 6 files changed, 18 insertions(+), 109 deletions(-) diff --git a/extensions/raynab/src/tools/add-transaction.ts b/extensions/raynab/src/tools/add-transaction.ts index 75079513b72..e949ed4bd43 100644 --- a/extensions/raynab/src/tools/add-transaction.ts +++ b/extensions/raynab/src/tools/add-transaction.ts @@ -44,7 +44,6 @@ function findAccount(accounts: Account[], accountName?: string, accountId?: stri if (accountId) { const account = accounts.find((acc) => acc.id === accountId); if (account) { - console.log('Found account by ID:', account); return account; } } @@ -54,7 +53,6 @@ function findAccount(accounts: Account[], accountName?: string, accountId?: stri const inputNameLower = accountName.toLowerCase().trim(); const account = accounts.find((acc) => acc.name.toLowerCase().trim().includes(inputNameLower)); if (account) { - console.log('Found account by name:', account); return account; } } @@ -151,14 +149,11 @@ export default async function (input: TransactionInput) { const accounts = await fetchAccounts(activeBudgetId); if (!accounts || accounts.length === 0) { - console.log('No accounts found for budget'); throw new Error('No accounts found for the selected budget'); } - console.log('Finding account with name:', input.account_name); const account = findAccount(accounts, input.account_name); if (!account) { - console.log('Account not found'); const validAccounts = accounts .filter((acc) => !acc.closed && !acc.deleted && acc.on_budget) .map((acc) => acc.name); @@ -166,9 +161,7 @@ export default async function (input: TransactionInput) { throw new Error(`Account not found. Available accounts: ${validAccounts.join(', ')}`); } - console.log('Found account:', account); const transaction = formatTransactionData(account, input); - console.log('Formatted transaction:', transaction); await launchCommand({ name: 'transaction', @@ -178,10 +171,8 @@ export default async function (input: TransactionInput) { }, }); - console.log('Transaction form launched successfully'); return { success: true }; } catch (error) { - console.error('Error in add-transaction tool:', error); await showToast({ style: Toast.Style.Failure, title: 'Failed to Create Transaction', diff --git a/extensions/raynab/src/tools/get-account-details.ts b/extensions/raynab/src/tools/get-account-details.ts index f912bc23ce6..40017b91bb1 100644 --- a/extensions/raynab/src/tools/get-account-details.ts +++ b/extensions/raynab/src/tools/get-account-details.ts @@ -46,7 +46,9 @@ export default async function (input: GetAccountDetailsInput): Promise acc.name.toLowerCase().includes(searchQuery) || searchQuery.includes(acc.name.toLowerCase()), + (acc) => acc.name.toLowerCase() === searchQuery + ) || (accounts || []).find( + (acc) => acc.name.toLowerCase().includes(searchQuery) ); if (!account) { @@ -71,16 +73,5 @@ export default async function (input: GetAccountDetailsInput): Promise { accounts: formattedAccounts, }; - // Log the result with account details - console.log('get-accounts tool returned with:', { - ...result, - accounts: result.accounts.map((acc) => ({ - name: acc.name, - balance: acc.balance, - type: acc.type, - on_budget: acc.on_budget, - })), - }); - return result; } diff --git a/extensions/raynab/src/tools/get-big-numbers.ts b/extensions/raynab/src/tools/get-big-numbers.ts index b8f0e28212c..5286b61c869 100644 --- a/extensions/raynab/src/tools/get-big-numbers.ts +++ b/extensions/raynab/src/tools/get-big-numbers.ts @@ -16,13 +16,10 @@ interface BigNumbersOutput { // https://9to5mac.com/2025/04/14/a-tweet-asked-for-a-simple-finance-app-two-hours-later-it-existed/ export const getBigNumbers = async (): Promise => { try { - console.log('get-big-numbers tool called'); - const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); if (!activeBudgetId) { - console.log('No active budget found'); return { success: false, today: '0', @@ -37,15 +34,12 @@ export const getBigNumbers = async (): Promise => { // Get all accounts to filter valid ones const accounts = await fetchAccounts(activeBudgetId); - console.log(`Fetched ${accounts?.length || 0} total accounts`); // Format accounts to include only relevant fields and filter out closed accounts const validAccounts = (accounts || []) .filter((account) => !account.closed && account.on_budget) .map((account) => account.id); - console.log(`Found ${validAccounts.length} valid accounts (non-closed and on-budget)`); - if (validAccounts.length === 0) { return { success: false, @@ -58,10 +52,8 @@ export const getBigNumbers = async (): Promise => { // Get transactions for the last month const transactions = (await fetchTransactions(activeBudgetId, 'month' as Period)) ?? []; - console.log(`Fetched ${transactions.length} total transactions from the last month`); if (transactions.length === 0) { - console.log('No transactions found'); return { success: true, today: '0', @@ -71,43 +63,39 @@ export const getBigNumbers = async (): Promise => { } const now = new Date(); - const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); + const today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate())); const weekAgo = new Date(today); - weekAgo.setDate(weekAgo.getDate() - 7); + weekAgo.setUTCDate(weekAgo.getUTCDate() - 7); const monthAgo = new Date(today); - monthAgo.setMonth(monthAgo.getMonth() - 1); + monthAgo.setUTCMonth(monthAgo.getUTCMonth() - 1); // Filter transactions to only include non-transfer spending from valid accounts const validTransactions = transactions.filter( (t) => !t.transfer_account_id && t.amount < 0 && validAccounts.includes(t.account_id), ); - console.log(`Found ${validTransactions.length} valid transactions (non-transfer, spending, from valid accounts)`); - // Calculate spending for each period const todaySpending = validTransactions - .filter((t) => new Date(t.date) >= today) + .filter((t) => { + const txnDate = new Date(t.date + 'T00:00:00Z'); + return txnDate >= today; + }) .reduce((sum, t) => sum + Math.abs(t.amount), 0); const weekSpending = validTransactions - .filter((t) => new Date(t.date) >= weekAgo) + .filter((t) => { + const txnDate = new Date(t.date + 'T00:00:00Z'); + return txnDate >= weekAgo; + }) .reduce((sum, t) => sum + Math.abs(t.amount), 0); const monthSpending = validTransactions - .filter((t) => new Date(t.date) >= monthAgo) + .filter((t) => { + const txnDate = new Date(t.date + 'T00:00:00Z'); + return txnDate >= monthAgo; + }) .reduce((sum, t) => sum + Math.abs(t.amount), 0); - // Log the results for debugging - console.log('get-big-numbers tool calculated:', { - todaySpending, - weekSpending, - monthSpending, - validTransactionsCount: validTransactions.length, - totalTransactionsCount: transactions.length, - period: 'month', - validAccountIds: validAccounts, - }); - return { success: true, today: formatToReadableAmount({ amount: todaySpending, currency: activeBudgetCurrency }), @@ -115,7 +103,6 @@ export const getBigNumbers = async (): Promise => { thisMonth: formatToReadableAmount({ amount: monthSpending, currency: activeBudgetCurrency }), }; } catch (error) { - console.error('Error in get-big-numbers tool:', error); return { success: false, today: '0', diff --git a/extensions/raynab/src/tools/get-budget.ts b/extensions/raynab/src/tools/get-budget.ts index b8a49c602fe..a1a46961e35 100644 --- a/extensions/raynab/src/tools/get-budget.ts +++ b/extensions/raynab/src/tools/get-budget.ts @@ -22,13 +22,10 @@ interface GetBudgetOutput { export default async function (input: GetBudgetInput = {}): Promise { try { - console.log('get-budget tool called with:', input); - const storedBudgetId = await LocalStorage.getItem('activeBudgetId'); const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); if (!activeBudgetId) { - console.log('No active budget found'); return { success: false, month: '', @@ -44,11 +41,9 @@ export default async function (input: GetBudgetInput = {}): Promise('activeBudgetCurrency'); const activeBudgetCurrency = storedCurrency ? (JSON.parse(storedCurrency) as CurrencyFormat) : null; - console.log('Using currency format:', activeBudgetCurrency?.iso_code); const budget = await fetchBudget(activeBudgetId); if (!budget?.months) { - console.log('No budget data found'); return { success: false, month: '', @@ -62,12 +57,6 @@ export default async function (input: GetBudgetInput = {}): Promise m.month), - ); - // If month is provided, use it; otherwise use current month let targetMonthStr: string; if (input.month) { @@ -77,12 +66,10 @@ export default async function (input: GetBudgetInput = {}): Promise m.month === targetMonthStr); if (!targetMonth) { - console.log('No month data found'); return { success: false, month: '', @@ -96,8 +83,6 @@ export default async function (input: GetBudgetInput = {}): Promise('activeBudgetId'); const activeBudgetId = storedBudgetId?.replace(/["']/g, ''); if (!activeBudgetId) { - console.log('No active budget found'); return { success: false, error: 'No active budget found', @@ -49,48 +46,35 @@ export default async function (input: GetTransactionsInput) { const activeBudgetCurrency = storedCurrency ? (JSON.parse(storedCurrency) as CurrencyFormat) : null; const period = input.period || 'month'; - console.log(`Using period: ${period}`); const transactions = (await fetchTransactions(activeBudgetId, period)) || []; - console.log(`Fetched ${transactions.length} total transactions from the last ${period}`); // First filter by payee and/or category if provided let filteredTransactions = transactions; if (input.payee) { const payeeLower = input.payee.toLowerCase(); - console.log(`Filtering by payee: ${input.payee}`); filteredTransactions = filteredTransactions.filter((t) => { const matches = t.payee_name?.toLowerCase().includes(payeeLower) || t.payee_id?.toLowerCase().includes(payeeLower); - if (matches) { - console.log(`Found matching transaction: ${t.payee_name} (${t.date})`); - } return matches; }); - console.log(`Found ${filteredTransactions.length} transactions matching payee`); } if (input.category) { const categoryLower = input.category.toLowerCase(); - console.log(`Filtering by category: ${input.category}`); filteredTransactions = filteredTransactions.filter((t) => { const matches = t.category_name?.toLowerCase().includes(categoryLower) || t.category_id?.toLowerCase().includes(categoryLower); - if (matches) { - console.log(`Found matching transaction: ${t.category_name} (${t.date})`); - } return matches; }); - console.log(`Found ${filteredTransactions.length} transactions matching category`); } // Then apply the main filter if specified if (input.filter === 'active') { // Get active (unapproved/uncategorized) transactions filteredTransactions = filteredTransactions.filter((t) => !t.approved || !t.category_id); - console.log(`Returning ${filteredTransactions.length} active transactions`); } // Sort by date in descending order @@ -103,17 +87,8 @@ export default async function (input: GetTransactionsInput) { amount: formatToReadableAmount({ amount: t.amount, currency: activeBudgetCurrency }), })), }; - console.log('get-transactions tool returned with:', { - ...result, - transactions: result.transactions.map((t) => ({ - payee: t.payee_name, - date: t.date, - amount: t.amount, - })), - }); return result; } catch (error) { - console.error('Error in get-transactions tool:', error); return { success: false, error: error instanceof Error ? error.message : 'Unknown error occurred', From af025e0450f744f67af05352fdb9d8c123461591 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Tue, 15 Apr 2025 16:14:58 -0700 Subject: [PATCH 25/31] Enhance error handling and date validation in Raynab extension tools - Replaced the showToast function with showFailureToast in checkForActiveBudget for improved error messaging. - Added regex validation for date format in add-transaction to ensure correct input format (YYYY-MM-DD). - Streamlined account search logic in get-account-details for better readability. These updates improve user feedback and data integrity within the Raynab extension's tools. --- .../raynab/src/lib/utils/checkForActiveBudget.ts | 10 +++++----- extensions/raynab/src/tools/add-transaction.ts | 5 ++++- extensions/raynab/src/tools/get-account-details.ts | 8 +++----- extensions/raynab/src/tools/get-accounts.ts | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/extensions/raynab/src/lib/utils/checkForActiveBudget.ts b/extensions/raynab/src/lib/utils/checkForActiveBudget.ts index e03e39c7363..a0c93dee98d 100644 --- a/extensions/raynab/src/lib/utils/checkForActiveBudget.ts +++ b/extensions/raynab/src/lib/utils/checkForActiveBudget.ts @@ -1,5 +1,5 @@ -import { launchCommand, LaunchType, showToast, Toast } from '@raycast/api'; -import { useLocalStorage } from '@raycast/utils'; +import { launchCommand, LaunchType } from '@raycast/api'; +import { useLocalStorage, showFailureToast } from '@raycast/utils'; /** * Hook to check for active budget and show a toast if none is found @@ -9,15 +9,15 @@ export function checkForActiveBudget() { const { value: activeBudgetId, isLoading } = useLocalStorage('activeBudgetId', ''); if (!isLoading && !activeBudgetId) { - showToast({ - style: Toast.Style.Failure, - title: 'No Active Budget', + showFailureToast('No Active Budget', { message: 'Please select a budget first by running the "Select Budget" command.', }); launchCommand({ name: 'activeBudget', type: LaunchType.UserInitiated, + }).catch((error) => { + showFailureToast(error, { title: 'Failed to launch budget selection' }); }); } diff --git a/extensions/raynab/src/tools/add-transaction.ts b/extensions/raynab/src/tools/add-transaction.ts index e949ed4bd43..8cac2954a05 100644 --- a/extensions/raynab/src/tools/add-transaction.ts +++ b/extensions/raynab/src/tools/add-transaction.ts @@ -85,7 +85,10 @@ function formatTransactionData(account: Account, input: TransactionInput) { if (date) { try { // Validate date format - new Date(date); + const dateRegex = /^\d{4}-\d{2}-\d{2}$/; + if (!dateRegex.test(date) || isNaN(new Date(date).getTime())) { + throw new Error('Invalid date format. Please use YYYY-MM-DD format'); + } } catch (e) { throw new Error('Invalid date format. Please use YYYY-MM-DD format'); } diff --git a/extensions/raynab/src/tools/get-account-details.ts b/extensions/raynab/src/tools/get-account-details.ts index 40017b91bb1..72e3bcea915 100644 --- a/extensions/raynab/src/tools/get-account-details.ts +++ b/extensions/raynab/src/tools/get-account-details.ts @@ -45,11 +45,9 @@ export default async function (input: GetAccountDetailsInput): Promise acc.name.toLowerCase() === searchQuery - ) || (accounts || []).find( - (acc) => acc.name.toLowerCase().includes(searchQuery) - ); + const account = + (accounts || []).find((acc) => acc.name.toLowerCase() === searchQuery) || + (accounts || []).find((acc) => acc.name.toLowerCase().includes(searchQuery)); if (!account) { return { diff --git a/extensions/raynab/src/tools/get-accounts.ts b/extensions/raynab/src/tools/get-accounts.ts index d99800cc5e6..47caa537438 100644 --- a/extensions/raynab/src/tools/get-accounts.ts +++ b/extensions/raynab/src/tools/get-accounts.ts @@ -37,7 +37,7 @@ export default async function (): Promise { const accounts = await fetchAccounts(activeBudgetId); // Format accounts to include only relevant fields and filter out closed accounts - const formattedAccounts = (accounts || []) + const formattedAccounts = (accounts ?? []) .filter((account) => !account.closed) .map((account) => ({ id: account.id, From 1a1fd122185df8d05037d2d3c25fd9216d9674c8 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Tue, 15 Apr 2025 16:30:00 -0700 Subject: [PATCH 26/31] Enhance transaction deletion handling in TransactionView component - Updated the handleTransactionDeleted function to await the completion of the mutate call, ensuring the transactions list is refreshed with the latest data before resetting the view state. - This change improves the accuracy of the displayed transactions after a deletion, enhancing user experience within the Raynab extension. --- .../src/components/transactions/transactionView.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/extensions/raynab/src/components/transactions/transactionView.tsx b/extensions/raynab/src/components/transactions/transactionView.tsx index efa78659bc9..20d79d1582f 100644 --- a/extensions/raynab/src/components/transactions/transactionView.tsx +++ b/extensions/raynab/src/components/transactions/transactionView.tsx @@ -139,11 +139,11 @@ export function TransactionView({ search = '', filter: defaultFilter = null }: T ? 'Search scheduled transactions' : `Search ${dropDownValue === 'unreviewed' ? 'unreviewed ' : ''}transactions in the last ${timeline}`; - const handleTransactionDeleted = () => { - // Refresh the transactions list - mutate(); + const handleTransactionDeleted = async () => { + // Wait for mutate to complete and get the updated transactions + const updatedTransactions = await mutate(); // Reset the view state with the updated transactions - dispatch({ type: 'reset', initialCollection: transactions }); + dispatch({ type: 'reset', initialCollection: updatedTransactions }); }; return ( From ecfe6f4a6995ab19d555f9e233c829720399f1ad Mon Sep 17 00:00:00 2001 From: omarshahine Date: Fri, 16 May 2025 15:04:07 -0700 Subject: [PATCH 27/31] Update dependencies and enhance OpenInYnabAction component in Raynab extension based on code review --- extensions/raynab/package-lock.json | 565 +++++++++--------- extensions/raynab/package.json | 6 +- .../components/actions/openInYnabAction.tsx | 11 +- .../transactions/transactionEditForm.tsx | 2 +- 4 files changed, 296 insertions(+), 288 deletions(-) diff --git a/extensions/raynab/package-lock.json b/extensions/raynab/package-lock.json index 44a402a624e..bc76572b40e 100644 --- a/extensions/raynab/package-lock.json +++ b/extensions/raynab/package-lock.json @@ -63,9 +63,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", - "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", "cpu": [ "ppc64" ], @@ -79,9 +79,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", - "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", "cpu": [ "arm" ], @@ -95,9 +95,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", - "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", "cpu": [ "arm64" ], @@ -111,9 +111,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", - "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", "cpu": [ "x64" ], @@ -127,9 +127,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", - "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", "cpu": [ "arm64" ], @@ -143,9 +143,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", - "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", "cpu": [ "x64" ], @@ -159,9 +159,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", - "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", "cpu": [ "arm64" ], @@ -175,9 +175,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", - "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", "cpu": [ "x64" ], @@ -191,9 +191,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", - "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", "cpu": [ "arm" ], @@ -207,9 +207,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", - "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", "cpu": [ "arm64" ], @@ -223,9 +223,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", - "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", "cpu": [ "ia32" ], @@ -239,9 +239,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", - "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", "cpu": [ "loong64" ], @@ -255,9 +255,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", - "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", "cpu": [ "mips64el" ], @@ -271,9 +271,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", - "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", "cpu": [ "ppc64" ], @@ -287,9 +287,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", - "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", "cpu": [ "riscv64" ], @@ -303,9 +303,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", - "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", "cpu": [ "s390x" ], @@ -319,9 +319,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", - "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", "cpu": [ "x64" ], @@ -335,9 +335,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", - "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", "cpu": [ "arm64" ], @@ -351,9 +351,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", - "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", "cpu": [ "x64" ], @@ -367,9 +367,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", - "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", "cpu": [ "arm64" ], @@ -383,9 +383,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", - "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", "cpu": [ "x64" ], @@ -399,9 +399,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", - "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", "cpu": [ "x64" ], @@ -415,9 +415,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", - "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", "cpu": [ "arm64" ], @@ -431,9 +431,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", - "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", "cpu": [ "ia32" ], @@ -447,9 +447,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", - "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", "cpu": [ "x64" ], @@ -463,9 +463,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.0.tgz", - "integrity": "sha512-WhCn7Z7TauhBtmzhvKpoQs0Wwb/kBcy4CwpuI0/eEIr2Lx2auxmulAzLr91wVZJaz47iUZdkXOK7WlAfxGKCnA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, "license": "MIT", "dependencies": { @@ -612,12 +612,12 @@ "license": "BSD-3-Clause" }, "node_modules/@inquirer/checkbox": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.5.tgz", - "integrity": "sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.6.tgz", + "integrity": "sha512-62u896rWCtKKE43soodq5e/QcRsA22I+7/4Ov7LESWnKRO6BVo2A1DFLDmXL9e28TB0CfHc3YtkbPm7iwajqkg==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.10", + "@inquirer/core": "^10.1.11", "@inquirer/figures": "^1.0.11", "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2", @@ -636,12 +636,12 @@ } }, "node_modules/@inquirer/confirm": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.9.tgz", - "integrity": "sha512-NgQCnHqFTjF7Ys2fsqK2WtnA8X1kHyInyG+nMIuHowVTIgIuS10T4AznI/PvbqSpJqjCUqNBlKGh1v3bwLFL4w==", + "version": "5.1.10", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.10.tgz", + "integrity": "sha512-FxbQ9giWxUWKUk2O5XZ6PduVnH2CZ/fmMKMBkH71MHJvWr7WL5AHKevhzF1L5uYWB2P548o1RzVxrNd3dpmk6g==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.10", + "@inquirer/core": "^10.1.11", "@inquirer/type": "^3.0.6" }, "engines": { @@ -657,9 +657,9 @@ } }, "node_modules/@inquirer/core": { - "version": "10.1.10", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.10.tgz", - "integrity": "sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw==", + "version": "10.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.11.tgz", + "integrity": "sha512-BXwI/MCqdtAhzNQlBEFE7CEflhPkl/BqvAuV/aK6lW3DClIfYVDWPP/kXuXHtBWC7/EEbNqd/1BGq2BGBBnuxw==", "license": "MIT", "dependencies": { "@inquirer/figures": "^1.0.11", @@ -698,12 +698,12 @@ } }, "node_modules/@inquirer/editor": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.10.tgz", - "integrity": "sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.11.tgz", + "integrity": "sha512-YoZr0lBnnLFPpfPSNsQ8IZyKxU47zPyVi9NLjCWtna52//M/xuL0PGPAxHxxYhdOhnvY2oBafoM+BI5w/JK7jw==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.10", + "@inquirer/core": "^10.1.11", "@inquirer/type": "^3.0.6", "external-editor": "^3.1.0" }, @@ -720,12 +720,12 @@ } }, "node_modules/@inquirer/expand": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.12.tgz", - "integrity": "sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw==", + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.13.tgz", + "integrity": "sha512-HgYNWuZLHX6q5y4hqKhwyytqAghmx35xikOGY3TcgNiElqXGPas24+UzNPOwGUZa5Dn32y25xJqVeUcGlTv+QQ==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.10", + "@inquirer/core": "^10.1.11", "@inquirer/type": "^3.0.6", "yoctocolors-cjs": "^2.1.2" }, @@ -751,12 +751,12 @@ } }, "node_modules/@inquirer/input": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.9.tgz", - "integrity": "sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.10.tgz", + "integrity": "sha512-kV3BVne3wJ+j6reYQUZi/UN9NZGZLxgc/tfyjeK3mrx1QI7RXPxGp21IUTv+iVHcbP4ytZALF8vCHoxyNSC6qg==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.10", + "@inquirer/core": "^10.1.11", "@inquirer/type": "^3.0.6" }, "engines": { @@ -772,12 +772,12 @@ } }, "node_modules/@inquirer/number": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.12.tgz", - "integrity": "sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.13.tgz", + "integrity": "sha512-IrLezcg/GWKS8zpKDvnJ/YTflNJdG0qSFlUM/zNFsdi4UKW/CO+gaJpbMgQ20Q58vNKDJbEzC6IebdkprwL6ew==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.10", + "@inquirer/core": "^10.1.11", "@inquirer/type": "^3.0.6" }, "engines": { @@ -793,12 +793,12 @@ } }, "node_modules/@inquirer/password": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.12.tgz", - "integrity": "sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g==", + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.13.tgz", + "integrity": "sha512-NN0S/SmdhakqOTJhDwOpeBEEr8VdcYsjmZHDb0rblSh2FcbXQOr+2IApP7JG4WE3sxIdKytDn4ed3XYwtHxmJQ==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.10", + "@inquirer/core": "^10.1.11", "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2" }, @@ -815,21 +815,21 @@ } }, "node_modules/@inquirer/prompts": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.4.1.tgz", - "integrity": "sha512-UlmM5FVOZF0gpoe1PT/jN4vk8JmpIWBlMvTL8M+hlvPmzN89K6z03+IFmyeu/oFCenwdwHDr2gky7nIGSEVvlA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.5.1.tgz", + "integrity": "sha512-5AOrZPf2/GxZ+SDRZ5WFplCA2TAQgK3OYrXCYmJL5NaTu4ECcoWFlfUZuw7Es++6Njv7iu/8vpYJhuzxUH76Vg==", "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^4.1.5", - "@inquirer/confirm": "^5.1.9", - "@inquirer/editor": "^4.2.10", - "@inquirer/expand": "^4.0.12", - "@inquirer/input": "^4.1.9", - "@inquirer/number": "^3.0.12", - "@inquirer/password": "^4.0.12", - "@inquirer/rawlist": "^4.0.12", - "@inquirer/search": "^3.0.12", - "@inquirer/select": "^4.1.1" + "@inquirer/checkbox": "^4.1.6", + "@inquirer/confirm": "^5.1.10", + "@inquirer/editor": "^4.2.11", + "@inquirer/expand": "^4.0.13", + "@inquirer/input": "^4.1.10", + "@inquirer/number": "^3.0.13", + "@inquirer/password": "^4.0.13", + "@inquirer/rawlist": "^4.1.1", + "@inquirer/search": "^3.0.13", + "@inquirer/select": "^4.2.1" }, "engines": { "node": ">=18" @@ -844,12 +844,12 @@ } }, "node_modules/@inquirer/rawlist": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.12.tgz", - "integrity": "sha512-wNPJZy8Oc7RyGISPxp9/MpTOqX8lr0r+lCCWm7hQra+MDtYRgINv1hxw7R+vKP71Bu/3LszabxOodfV/uTfsaA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.1.tgz", + "integrity": "sha512-VBUC0jPN2oaOq8+krwpo/mf3n/UryDUkKog3zi+oIi8/e5hykvdntgHUB9nhDM78RubiyR1ldIOfm5ue+2DeaQ==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.10", + "@inquirer/core": "^10.1.11", "@inquirer/type": "^3.0.6", "yoctocolors-cjs": "^2.1.2" }, @@ -866,12 +866,12 @@ } }, "node_modules/@inquirer/search": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.12.tgz", - "integrity": "sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ==", + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.13.tgz", + "integrity": "sha512-9g89d2c5Izok/Gw/U7KPC3f9kfe5rA1AJ24xxNZG0st+vWekSk7tB9oE+dJv5JXd0ZSijomvW0KPMoBd8qbN4g==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.10", + "@inquirer/core": "^10.1.11", "@inquirer/figures": "^1.0.11", "@inquirer/type": "^3.0.6", "yoctocolors-cjs": "^2.1.2" @@ -889,12 +889,12 @@ } }, "node_modules/@inquirer/select": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.1.1.tgz", - "integrity": "sha512-IUXzzTKVdiVNMA+2yUvPxWsSgOG4kfX93jOM4Zb5FgujeInotv5SPIJVeXQ+fO4xu7tW8VowFhdG5JRmmCyQ1Q==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.2.1.tgz", + "integrity": "sha512-gt1Kd5XZm+/ddemcT3m23IP8aD8rC9drRckWoP/1f7OL46Yy2FGi8DSmNjEjQKtPl6SV96Kmjbl6p713KXJ/Jg==", "license": "MIT", "dependencies": { - "@inquirer/core": "^10.1.10", + "@inquirer/core": "^10.1.11", "@inquirer/figures": "^1.0.11", "@inquirer/type": "^3.0.6", "ansi-escapes": "^4.3.2", @@ -972,9 +972,9 @@ } }, "node_modules/@oclif/core": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.2.10.tgz", - "integrity": "sha512-fAqcXgqkUm4v5FYy7qWP4w1HaOlVSVJveah+yVTo5Nm5kTiXhmD5mQQ7+knGeBaStyrtQy6WardoC2xSic9rlQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.3.0.tgz", + "integrity": "sha512-lIzHY+JMP6evrS5E/sGijNnwrCoNtGy8703jWXcMuPOYKiFhWoAqnIm1BGgoRgmxczkbSfRsHUL/lwsSgh74Lw==", "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.2", @@ -1001,9 +1001,9 @@ } }, "node_modules/@oclif/plugin-autocomplete": { - "version": "3.2.27", - "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.27.tgz", - "integrity": "sha512-Aywx0Vw36k0fQVBa2uLb8FKblGAP7ly1cQ5bdKqL4BmhJnUasy37tpyIDMUor93asOS+kKFQg+52pOxQgXHi1A==", + "version": "3.2.28", + "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.28.tgz", + "integrity": "sha512-6CaLO/SHMx1GVn8gAVGOZ3TPoj+hf88BvLTafp86MnNGxdYr5+YrSbh29py1j+ROIuUIj1KIodJB3yNTd0o6ow==", "license": "MIT", "dependencies": { "@oclif/core": "^4", @@ -1016,9 +1016,9 @@ } }, "node_modules/@oclif/plugin-help": { - "version": "6.2.27", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.27.tgz", - "integrity": "sha512-RWSWtCFVObRmCwgxVOye3lsYbPHTnB7G4He5LEAg2tf600Sil5yXEOL/ULx1TqL/XOQxKqRvmLn/rLQOMT85YA==", + "version": "6.2.28", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.28.tgz", + "integrity": "sha512-eFLP2yjiK+xMRGcv9k9jOWV08HB+/Cgg1ND91zS4Uwgp1krMoL39Is+hIqnZOKkmiEMtiv8k5EDqCVv+DTRywg==", "license": "MIT", "dependencies": { "@oclif/core": "^4" @@ -1028,12 +1028,12 @@ } }, "node_modules/@oclif/plugin-not-found": { - "version": "3.2.49", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.49.tgz", - "integrity": "sha512-3V74/O5aFAqTTCJ7+X04M6vmt59Dk8HimB2uOlGgJrR7yLMW9JsVWKpDZZ6fl1hfd5kK9Jn4oaEt/1LuwfW1wQ==", + "version": "3.2.51", + "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.51.tgz", + "integrity": "sha512-hnYH4GS7lYD3Z59LO9RZAIXQPmuW+rNnTjCheSwAzWyoUH1M2Va6dUpamfnMf/GryrFvn1srBDdgKHr5KRf+Qw==", "license": "MIT", "dependencies": { - "@inquirer/prompts": "^7.4.1", + "@inquirer/prompts": "^7.5.0", "@oclif/core": "^4", "ansis": "^3.17.0", "fast-levenshtein": "^3.0.0" @@ -1043,9 +1043,9 @@ } }, "node_modules/@raycast/api": { - "version": "1.95.0", - "resolved": "https://registry.npmjs.org/@raycast/api/-/api-1.95.0.tgz", - "integrity": "sha512-uf12AUd7QiMG6LUGCRZNImdFe1sAOijNRSwMqRb/vAomusOBueORsukNhrfaKpmrufiYNvUoRDssVclJcvsYgw==", + "version": "1.98.5", + "resolved": "https://registry.npmjs.org/@raycast/api/-/api-1.98.5.tgz", + "integrity": "sha512-vWIukLMPL8EBUquT7tUv7GQblrzh1TXlrNlrbEseBglUG7HaOUB0hLLhZ5ipmCIzR1HshTASQdftHIY2MfU0TQ==", "license": "MIT", "dependencies": { "@oclif/core": "^4.0.33", @@ -1176,9 +1176,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz", - "integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", + "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==", "cpu": [ "arm" ], @@ -1190,9 +1190,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz", - "integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz", + "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==", "cpu": [ "arm64" ], @@ -1204,9 +1204,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz", - "integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz", + "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==", "cpu": [ "arm64" ], @@ -1218,9 +1218,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz", - "integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz", + "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==", "cpu": [ "x64" ], @@ -1232,9 +1232,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz", - "integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz", + "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==", "cpu": [ "arm64" ], @@ -1246,9 +1246,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz", - "integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz", + "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==", "cpu": [ "x64" ], @@ -1260,9 +1260,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz", - "integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz", + "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==", "cpu": [ "arm" ], @@ -1274,9 +1274,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz", - "integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz", + "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==", "cpu": [ "arm" ], @@ -1288,9 +1288,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz", - "integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz", + "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==", "cpu": [ "arm64" ], @@ -1302,9 +1302,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz", - "integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz", + "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==", "cpu": [ "arm64" ], @@ -1316,9 +1316,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz", - "integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz", + "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==", "cpu": [ "loong64" ], @@ -1330,9 +1330,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz", - "integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", + "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", "cpu": [ "ppc64" ], @@ -1344,9 +1344,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz", - "integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", + "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", "cpu": [ "riscv64" ], @@ -1358,9 +1358,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz", - "integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", + "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", "cpu": [ "riscv64" ], @@ -1372,9 +1372,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz", - "integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", + "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", "cpu": [ "s390x" ], @@ -1386,9 +1386,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz", - "integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", + "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", "cpu": [ "x64" ], @@ -1400,9 +1400,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz", - "integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", + "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", "cpu": [ "x64" ], @@ -1414,9 +1414,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz", - "integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", + "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", "cpu": [ "arm64" ], @@ -1428,9 +1428,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz", - "integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", + "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", "cpu": [ "ia32" ], @@ -1442,9 +1442,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz", - "integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", + "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", "cpu": [ "x64" ], @@ -1533,9 +1533,9 @@ } }, "node_modules/@types/node": { - "version": "20.17.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz", - "integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==", + "version": "20.17.47", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.47.tgz", + "integrity": "sha512-3dLX0Upo1v7RvUimvxLeXqwrfyKxUINk0EAM83swP2mlSUcwV73sZy8XhNz8bcZ3VbsfQyC/y6jRdL5tgCNpDQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -1543,9 +1543,9 @@ } }, "node_modules/@types/react": { - "version": "19.1.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz", - "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", + "version": "19.1.4", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.4.tgz", + "integrity": "sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==", "dev": true, "license": "MIT", "dependencies": { @@ -2774,9 +2774,9 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -3059,9 +3059,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, @@ -3074,9 +3074,9 @@ "optional": true }, "node_modules/esbuild": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", - "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -3086,31 +3086,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.2", - "@esbuild/android-arm": "0.25.2", - "@esbuild/android-arm64": "0.25.2", - "@esbuild/android-x64": "0.25.2", - "@esbuild/darwin-arm64": "0.25.2", - "@esbuild/darwin-x64": "0.25.2", - "@esbuild/freebsd-arm64": "0.25.2", - "@esbuild/freebsd-x64": "0.25.2", - "@esbuild/linux-arm": "0.25.2", - "@esbuild/linux-arm64": "0.25.2", - "@esbuild/linux-ia32": "0.25.2", - "@esbuild/linux-loong64": "0.25.2", - "@esbuild/linux-mips64el": "0.25.2", - "@esbuild/linux-ppc64": "0.25.2", - "@esbuild/linux-riscv64": "0.25.2", - "@esbuild/linux-s390x": "0.25.2", - "@esbuild/linux-x64": "0.25.2", - "@esbuild/netbsd-arm64": "0.25.2", - "@esbuild/netbsd-x64": "0.25.2", - "@esbuild/openbsd-arm64": "0.25.2", - "@esbuild/openbsd-x64": "0.25.2", - "@esbuild/sunos-x64": "0.25.2", - "@esbuild/win32-arm64": "0.25.2", - "@esbuild/win32-ia32": "0.25.2", - "@esbuild/win32-x64": "0.25.2" + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" } }, "node_modules/escape-string-regexp": { @@ -3990,9 +3990,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "devOptional": true, "license": "BSD-2-Clause" }, @@ -4687,6 +4687,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -5466,9 +5467,9 @@ } }, "node_modules/rollup": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz", - "integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", + "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", "dev": true, "license": "MIT", "dependencies": { @@ -5482,26 +5483,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.40.0", - "@rollup/rollup-android-arm64": "4.40.0", - "@rollup/rollup-darwin-arm64": "4.40.0", - "@rollup/rollup-darwin-x64": "4.40.0", - "@rollup/rollup-freebsd-arm64": "4.40.0", - "@rollup/rollup-freebsd-x64": "4.40.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", - "@rollup/rollup-linux-arm-musleabihf": "4.40.0", - "@rollup/rollup-linux-arm64-gnu": "4.40.0", - "@rollup/rollup-linux-arm64-musl": "4.40.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", - "@rollup/rollup-linux-riscv64-gnu": "4.40.0", - "@rollup/rollup-linux-riscv64-musl": "4.40.0", - "@rollup/rollup-linux-s390x-gnu": "4.40.0", - "@rollup/rollup-linux-x64-gnu": "4.40.0", - "@rollup/rollup-linux-x64-musl": "4.40.0", - "@rollup/rollup-win32-arm64-msvc": "4.40.0", - "@rollup/rollup-win32-ia32-msvc": "4.40.0", - "@rollup/rollup-win32-x64-msvc": "4.40.0", + "@rollup/rollup-android-arm-eabi": "4.40.2", + "@rollup/rollup-android-arm64": "4.40.2", + "@rollup/rollup-darwin-arm64": "4.40.2", + "@rollup/rollup-darwin-x64": "4.40.2", + "@rollup/rollup-freebsd-arm64": "4.40.2", + "@rollup/rollup-freebsd-x64": "4.40.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", + "@rollup/rollup-linux-arm-musleabihf": "4.40.2", + "@rollup/rollup-linux-arm64-gnu": "4.40.2", + "@rollup/rollup-linux-arm64-musl": "4.40.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-musl": "4.40.2", + "@rollup/rollup-linux-s390x-gnu": "4.40.2", + "@rollup/rollup-linux-x64-gnu": "4.40.2", + "@rollup/rollup-linux-x64-musl": "4.40.2", + "@rollup/rollup-win32-arm64-msvc": "4.40.2", + "@rollup/rollup-win32-ia32-msvc": "4.40.2", + "@rollup/rollup-win32-x64-msvc": "4.40.2", "fsevents": "~2.3.2" } }, @@ -5556,9 +5557,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6318,9 +6319,9 @@ } }, "node_modules/vite": { - "version": "5.4.18", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.18.tgz", - "integrity": "sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==", + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index c77249f860a..3d1a6132645 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -102,7 +102,7 @@ "budget" ], "dependencies": { - "@raycast/api": "^1.95.0", + "@raycast/api": "^1.98.5", "@raycast/utils": "^1.18.1", "dayjs": "^1.11.13", "fuse.js": "^6.5.3", @@ -115,8 +115,8 @@ }, "devDependencies": { "@raycast/eslint-config": "^1.0.11", - "@types/node": "^20.17.12", - "@types/react": "^19.1.0", + "@types/node": "^22.15.18", + "@types/react": "^19.1.4", "eslint": "^8.57.1", "eslint-config-prettier": "^8.3.0", "prettier": "^3.4.2", diff --git a/extensions/raynab/src/components/actions/openInYnabAction.tsx b/extensions/raynab/src/components/actions/openInYnabAction.tsx index 45de3c2eebc..0ebfc9b2092 100644 --- a/extensions/raynab/src/components/actions/openInYnabAction.tsx +++ b/extensions/raynab/src/components/actions/openInYnabAction.tsx @@ -1,5 +1,5 @@ import { Action, Icon } from '@raycast/api'; -import { URLs } from '@constants'; +import { Shortcuts, URLs } from '@constants'; import { useLocalStorage } from '@raycast/utils'; interface OpenInYnabActionProps { @@ -21,5 +21,12 @@ export function OpenInYnabAction(props: OpenInYnabActionProps) { return budgetPath; }; - return ; + return ( + + ); } diff --git a/extensions/raynab/src/components/transactions/transactionEditForm.tsx b/extensions/raynab/src/components/transactions/transactionEditForm.tsx index 8ec4305ef67..942a7b0db54 100644 --- a/extensions/raynab/src/components/transactions/transactionEditForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionEditForm.tsx @@ -117,7 +117,7 @@ export function TransactionEditForm({ transaction }: TransactionEditFormProps) { initialValues: { date: new Date(transaction.date), amount: formatToReadableAmount({ amount: transaction.amount, locale: false }), - payee_id: payees?.some((p) => p.id === transaction.payee_id) ? (transaction.payee_id ?? '') : '', + payee_id: transaction.payee_id ?? '', memo: transaction.memo ?? '', flag_color: transaction.flag_color?.toString() ?? undefined, categoryList: categoryList, // Use the validated category list From c4ccd8ace1ab85e76d6147d87976dfded8dfbf31 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Fri, 16 May 2025 15:16:12 -0700 Subject: [PATCH 28/31] Update package-lock.json to upgrade dependencies in Raynab extension - Updated "@raycast/api" to version "^1.98.5" for new features and improvements. - Upgraded "@types/node" to version "^22.15.18" and "@types/react" to version "^19.1.4" for better type definitions. - Updated "undici-types" to version "~6.21.0" to ensure compatibility with the latest changes. These updates enhance the stability and functionality of the Raynab extension. --- extensions/raynab/package-lock.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/extensions/raynab/package-lock.json b/extensions/raynab/package-lock.json index bc76572b40e..c5c9d4d9f79 100644 --- a/extensions/raynab/package-lock.json +++ b/extensions/raynab/package-lock.json @@ -7,7 +7,7 @@ "name": "raynab", "license": "MIT", "dependencies": { - "@raycast/api": "^1.95.0", + "@raycast/api": "^1.98.5", "@raycast/utils": "^1.18.1", "dayjs": "^1.11.13", "fuse.js": "^6.5.3", @@ -20,8 +20,8 @@ }, "devDependencies": { "@raycast/eslint-config": "^1.0.11", - "@types/node": "^20.17.12", - "@types/react": "^19.1.0", + "@types/node": "^22.15.18", + "@types/react": "^19.1.4", "eslint": "^8.57.1", "eslint-config-prettier": "^8.3.0", "prettier": "^3.4.2", @@ -1533,13 +1533,13 @@ } }, "node_modules/@types/node": { - "version": "20.17.47", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.47.tgz", - "integrity": "sha512-3dLX0Upo1v7RvUimvxLeXqwrfyKxUINk0EAM83swP2mlSUcwV73sZy8XhNz8bcZ3VbsfQyC/y6jRdL5tgCNpDQ==", + "version": "22.15.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.18.tgz", + "integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==", "devOptional": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.21.0" } }, "node_modules/@types/react": { @@ -6147,9 +6147,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "devOptional": true, "license": "MIT" }, From 6cebb2458770a50a6a58d4b1cb80aafe44a7c6a3 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Sat, 17 May 2025 15:19:36 -0700 Subject: [PATCH 29/31] Enhance payee data handling in TransactionEditForm component - Updated the payees data structure to include a default payee based on the transaction's payee_id and payee_name, improving the initial state when editing transactions. - This change enhances user experience by ensuring relevant payee information is pre-filled in the form. --- .../src/components/transactions/transactionEditForm.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/extensions/raynab/src/components/transactions/transactionEditForm.tsx b/extensions/raynab/src/components/transactions/transactionEditForm.tsx index 942a7b0db54..05d116abe71 100644 --- a/extensions/raynab/src/components/transactions/transactionEditForm.tsx +++ b/extensions/raynab/src/components/transactions/transactionEditForm.tsx @@ -56,7 +56,10 @@ export function TransactionEditForm({ transaction }: TransactionEditFormProps) { const { value: timeline } = useLocalStorage('timeline', 'month'); const { mutate } = useTransactions(activeBudgetId, timeline); - const { data: payees = [], isLoading: isLoadingPayees } = usePayees(activeBudgetId || ''); + const { + data: payees = [{ id: transaction.payee_id ?? '', name: transaction.payee_name ?? '' }], + isLoading: isLoadingPayees, + } = usePayees(activeBudgetId || ''); const { data: categoryGroups, isLoading: isLoadingCategories } = useCategoryGroups(activeBudgetId || ''); const isLoading = isLoadingCategories || isLoadingPayees; From b0d2c0e2d8e601711ed04c597ce00fd9261a48ff Mon Sep 17 00:00:00 2001 From: omarshahine Date: Mon, 19 May 2025 13:13:21 -0700 Subject: [PATCH 30/31] Fixing Evals --- extensions/raynab/ai.json | 248 ++++++++++++++++---------------------- 1 file changed, 102 insertions(+), 146 deletions(-) diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json index 6a919f110a4..cd6a8e7dce9 100644 --- a/extensions/raynab/ai.json +++ b/extensions/raynab/ai.json @@ -3,6 +3,31 @@ "evals": [ { "input": "@raynab add a transaction for $25.50 at Starbucks", + "mocks": { + "add-transaction": { + "input": { + "amount": 25.5, + "payee_name": "Starbucks" + } + }, + "error": "Please specify an account for this transaction", + "success": false + }, + "expected": [ + { + "callsTool": { + "arguments": { + "amount": 25.5, + "payee_name": "Starbucks" + }, + "name": "add-transaction" + } + } + ], + "usedAsExample": true + }, + { + "input": "@raynab add a transaction for $25.50 at Starbucks to my Checking account", "mocks": { "add-transaction": { "success": true, @@ -19,13 +44,7 @@ { "callsTool": { "name": "add-transaction", - "arguments": { - "date": "2024-03-15", - "payee_name": "Starbucks", - "amount": -25.50, - "account_name": "Checking", - "memo": "Morning coffee" - } + "arguments": {} } } ], @@ -66,80 +85,62 @@ "usedAsExample": true }, { - "input": "@raynab show me my Amazon purchases from last year", + "input": "@raynab show me my Amazon purchases from last month", "mocks": { - "get-transactions": [ - { - "id": "123", - "date": "2023-12-14", - "payee_name": "Amazon", - "amount": -99.99, - "account_name": "Credit Card", - "category_name": "Office Supplies", - "cleared": true - }, - { - "id": "124", - "date": "2023-06-13", - "payee_name": "Amazon", - "amount": -75.25, - "account_name": "Credit Card", - "category_name": "Entertainment", - "cleared": true - } - ] - }, - "expected": [ - { - "callsTool": { - "name": "get-transactions", - "arguments": { - "payee": "Amazon", - "period": "last year" + "get-transactions": { + "success": true, + "transactions": [ + { + "account_id": "123", + "account_name": "Credit Card", + "amount": "-$79.18", + "approved": true, + "category_id": "567", + "category_name": "Office Supplies", + "cleared": "uncleared", + "date": "2025-05-09", + "deleted": false, + "id": "896", + "payee_id": "478", + "payee_name": "Amazon", + "subtransactions": [] } - } + ] } - ], - "usedAsExample": true - }, - { - "input": "@raynab what did I spend at Target in the past month?", - "mocks": { - "get-transactions": [ - { - "date": "2024-03-10", - "payee_name": "Target", - "amount": -150.00, - "account_name": "Credit Card", - "cleared": true - } - ] }, "expected": [ { "callsTool": { - "name": "get-transactions", "arguments": { - "payee": "Target", - "period": "past month" - } + "payee": "Amazon", + "period": "month" + }, + "name": "get-transactions" } } ], "usedAsExample": true }, { - "input": "@raynab what was my transaction with Amazon on March 14?", + "input": "@raynab what did I spend at Target in the past month?", "mocks": { "get-transactions": { "success": true, "transactions": [ { - "id": "123", - "date": "2024-03-14", - "payee_name": "Amazon", - "amount": -85.00, - "account_name": "Chase Amazon card" + "account_id": "123", + "account_name": "Credit Card", + "amount": "-$79.18", + "approved": true, + "category_id": "567", + "category_name": "Groceries", + "cleared": "uncleared", + "date": "2025-05-09", + "deleted": false, + "id": "896", + "payee_id": "478", + "payee_name": "Target", + "subtransactions": [] } ] } @@ -147,11 +148,11 @@ "expected": [ { "callsTool": { - "name": "get-transactions", "arguments": { - "payee": "Amazon", + "payee": "Target", "period": "month" - } + }, + "name": "get-transactions" } } ], @@ -216,60 +217,23 @@ "input": "@raynab what is my checking account balance?", "mocks": { "get-account-details": { - "name": "Checking", - "balance": "$5,000.00", - "on_budget": true - } - }, - "expected": [ - { - "callsTool": { - "name": "get-account-details", - "arguments": { - "account_name": "Checking" - } - } - } - ], - "usedAsExample": true - }, - { - "input": "@raynab show me my checking account", - "mocks": { - "get-account-details": { - "name": "Checking", - "balance": "$5,000.00", - "on_budget": true - } - }, - "expected": [ - { - "callsTool": { - "name": "get-account-details", - "arguments": { - "account_name": "Checking" - } - } - } - ], - "usedAsExample": true - }, - { - "input": "@raynab how much is in my checking?", - "mocks": { - "get-account-details": { - "name": "Checking", - "balance": "$5,000.00", - "on_budget": true + "account": { + "balance": "$5,000", + "id": "123", + "name": "Checking", + "on_budget": true, + "type": "checking" + }, + "success": true } }, "expected": [ { "callsTool": { - "name": "get-account-details", "arguments": { "account_name": "Checking" - } + }, + "name": "get-account-details" } } ], @@ -318,31 +282,27 @@ { "input": "@raynab what did I spend at amazon last month?", "mocks": { - "get-transactions": [ - { - "date": "2024-03-10", - "payee_name": "Amazon", - "amount": -150.00, - "account_name": "Credit Card", - "cleared": true - }, - { - "date": "2024-03-05", - "payee_name": "Amazon.com", - "amount": -75.25, - "account_name": "Credit Card", - "cleared": true - } - ] + "get-transactions": { + "success": true, + "transactions": [ + { + "date": "2024-03-10", + "payee_name": "Amazon", + "amount": -150.00, + "account_name": "Credit Card", + "cleared": true + } + ] + } }, "expected": [ { "callsTool": { - "name": "get-transactions", "arguments": { "payee": "Amazon", - "period": "last month" - } + "period": "month" + }, + "name": "get-transactions" } } ], @@ -365,10 +325,8 @@ "expected": [ { "callsTool": { - "name": "get-budget", - "arguments": { - "month": "2024-03" - } + "arguments": {}, + "name": "get-budget" } } ], @@ -378,23 +336,21 @@ "input": "@raynab tell me about my this month's budget", "mocks": { "get-budget": { - "activity": "-$1,750.25", - "age_of_money": 38, - "budgeted": "$4,200.00", - "income": "$6,000.00", - "month": "2024-03-01", - "note": "March Budget Overview", + "activity": "$1,000.00", + "age_of_money": 0, + "budgeted": "$5,000.00", + "income": "$10,000.00", + "month": "2025-05-01", + "note": "", "success": true, - "to_be_budgeted": "$2,050.00" + "to_be_budgeted": "$5,000.00" } }, "expected": [ { "callsTool": { - "name": "get-budget", - "arguments": { - "month": "2024-03" - } + "arguments": {}, + "name": "get-budget" } } ], From ae832e434a59a77afd3f6c5532c46a121ba343c4 Mon Sep 17 00:00:00 2001 From: omarshahine Date: Mon, 19 May 2025 13:56:55 -0700 Subject: [PATCH 31/31] Improving tools and evals --- extensions/raynab/ai.json | 37 +++++++++++++++++++++++++--------- extensions/raynab/package.json | 8 ++++---- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/extensions/raynab/ai.json b/extensions/raynab/ai.json index cd6a8e7dce9..74b158bd5f9 100644 --- a/extensions/raynab/ai.json +++ b/extensions/raynab/ai.json @@ -228,12 +228,19 @@ } }, "expected": [ + { + "not": { + "callsTool": "get-accounts" + } + }, { "callsTool": { + "name": "get-account-details", "arguments": { - "account_name": "Checking" - }, - "name": "get-account-details" + "account_name": { + "includes": "checking" + } + } } } ], @@ -280,17 +287,25 @@ "usedAsExample": true }, { - "input": "@raynab what did I spend at amazon last month?", + "input": "@raynab what did I spend at Amazon last month?", "mocks": { "get-transactions": { "success": true, "transactions": [ { + "account_id": "123", + "account_name": "Credit Card", + "amount": "-$150.00", + "approved": true, + "category_id": "567", + "category_name": "Shopping", + "cleared": "uncleared", "date": "2024-03-10", + "deleted": false, + "id": "896", + "payee_id": "478", "payee_name": "Amazon", - "amount": -150.00, - "account_name": "Credit Card", - "cleared": true + "subtransactions": [] } ] } @@ -298,11 +313,13 @@ "expected": [ { "callsTool": { + "name": "get-transactions", "arguments": { - "payee": "Amazon", + "payee": { + "includes": "amazon" + }, "period": "month" - }, - "name": "get-transactions" + } } } ], diff --git a/extensions/raynab/package.json b/extensions/raynab/package.json index 3d1a6132645..1f42609f20d 100644 --- a/extensions/raynab/package.json +++ b/extensions/raynab/package.json @@ -69,22 +69,22 @@ { "name": "add-transaction", "title": "Add Transaction", - "description": "Add a new YNAB transaction using AI" + "description": "Add a new YNAB transaction" }, { "name": "get-transactions", "title": "Get Transactions", - "description": "Get YNAB transactions using AI" + "description": "Get YNAB transactions" }, { "name": "get-accounts", "title": "Get Accounts", - "description": "Get all YNAB accounts and their balances using AI" + "description": "Get all YNAB accounts" }, { "name": "get-account-details", "title": "Get Account Details", - "description": "Get details of a specific YNAB account using AI" + "description": "Get details of a specific account such as the balance, type, and on_budget status" }, { "name": "get-big-numbers",