From 39dbe7e3cf2d1ec66f386b978a43c93208451f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernard=20Stojanovi=C4=87?= Date: Mon, 23 Sep 2024 18:24:14 +0200 Subject: [PATCH] feat: react sdk context (#48) closes #47 --- .release-please-manifest.json | 3 +- packages/react/.gitignore | 26 + packages/react/README.md | 84 ++ packages/react/eslint.config.js | 28 + packages/react/index.html | 13 + packages/react/lib/context.tsx | 49 + packages/react/lib/hooks.ts | 53 + .../react/lib/internal/useAsyncRequest.ts | 65 + packages/react/lib/internal/useBalances.ts | 73 + .../react/lib/internal/useCallSolution.ts | 28 + packages/react/lib/internal/useChains.ts | 13 + packages/react/lib/internal/useSolution.ts | 28 + packages/react/lib/internal/useTokens.ts | 13 + packages/react/lib/main.ts | 1 + packages/react/package.json | 41 + packages/react/public/vite.svg | 1 + packages/react/src/Action.tsx | 10 + packages/react/src/App.css | 42 + packages/react/src/App.tsx | 32 + packages/react/src/Component.tsx | 12 + packages/react/src/assets/react.svg | 1 + packages/react/src/index.css | 68 + packages/react/src/main.tsx | 10 + packages/react/src/vite-env.d.ts | 1 + packages/react/tsconfig.app.json | 24 + packages/react/tsconfig.json | 7 + packages/react/tsconfig.lib.json | 4 + packages/react/tsconfig.node.json | 22 + packages/react/vite.config.ts | 41 + packages/sdk/src/index.ts | 59 +- packages/sdk/src/types.ts | 4 + release-please-config.json | 9 + web/src/lib/stores/sprinter.ts | 2 +- yarn.lock | 1281 ++++++++++++++++- 34 files changed, 2112 insertions(+), 36 deletions(-) create mode 100644 packages/react/.gitignore create mode 100644 packages/react/README.md create mode 100644 packages/react/eslint.config.js create mode 100644 packages/react/index.html create mode 100644 packages/react/lib/context.tsx create mode 100644 packages/react/lib/hooks.ts create mode 100644 packages/react/lib/internal/useAsyncRequest.ts create mode 100644 packages/react/lib/internal/useBalances.ts create mode 100644 packages/react/lib/internal/useCallSolution.ts create mode 100644 packages/react/lib/internal/useChains.ts create mode 100644 packages/react/lib/internal/useSolution.ts create mode 100644 packages/react/lib/internal/useTokens.ts create mode 100644 packages/react/lib/main.ts create mode 100644 packages/react/package.json create mode 100644 packages/react/public/vite.svg create mode 100644 packages/react/src/Action.tsx create mode 100644 packages/react/src/App.css create mode 100644 packages/react/src/App.tsx create mode 100644 packages/react/src/Component.tsx create mode 100644 packages/react/src/assets/react.svg create mode 100644 packages/react/src/index.css create mode 100644 packages/react/src/main.tsx create mode 100644 packages/react/src/vite-env.d.ts create mode 100644 packages/react/tsconfig.app.json create mode 100644 packages/react/tsconfig.json create mode 100644 packages/react/tsconfig.lib.json create mode 100644 packages/react/tsconfig.node.json create mode 100644 packages/react/vite.config.ts diff --git a/.release-please-manifest.json b/.release-please-manifest.json index ba8f989..59ed558 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,4 @@ { - "packages/sdk": "0.1.0" + "packages/sdk": "0.1.0", + "packages/react": "0.0.0" } \ No newline at end of file diff --git a/packages/react/.gitignore b/packages/react/.gitignore new file mode 100644 index 0000000..88ad144 --- /dev/null +++ b/packages/react/.gitignore @@ -0,0 +1,26 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +*.tsbuildinfo + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/react/README.md b/packages/react/README.md new file mode 100644 index 0000000..5887056 --- /dev/null +++ b/packages/react/README.md @@ -0,0 +1,84 @@ +# Sprinter React SDK + +The Sprinter React SDK is a React wrapper for the [Sprinter SDK](https://github.com/ChainSafe/sprinter-sdk), enabling easy interaction with blockchain networks through React components and hooks. It provides context management and custom hooks for retrieving balances, tokens, supported chains, and solutions for asset transfers. + +## Installation + +To install the package, use npm or yarn: + +```bash +npm install @chainsafe/sprinter-react +# or +yarn add @chainsafe/sprinter-react +``` + +## Usage + +Wrap your application in the `SprinterContext` to gain access to blockchain-related data within your component tree. + +### Example + +```tsx +import React from 'react'; +import { SprinterContext } from '@chainsafe/sprinter-react'; + +const App = () => ( + + + +); + +export default App; +``` + +Inside your components, you can use the provided hooks to interact with blockchain data: + +```tsx +import React, { useEffect } from 'react'; +import { useSprinterBalances, useSprinterTokens } from '@chainsafe/sprinter-react'; + +const YourComponent = () => { + const ownerAddress = "0xYourAddressHere"; + const { balances, getUserBalances } = useSprinterBalances(ownerAddress); + + useEffect(() => { + getUserBalances(); + }, [getUserBalances]); + + return ( +
+

Balances:

+
{JSON.stringify(balances, null, 2)}
+

Available Tokens:

+
{JSON.stringify(tokens, null, 2)}
+
+ ); +}; + +export default YourComponent; +``` + +### Available Hooks + +The following hooks are provided by the SDK: + +- **`useSprinter()`**: Access everything from the Sprinter context. +- **`useSprinterBalances(account: Address)`**: Retrieve user balances for a given account. +- **`useSprinterTokens()`**: Retrieve available tokens. +- **`useSprinterChains()`**: Retrieve available blockchain chains. +- **`useSprinterSolution()`**: Retrieve solutions for asset transfers. +- **`useSprinterCallSolution()`**: Call solutions for transferring assets. + +### Custom Fetch Options + +You can pass custom fetch options when initializing the context: + +```tsx + + + +``` + +## Contributing + +Contributions are welcome! Feel free to open issues or submit pull requests for new features or bug fixes. diff --git a/packages/react/eslint.config.js b/packages/react/eslint.config.js new file mode 100644 index 0000000..092408a --- /dev/null +++ b/packages/react/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/packages/react/index.html b/packages/react/index.html new file mode 100644 index 0000000..e4b78ea --- /dev/null +++ b/packages/react/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/packages/react/lib/context.tsx b/packages/react/lib/context.tsx new file mode 100644 index 0000000..74bce56 --- /dev/null +++ b/packages/react/lib/context.tsx @@ -0,0 +1,49 @@ +import {createContext, ReactNode, useEffect, useState} from "react"; +import {type FetchOptions, Sprinter} from "@chainsafe/sprinter-sdk"; +import {useTokens} from "./internal/useTokens.ts"; +import {useChains} from "./internal/useChains.ts"; +import {useSolution} from "./internal/useSolution.ts"; +import {useCallSolution} from "./internal/useCallSolution.ts"; +import {useBalances} from "./internal/useBalances.ts"; + +type SprinterContext = ReturnType & ReturnType & ReturnType & ReturnType & ReturnType; + +export const Context = createContext(null); + +interface SprinterContextProps { + children?: ReactNode | undefined; + fetchOptions?: Omit; +} + +export function SprinterContext({ children, fetchOptions }: SprinterContextProps) { + const [sprinter] = useState(new Sprinter(fetchOptions)); + + /** Balances */ + const { balances, getUserBalances } = useBalances(sprinter); + + /** Tokens */ + const { tokens, getAvailableTokens } = useTokens(sprinter); + + /** Chains */ + const { chains, getAvailableChains } = useChains(sprinter); + + /** Solutions */ + const { solution, getSolution } = useSolution(sprinter); + + /** Call Solution */ + const { callSolution, getCallSolution } = useCallSolution(sprinter); + + /** Initialization */ + useEffect(() => { + getAvailableTokens(); + getAvailableChains(); + }, [sprinter]); + + return {children}; +} diff --git a/packages/react/lib/hooks.ts b/packages/react/lib/hooks.ts new file mode 100644 index 0000000..bfcd00e --- /dev/null +++ b/packages/react/lib/hooks.ts @@ -0,0 +1,53 @@ +import {useCallback, useContext} from "react"; +import {Context} from "./context.tsx"; +import {Address} from "@chainsafe/sprinter-sdk"; +import {BalancesEntry} from "./internal/useBalances.ts"; + +/** Everything from context */ +export function useSprinter() { + const context = useContext(Context); + + if (!context) throw new Error('Sprinter Context is not defined'); + + return context; +} + +/** Balances */ +const balancesEmptyState = { + data: null, + loading: false, + error: null, +}; + +export function useSprinterBalances(account: Address) { + const { balances: _balances, getUserBalances: _getUserBalances } = useSprinter(); + + const balances: BalancesEntry = _balances[account] || balancesEmptyState; + const getUserBalances = useCallback(() => _getUserBalances(account), [account]); + + return { balances, getUserBalances }; +} + +/** Tokens */ +export function useSprinterTokens() { + const { tokens, getAvailableTokens } = useSprinter(); + return { tokens, getAvailableTokens }; +} + +/** Chains */ +export function useSprinterChains() { + const { chains, getAvailableChains } = useSprinter(); + return { chains, getAvailableChains }; +} + +/** Solutions */ +export function useSprinterSolution() { + const { solution, getSolution } = useSprinter(); + return { solution, getSolution }; +} + +/** Call Solution */ +export function useSprinterCallSolution() { + const { callSolution, getCallSolution } = useSprinter(); + return { callSolution, getCallSolution }; +} diff --git a/packages/react/lib/internal/useAsyncRequest.ts b/packages/react/lib/internal/useAsyncRequest.ts new file mode 100644 index 0000000..6fa70c9 --- /dev/null +++ b/packages/react/lib/internal/useAsyncRequest.ts @@ -0,0 +1,65 @@ +import {useCallback, useReducer} from "react"; + +const initialState = { + data: null, + loading: false, + error: null, +}; + +export function useAsyncRequest() { + const [state, dispatch] = useReducer(fetchReducer, initialState as AsyncRequestState); + + const makeRequest = useCallback((request: Promise) => { + dispatch({ type: RequestAction.INIT }); + + request.then(result => { + dispatch({ type: RequestAction.SUCCESS, payload: result }); + }).catch((error: Error) => { + dispatch({ type: RequestAction.FAILURE, error: error.message }); + }); + }, [dispatch]); + + return { state, makeRequest }; +} + +enum RequestAction { + INIT = 'REQUEST_INIT', + SUCCESS = 'REQUEST_SUCCESS', + FAILURE = "REQUEST_FAILURE", +} + +export interface AsyncRequestState { + data: T | null; + loading: boolean; + error: string | null; +} + +type AsyncRequestActions = + | { type: RequestAction.INIT } + | { type: RequestAction.SUCCESS; payload: T } + | { type: RequestAction.FAILURE; error: string }; + +const fetchReducer = (state: AsyncRequestState, action: AsyncRequestActions): AsyncRequestState => { + switch (action.type) { + case RequestAction.INIT: + return { + ...state, + loading: true, + error: null, + }; + case RequestAction.SUCCESS: + return { + ...state, + loading: false, + data: action.payload, + }; + case RequestAction.FAILURE: + return { + ...state, + loading: false, + error: action.error, + }; + default: + throw new Error('Unknown action type'); + } +}; diff --git a/packages/react/lib/internal/useBalances.ts b/packages/react/lib/internal/useBalances.ts new file mode 100644 index 0000000..6fef382 --- /dev/null +++ b/packages/react/lib/internal/useBalances.ts @@ -0,0 +1,73 @@ +import {useCallback, useReducer} from "react"; +import {Address, AggregateBalances, Sprinter} from "@chainsafe/sprinter-sdk"; + +const initialState: BalancesState = {}; + +export function useBalances(sprinter: Sprinter) { + const [balances, dispatch] = useReducer(balancesReducer, initialState); + + const getUserBalances = useCallback((account: Address) => { + dispatch({ type: BalanceAction.INIT, address: account }); + + sprinter.getUserBalances(account).then(result => { + dispatch({ type: BalanceAction.SUCCESS, payload: result, address: account }); + }).catch((error: Error) => { + dispatch({ type: BalanceAction.FAILURE, error: error.message, address: account }); + }); + }, [sprinter, dispatch]); + + return {balances, getUserBalances}; +} + +enum BalanceAction { + INIT = 'REQUEST_INIT', + SUCCESS = 'REQUEST_SUCCESS', + FAILURE = "REQUEST_FAILURE", +} + +export interface BalancesEntry { + data: AggregateBalances | null; + loading: boolean; + error: string | null; +} + +type BalancesState = Record; + +type BalanceActions = + | { type: BalanceAction.INIT; address: Address } + | { type: BalanceAction.SUCCESS; payload: AggregateBalances; address: Address } + | { type: BalanceAction.FAILURE; error: string; address: Address }; + +function balancesReducer(state: BalancesState, action: BalanceActions): BalancesState { + switch (action.type) { + case BalanceAction.INIT: + return { + ...state, + [action.address]: { + ...state[action.address], + loading: true, + error: null, + } + } + case BalanceAction.SUCCESS: + return { + ...state, + [action.address]: { + ...state[action.address], + loading: false, + data: action.payload, + } + } + case BalanceAction.FAILURE: + return { + ...state, + [action.address]: { + ...state[action.address], + loading: false, + error: action.error, + } + } + default: + throw Error('Unknown action type'); + } +} diff --git a/packages/react/lib/internal/useCallSolution.ts b/packages/react/lib/internal/useCallSolution.ts new file mode 100644 index 0000000..825c07c --- /dev/null +++ b/packages/react/lib/internal/useCallSolution.ts @@ -0,0 +1,28 @@ +import { + Address, + ChainID, ContractCallSolutionOptions, + type SolutionResponse, + Sprinter, + TokenSymbol +} from "@chainsafe/sprinter-sdk"; +import {useCallback} from "react"; +import { useAsyncRequest} from "./useAsyncRequest.ts"; + +export function useCallSolution(sprinter: Sprinter) { + const { state: callSolution, makeRequest } = useAsyncRequest(); + + const getCallSolution = useCallback((account: Address, + destinationChain: ChainID, + token: TokenSymbol, + amount: number, + contractCall: ContractCallSolutionOptions, + threshold?: number, + whitelistedSourceChains?: ChainID[], + ) => { + makeRequest(sprinter.getCallSolution({ + account, destinationChain, token, amount, threshold, whitelistedSourceChains, contractCall + })); + }, [sprinter, makeRequest]); + + return { callSolution, getCallSolution }; +} diff --git a/packages/react/lib/internal/useChains.ts b/packages/react/lib/internal/useChains.ts new file mode 100644 index 0000000..06e0161 --- /dev/null +++ b/packages/react/lib/internal/useChains.ts @@ -0,0 +1,13 @@ +import {type Chain, Sprinter} from "@chainsafe/sprinter-sdk"; +import {useCallback} from "react"; +import {useAsyncRequest} from "./useAsyncRequest.ts"; + +export function useChains(sprinter: Sprinter) { + const { state: chains, makeRequest } = useAsyncRequest(); + + const getAvailableChains = useCallback(() => { + makeRequest(sprinter.getAvailableChains()); + }, [sprinter, makeRequest]); + + return { chains, getAvailableChains }; +} diff --git a/packages/react/lib/internal/useSolution.ts b/packages/react/lib/internal/useSolution.ts new file mode 100644 index 0000000..a47ee27 --- /dev/null +++ b/packages/react/lib/internal/useSolution.ts @@ -0,0 +1,28 @@ +import { + Address, + ChainID, + type SolutionResponse, + Sprinter, + TokenSymbol +} from "@chainsafe/sprinter-sdk"; +import {useCallback} from "react"; +import {useAsyncRequest} from "./useAsyncRequest.ts"; + +export function useSolution(sprinter: Sprinter) { + const { state: solution, makeRequest } = useAsyncRequest(); + + const getSolution = useCallback(( + account: Address, + destinationChain: ChainID, + token: TokenSymbol, + amount: number, + threshold?: number, + whitelistedSourceChains?: ChainID[], + ) => { + makeRequest(sprinter.getSolution({ + account, destinationChain, token, amount, threshold, whitelistedSourceChains, + })); + }, [sprinter, makeRequest]); + + return { solution, getSolution }; +} diff --git a/packages/react/lib/internal/useTokens.ts b/packages/react/lib/internal/useTokens.ts new file mode 100644 index 0000000..93c5180 --- /dev/null +++ b/packages/react/lib/internal/useTokens.ts @@ -0,0 +1,13 @@ +import {type FungibleToken, Sprinter} from "@chainsafe/sprinter-sdk"; +import {useCallback} from "react"; +import {useAsyncRequest} from "./useAsyncRequest.ts"; + +export function useTokens(sprinter: Sprinter) { + const { state: tokens, makeRequest } = useAsyncRequest(); + + const getAvailableTokens = useCallback(() => { + makeRequest(sprinter.getAvailableTokens()); + }, [sprinter, makeRequest]); + + return { tokens, getAvailableTokens }; +} diff --git a/packages/react/lib/main.ts b/packages/react/lib/main.ts new file mode 100644 index 0000000..487ab4f --- /dev/null +++ b/packages/react/lib/main.ts @@ -0,0 +1 @@ +export { SprinterContext } from './context'; diff --git a/packages/react/package.json b/packages/react/package.json new file mode 100644 index 0000000..ceddd47 --- /dev/null +++ b/packages/react/package.json @@ -0,0 +1,41 @@ +{ + "name": "@chainsafe/sprinter-react", + "private": true, + "version": "0.0.0", + "type": "module", + "main": "dist/main.js", + "types": "dist/main.d.ts", + "files": [ + "dist" + ], + "scripts": { + "dev": "vite", + "build": "tsc -b ./tsconfig.lib.json && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "peerDependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.9.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^9.9.0", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.9", + "glob": "^11.0.0", + "globals": "^15.9.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "typescript": "^5.5.3", + "typescript-eslint": "^8.0.1", + "vite": "^5.4.1", + "vite-plugin-dts": "^4.2.1" + }, + "dependencies": { + "@chainsafe/sprinter-sdk": "workspace:^" + } +} diff --git a/packages/react/public/vite.svg b/packages/react/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/packages/react/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/react/src/Action.tsx b/packages/react/src/Action.tsx new file mode 100644 index 0000000..6054888 --- /dev/null +++ b/packages/react/src/Action.tsx @@ -0,0 +1,10 @@ +import {useSprinterBalances} from "../lib/hooks.ts"; + +export function Action() { + const hook = useSprinterBalances("0x3E101Ec02e7A48D16DADE204C96bFF842E7E2519"); + + return () +} \ No newline at end of file diff --git a/packages/react/src/App.css b/packages/react/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/packages/react/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/packages/react/src/App.tsx b/packages/react/src/App.tsx new file mode 100644 index 0000000..c5c4fd4 --- /dev/null +++ b/packages/react/src/App.tsx @@ -0,0 +1,32 @@ +import { useState } from 'react' +import './App.css' +import {SprinterContext} from "../lib/main.ts"; +import {Component} from "./Component.tsx"; +import {Action} from "./Action.tsx"; + +function App() { + const [count, setCount] = useState(0) + + return ( + +
+ +
+

Vite + React

+
+ + +

+ Edit src/App.tsx and save to test HMR +

+
+

+ Click on the Vite and React logos to learn more +

+
+ ) +} + +export default App diff --git a/packages/react/src/Component.tsx b/packages/react/src/Component.tsx new file mode 100644 index 0000000..bc57ef3 --- /dev/null +++ b/packages/react/src/Component.tsx @@ -0,0 +1,12 @@ +import { useEffect } from 'react'; +import {useSprinterTokens} from "../lib/hooks.ts"; + +export function Component() { + const hook = useSprinterTokens(); + + useEffect(() => { + hook.getAvailableTokens(); + }, []); + + return
A component
; +} diff --git a/packages/react/src/assets/react.svg b/packages/react/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/packages/react/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/react/src/index.css b/packages/react/src/index.css new file mode 100644 index 0000000..6119ad9 --- /dev/null +++ b/packages/react/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/packages/react/src/main.tsx b/packages/react/src/main.tsx new file mode 100644 index 0000000..6f4ac9b --- /dev/null +++ b/packages/react/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import App from './App.tsx' +import './index.css' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/packages/react/src/vite-env.d.ts b/packages/react/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/packages/react/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/react/tsconfig.app.json b/packages/react/tsconfig.app.json new file mode 100644 index 0000000..f0a2350 --- /dev/null +++ b/packages/react/tsconfig.app.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/packages/react/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/packages/react/tsconfig.lib.json b/packages/react/tsconfig.lib.json new file mode 100644 index 0000000..733a0de --- /dev/null +++ b/packages/react/tsconfig.lib.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.app.json", + "include": ["lib"] +} \ No newline at end of file diff --git a/packages/react/tsconfig.node.json b/packages/react/tsconfig.node.json new file mode 100644 index 0000000..0d3d714 --- /dev/null +++ b/packages/react/tsconfig.node.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/packages/react/vite.config.ts b/packages/react/vite.config.ts new file mode 100644 index 0000000..a1a3055 --- /dev/null +++ b/packages/react/vite.config.ts @@ -0,0 +1,41 @@ +import { defineConfig } from 'vite' +import { extname, relative, resolve } from 'path' +import { fileURLToPath } from 'node:url' +import react from '@vitejs/plugin-react' +import dts from 'vite-plugin-dts' +import { glob } from 'glob' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react(), dts({ tsconfigPath: resolve(__dirname, "tsconfig.lib.json"), })], + build: { + copyPublicDir: false, + lib: { + entry: resolve(__dirname, 'lib/main.ts'), + formats: ['es'] + }, + rollupOptions: { + external: ['react', 'react/jsx-runtime'], + input: Object.fromEntries( + // https://rollupjs.org/configuration-options/#input + glob.sync('lib/**/*.{ts,tsx}', { + ignore: ["lib/**/*.d.ts"], + }).map(file => [ + // 1. The name of the entry point + // lib/nested/foo.js becomes nested/foo + relative( + 'lib', + file.slice(0, file.length - extname(file).length) + ), + // 2. The absolute path to the entry file + // lib/nested/foo.ts becomes /project/lib/nested/foo.ts + fileURLToPath(new URL(file, import.meta.url)) + ]) + ), + output: { + assetFileNames: 'assets/[name][extname]', + entryFileNames: '[name].js', + } + } + }, +}) diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts index 34fe716..b1841ea 100644 --- a/packages/sdk/src/index.ts +++ b/packages/sdk/src/index.ts @@ -11,6 +11,7 @@ import { } from "./api"; import type { Address, + AggregateBalances, Chain, ContractSolutionOptions, FetchOptions, @@ -29,6 +30,7 @@ class Sprinter { // in memory "cache" #tokens?: FungibleToken[]; #chains?: Chain[]; + #requests: Record> = {}; #fetchOptions: Omit; @@ -40,7 +42,9 @@ class Sprinter { options: FetchOptions = {}, ): Promise { if (!this.#tokens) - this.#tokens = await getFungibleTokens(this.makeFetchOptions(options)); + this.#tokens = await this.deferredRequest("tokens", () => + getFungibleTokens(this.makeFetchOptions(options)), + ); return this.#tokens; } @@ -48,7 +52,9 @@ class Sprinter { options: FetchOptions = {}, ): Promise { if (!this.#chains) - this.#chains = await getSupportedChains(this.makeFetchOptions(options)); + this.#chains = await this.deferredRequest("chains", () => + getSupportedChains(this.makeFetchOptions(options)), + ); return this.#chains; } @@ -56,25 +62,26 @@ class Sprinter { account: Address, tokens?: FungibleToken[], options: FetchOptions = {}, - ): Promise<{ - [sybol: TokenSymbol]: { balances: TokenBalance[]; total: string }; - }> { + ): Promise { const tokenList = tokens || (await this.getAvailableTokens(options)); - const [balances, nativeTokens] = await Promise.all([ - Promise.all( - tokenList.map((token) => - getUserFungibleTokens(account, token.symbol, options).then( - (balances) => ({ - symbol: token.symbol, - balances, - }), + const [balances, nativeTokens] = await this.deferredRequest( + `balances-${account}`, + () => + Promise.all([ + Promise.all( + tokenList.map((token) => + getUserFungibleTokens(account, token.symbol, options).then( + (balances) => ({ + symbol: token.symbol, + balances, + }), + ), + ), ), - ), - ), - getUserNativeTokens(account, options), - ]); - + getUserNativeTokens(account, options), + ]), + ); return balances.reduce( (previousValue, { symbol, balances }) => { previousValue[symbol] = { @@ -140,6 +147,22 @@ class Sprinter { ); } + private deferredRequest( + name: string, + request: () => Promise, + ): Promise { + if (!(name in this.#requests)) { + this.#requests[name] = request(); + void this.#requests[name].finally(() => { + void setTimeout(() => { + delete this.#requests[name]; + }, 1000); + }); + } + + return this.#requests[name] as Promise; + } + private makeFetchOptions(options: FetchOptions): FetchOptions { return { ...this.#fetchOptions, ...options }; } diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts index 5a3ef09..e262668 100644 --- a/packages/sdk/src/types.ts +++ b/packages/sdk/src/types.ts @@ -28,6 +28,10 @@ export interface TokenBalance { tokenDecimals: number; } +export type AggregateBalances = { + [symbol: TokenSymbol]: { balances: TokenBalance[]; total: string }; +}; + export type FungibleTokenBalance = TokenBalance; export type NativeTokenBalance = TokenBalance; diff --git a/release-please-config.json b/release-please-config.json index 7beb9dc..5642528 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -9,6 +9,15 @@ "bumpPatchForMinorPreMajor": false, "changelogPath": "CHANGELOG.md", "versioning": "default" + }, + "packages/react": { + "releaseType": "node", + "draft": false, + "prerelease": false, + "bumpMinorPreMajor": false, + "bumpPatchForMinorPreMajor": false, + "changelogPath": "CHANGELOG.md", + "versioning": "default" } } } \ No newline at end of file diff --git a/web/src/lib/stores/sprinter.ts b/web/src/lib/stores/sprinter.ts index dbcf0b9..cf28c7f 100644 --- a/web/src/lib/stores/sprinter.ts +++ b/web/src/lib/stores/sprinter.ts @@ -7,7 +7,7 @@ setBaseUrl('https://api.test.sprinter.buildwithsygma.com/'); export const sprinter = writable(); selectedProvider.subscribe((event) => { - if (event) sprinter.set(new Sprinter(event.provider)); + if (event) sprinter.set(new Sprinter()); }); export const SPRINTER_SEPOLIA_ADDRESS = '0xf70fb86F700E8Bb7cDf1c20197633518235c3425'; diff --git a/yarn.lock b/yarn.lock index e88e2d6..06c09f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -320,7 +320,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.18.5, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.3": +"@babel/core@npm:^7.18.5, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.3, @babel/core@npm:^7.24.5": version: 7.25.2 resolution: "@babel/core@npm:7.25.2" dependencies: @@ -582,6 +582,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7": + version: 7.25.6 + resolution: "@babel/parser@npm:7.25.6" + dependencies: + "@babel/types": "npm:^7.25.6" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/f88a0e895dbb096fd37c4527ea97d12b5fc013720602580a941ac3a339698872f0c911e318c292b184c36b5fbe23b612f05aff9d24071bc847c7b1c21552c41d + languageName: node + linkType: hard + "@babel/parser@npm:^7.21.9, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.3": version: 7.25.3 resolution: "@babel/parser@npm:7.25.3" @@ -1378,6 +1389,28 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx-self@npm:^7.24.5": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/dcf3b732401f47f06bb29d6016e48066f66de00029a0ded98ddd9983c770a00a109d91cd04d2700d15ee0bcec3ae3027a5f12d69e15ec56efc0bcbfac65e92cb + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-source@npm:^7.24.1": + version: 7.24.7 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/970ef1264c7c6c416ab11610665d5309aec2bd2b9086ae394e1132e65138d97b060a7dc9d31054e050d6dc475b5a213938c9707c0202a5022d55dcb4c5abe28f + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx@npm:^7.24.7": version: 7.25.2 resolution: "@babel/plugin-transform-react-jsx@npm:7.25.2" @@ -1751,6 +1784,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.6": + version: 7.25.6 + resolution: "@babel/types@npm:7.25.6" + dependencies: + "@babel/helper-string-parser": "npm:^7.24.8" + "@babel/helper-validator-identifier": "npm:^7.24.7" + to-fast-properties: "npm:^2.0.0" + checksum: 10c0/89d45fbee24e27a05dca2d08300a26b905bd384a480448823f6723c72d3a30327c517476389b7280ce8cb9a2c48ef8f47da7f9f6d326faf6f53fd6b68237bdc4 + languageName: node + linkType: hard + "@babel/types@npm:^7.21.3, @babel/types@npm:^7.21.5, @babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.4.4": version: 7.25.2 resolution: "@babel/types@npm:7.25.2" @@ -1791,6 +1835,32 @@ __metadata: languageName: node linkType: hard +"@chainsafe/sprinter-react@workspace:packages/react": + version: 0.0.0-use.local + resolution: "@chainsafe/sprinter-react@workspace:packages/react" + dependencies: + "@chainsafe/sprinter-sdk": "workspace:^" + "@eslint/js": "npm:^9.9.0" + "@types/react": "npm:^18.3.3" + "@types/react-dom": "npm:^18.3.0" + "@vitejs/plugin-react": "npm:^4.3.1" + eslint: "npm:^9.9.0" + eslint-plugin-react-hooks: "npm:^5.1.0-rc.0" + eslint-plugin-react-refresh: "npm:^0.4.9" + glob: "npm:^11.0.0" + globals: "npm:^15.9.0" + react: "npm:^18.3.1" + react-dom: "npm:^18.3.1" + typescript: "npm:^5.5.3" + typescript-eslint: "npm:^8.0.1" + vite: "npm:^5.4.1" + vite-plugin-dts: "npm:^4.2.1" + peerDependencies: + react: ^18.3.1 + react-dom: ^18.3.1 + languageName: unknown + linkType: soft + "@chainsafe/sprinter-sdk@workspace:^, @chainsafe/sprinter-sdk@workspace:packages/sdk": version: 0.0.0-use.local resolution: "@chainsafe/sprinter-sdk@workspace:packages/sdk" @@ -2822,6 +2892,24 @@ __metadata: languageName: node linkType: hard +"@eslint-community/regexpp@npm:^4.11.0": + version: 4.11.1 + resolution: "@eslint-community/regexpp@npm:4.11.1" + checksum: 10c0/fbcc1cb65ef5ed5b92faa8dc542e035269065e7ebcc0b39c81a4fe98ad35cfff20b3c8df048641de15a7757e07d69f85e2579c1a5055f993413ba18c055654f8 + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.18.0": + version: 0.18.0 + resolution: "@eslint/config-array@npm:0.18.0" + dependencies: + "@eslint/object-schema": "npm:^2.1.4" + debug: "npm:^4.3.1" + minimatch: "npm:^3.1.2" + checksum: 10c0/0234aeb3e6b052ad2402a647d0b4f8a6aa71524bafe1adad0b8db1dfe94d7f5f26d67c80f79bb37ac61361a1d4b14bb8fb475efe501de37263cf55eabb79868f + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^2.1.4": version: 2.1.4 resolution: "@eslint/eslintrc@npm:2.1.4" @@ -2839,6 +2927,23 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^3.1.0": + version: 3.1.0 + resolution: "@eslint/eslintrc@npm:3.1.0" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^10.0.1" + globals: "npm:^14.0.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/5b7332ed781edcfc98caa8dedbbb843abfb9bda2e86538529c843473f580e40c69eb894410eddc6702f487e9ee8f8cfa8df83213d43a8fdb549f23ce06699167 + languageName: node + linkType: hard + "@eslint/js@npm:8.57.0": version: 8.57.0 resolution: "@eslint/js@npm:8.57.0" @@ -2846,6 +2951,29 @@ __metadata: languageName: node linkType: hard +"@eslint/js@npm:9.11.0, @eslint/js@npm:^9.9.0": + version: 9.11.0 + resolution: "@eslint/js@npm:9.11.0" + checksum: 10c0/7403aeba28ba9cae3470d149b334a51375eb7fd850f167555c81cc72fe98e5cc5ac3059ccdbe68eb255a49d7498a7288d25429af0c7d20afeb4b3c0748349bb4 + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/object-schema@npm:2.1.4" + checksum: 10c0/e9885532ea70e483fb007bf1275968b05bb15ebaa506d98560c41a41220d33d342e19023d5f2939fed6eb59676c1bda5c847c284b4b55fce521d282004da4dda + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.2.0": + version: 0.2.0 + resolution: "@eslint/plugin-kit@npm:0.2.0" + dependencies: + levn: "npm:^0.4.1" + checksum: 10c0/00b92bc52ad09b0e2bbbb30591c02a895f0bec3376759562590e8a57a13d096b22f8c8773b6bf791a7cf2ea614123b3d592fd006c51ac5fd0edbb90ea6d8760c + languageName: node + linkType: hard + "@ethereumjs/rlp@npm:^4.0.1": version: 4.0.1 resolution: "@ethereumjs/rlp@npm:4.0.1" @@ -2945,6 +3073,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/retry@npm:^0.3.0": + version: 0.3.0 + resolution: "@humanwhocodes/retry@npm:0.3.0" + checksum: 10c0/7111ec4e098b1a428459b4e3be5a5d2a13b02905f805a2468f4fa628d072f0de2da26a27d04f65ea2846f73ba51f4204661709f05bfccff645e3cedef8781bb6 + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -3094,6 +3229,59 @@ __metadata: languageName: node linkType: hard +"@microsoft/api-extractor-model@npm:7.29.6": + version: 7.29.6 + resolution: "@microsoft/api-extractor-model@npm:7.29.6" + dependencies: + "@microsoft/tsdoc": "npm:~0.15.0" + "@microsoft/tsdoc-config": "npm:~0.17.0" + "@rushstack/node-core-library": "npm:5.7.0" + checksum: 10c0/cdf7e69dc6bc04de4a814b2bc126cc4faa5cea5b9b4582f8baf9bd9bd105cc62d5e322c46c6221a8e0934d1539a820ef9f512c112cb16c1bbcc7b06f5e3ba5fd + languageName: node + linkType: hard + +"@microsoft/api-extractor@npm:7.47.7": + version: 7.47.7 + resolution: "@microsoft/api-extractor@npm:7.47.7" + dependencies: + "@microsoft/api-extractor-model": "npm:7.29.6" + "@microsoft/tsdoc": "npm:~0.15.0" + "@microsoft/tsdoc-config": "npm:~0.17.0" + "@rushstack/node-core-library": "npm:5.7.0" + "@rushstack/rig-package": "npm:0.5.3" + "@rushstack/terminal": "npm:0.14.0" + "@rushstack/ts-command-line": "npm:4.22.6" + lodash: "npm:~4.17.15" + minimatch: "npm:~3.0.3" + resolve: "npm:~1.22.1" + semver: "npm:~7.5.4" + source-map: "npm:~0.6.1" + typescript: "npm:5.4.2" + bin: + api-extractor: bin/api-extractor + checksum: 10c0/f1121b8a2bd559c84d0397ce504561d138e7f1b6e56a0dbd9f71dadfbc8b129f34c512dbfc5f6554b4ca92df9fe00c47e0d7e175b9d6e02726b88ed84878e431 + languageName: node + linkType: hard + +"@microsoft/tsdoc-config@npm:~0.17.0": + version: 0.17.0 + resolution: "@microsoft/tsdoc-config@npm:0.17.0" + dependencies: + "@microsoft/tsdoc": "npm:0.15.0" + ajv: "npm:~8.12.0" + jju: "npm:~1.4.0" + resolve: "npm:~1.22.2" + checksum: 10c0/9aa51b5b0fa93ad5c6a40ed1acf1f25c625b616efe29f2e5fa22ee9bddea12a4a39c833726e11ab592f20cfc9b8c3865978864dd02711d457fa971df3c091847 + languageName: node + linkType: hard + +"@microsoft/tsdoc@npm:0.15.0, @microsoft/tsdoc@npm:~0.15.0": + version: 0.15.0 + resolution: "@microsoft/tsdoc@npm:0.15.0" + checksum: 10c0/6beaf6e01ff54daeba69862cb3d27e03bbabfe299d23d0fade885f5b29bf98af01cecc746d23875fe60ba89514e3b630b71140b1b18d37301096f7a1e35451aa + languageName: node + linkType: hard + "@noble/curves@npm:1.4.0": version: 1.4.0 resolution: "@noble/curves@npm:1.4.0" @@ -3569,6 +3757,22 @@ __metadata: languageName: node linkType: hard +"@rollup/pluginutils@npm:^5.1.0": + version: 5.1.1 + resolution: "@rollup/pluginutils@npm:5.1.1" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^2.3.1" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/433a8b0b67ef9a36fb909a63c5ffa03846e15b6547fec9d2b9e15510dd898de9d1ec3f574aae29749d0e757e269112121a859f204b37becc470f1404e862b1e2 + languageName: node + linkType: hard + "@rollup/rollup-android-arm-eabi@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-android-arm-eabi@npm:4.20.0" @@ -3576,6 +3780,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.22.4" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@rollup/rollup-android-arm64@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-android-arm64@npm:4.20.0" @@ -3583,6 +3794,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm64@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-android-arm64@npm:4.22.4" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-arm64@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-darwin-arm64@npm:4.20.0" @@ -3590,6 +3808,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-arm64@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-darwin-arm64@npm:4.22.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-x64@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-darwin-x64@npm:4.20.0" @@ -3597,6 +3822,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-x64@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-darwin-x64@npm:4.22.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.20.0" @@ -3604,6 +3836,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-gnueabihf@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.22.4" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-musleabihf@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.20.0" @@ -3611,6 +3850,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-musleabihf@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.22.4" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.20.0" @@ -3618,6 +3864,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-gnu@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.22.4" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-musl@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.20.0" @@ -3625,6 +3878,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-musl@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.22.4" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-powerpc64le-gnu@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.20.0" @@ -3632,6 +3892,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.22.4" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.20.0" @@ -3639,6 +3906,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-gnu@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.22.4" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-s390x-gnu@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.20.0" @@ -3646,6 +3920,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-s390x-gnu@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.22.4" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.20.0" @@ -3653,6 +3934,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-gnu@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.22.4" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-musl@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-linux-x64-musl@npm:4.20.0" @@ -3660,6 +3948,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-musl@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.22.4" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-win32-arm64-msvc@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.20.0" @@ -3667,6 +3962,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-arm64-msvc@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.22.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-ia32-msvc@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.20.0" @@ -3674,6 +3976,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-ia32-msvc@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.22.4" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-msvc@npm:4.20.0": version: 4.20.0 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.20.0" @@ -3681,6 +3990,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-msvc@npm:4.22.4": + version: 4.22.4 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.22.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rushstack/eslint-patch@npm:^1.10.4": version: 1.10.4 resolution: "@rushstack/eslint-patch@npm:1.10.4" @@ -3688,6 +4004,64 @@ __metadata: languageName: node linkType: hard +"@rushstack/node-core-library@npm:5.7.0": + version: 5.7.0 + resolution: "@rushstack/node-core-library@npm:5.7.0" + dependencies: + ajv: "npm:~8.13.0" + ajv-draft-04: "npm:~1.0.0" + ajv-formats: "npm:~3.0.1" + fs-extra: "npm:~7.0.1" + import-lazy: "npm:~4.0.0" + jju: "npm:~1.4.0" + resolve: "npm:~1.22.1" + semver: "npm:~7.5.4" + peerDependencies: + "@types/node": "*" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/8055c52a9658942a77d78afc5e6d6c6779e8f083024ec741b868da198ccd821a52e7566e848dade2fc8570c235210e114d53fe79d51aaf8d1649960828f73679 + languageName: node + linkType: hard + +"@rushstack/rig-package@npm:0.5.3": + version: 0.5.3 + resolution: "@rushstack/rig-package@npm:0.5.3" + dependencies: + resolve: "npm:~1.22.1" + strip-json-comments: "npm:~3.1.1" + checksum: 10c0/ef0b0115b60007f965b875f671019ac7fc26592f6bf7d7b40fa8c68e8dc37e9f7dcda3b5533b489ebf04d28a182dc60987bfd365a8d4173c73d482b270647741 + languageName: node + linkType: hard + +"@rushstack/terminal@npm:0.14.0": + version: 0.14.0 + resolution: "@rushstack/terminal@npm:0.14.0" + dependencies: + "@rushstack/node-core-library": "npm:5.7.0" + supports-color: "npm:~8.1.1" + peerDependencies: + "@types/node": "*" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/9fda5bc7d2c74d9ef52021163acb4a6ff26cc28e4935567c149158a01966051313d6785b5cf2dd9238404181b1766f253153ba0a5aaea4fb9f5c5bb9d708a10b + languageName: node + linkType: hard + +"@rushstack/ts-command-line@npm:4.22.6": + version: 4.22.6 + resolution: "@rushstack/ts-command-line@npm:4.22.6" + dependencies: + "@rushstack/terminal": "npm:0.14.0" + "@types/argparse": "npm:1.0.38" + argparse: "npm:~1.0.9" + string-argv: "npm:~0.3.1" + checksum: 10c0/44905de94dbfe4a9b27ce21fb09b50f92a637349989a61a9d0fee53f38f81d5b779e8cfa8f8a857d0d415db91557b687159522d6b3ecdaa3eccbbff76e608325 + languageName: node + linkType: hard + "@scure/base@npm:~1.1.6": version: 1.1.7 resolution: "@scure/base@npm:1.1.7" @@ -4387,6 +4761,54 @@ __metadata: languageName: node linkType: hard +"@types/argparse@npm:1.0.38": + version: 1.0.38 + resolution: "@types/argparse@npm:1.0.38" + checksum: 10c0/4fc892da5df16923f48180da2d1f4562fa8b0507cf636b24780444fa0a1d7321d4dc0c0ecbee6152968823f5a2ae0d321b4f8c705a489bf1ae1245bdeb0868fd + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.20.5": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": "npm:^7.20.7" + "@babel/types": "npm:^7.20.7" + "@types/babel__generator": "npm:*" + "@types/babel__template": "npm:*" + "@types/babel__traverse": "npm:*" + checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" + dependencies: + "@babel/types": "npm:^7.0.0" + checksum: 10c0/f0ba105e7d2296bf367d6e055bb22996886c114261e2cb70bf9359556d0076c7a57239d019dee42bb063f565bade5ccb46009bce2044b2952d964bf9a454d6d2 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" + dependencies: + "@babel/parser": "npm:^7.1.0" + "@babel/types": "npm:^7.0.0" + checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*": + version: 7.20.6 + resolution: "@types/babel__traverse@npm:7.20.6" + dependencies: + "@babel/types": "npm:^7.20.7" + checksum: 10c0/7ba7db61a53e28cac955aa99af280d2600f15a8c056619c05b6fc911cbe02c61aa4f2823299221b23ce0cce00b294c0e5f618ec772aa3f247523c2e48cf7b888 + languageName: node + linkType: hard + "@types/body-parser@npm:*": version: 1.19.5 resolution: "@types/body-parser@npm:1.19.5" @@ -5071,6 +5493,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^18.3.0": + version: 18.3.0 + resolution: "@types/react-dom@npm:18.3.0" + dependencies: + "@types/react": "npm:*" + checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b + languageName: node + linkType: hard + "@types/react-router-config@npm:*, @types/react-router-config@npm:^5.0.7": version: 5.0.11 resolution: "@types/react-router-config@npm:5.0.11" @@ -5113,6 +5544,16 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:^18.3.3": + version: 18.3.8 + resolution: "@types/react@npm:18.3.8" + dependencies: + "@types/prop-types": "npm:*" + csstype: "npm:^3.0.2" + checksum: 10c0/367312c9fe276639ecb142265e090a4dd04bb39f8d718cbab546de3f1ddcfddeff415e1147d0fc40f734badaa7420b7b109d511bd4304b2c4c9c36164612fdf8 + languageName: node + linkType: hard + "@types/retry@npm:0.12.0": version: 0.12.0 resolution: "@types/retry@npm:0.12.0" @@ -5230,6 +5671,29 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.6.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:8.6.0" + "@typescript-eslint/type-utils": "npm:8.6.0" + "@typescript-eslint/utils": "npm:8.6.0" + "@typescript-eslint/visitor-keys": "npm:8.6.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.3.1" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/c777f01535b896d3092f9886a67ccf9e50bf9e0f581ffab607c5e95dbf3092299b0d9f3e6041b134d69059a6fa5691785940b81015f73bb9a0e9d1605f6442ea + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:^6.4.0": version: 6.21.0 resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" @@ -5278,6 +5742,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/parser@npm:8.6.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:8.6.0" + "@typescript-eslint/types": "npm:8.6.0" + "@typescript-eslint/typescript-estree": "npm:8.6.0" + "@typescript-eslint/visitor-keys": "npm:8.6.0" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/3f280d289b486359194d422d89df9896b3f10a6d45cdf851d1d5f3200489271a31ab503c127cb5656f9b0ad6d795dd708b960f21fb105750aac19f41f8f815d1 + languageName: node + linkType: hard + "@typescript-eslint/parser@npm:^6.4.0": version: 6.21.0 resolution: "@typescript-eslint/parser@npm:6.21.0" @@ -5334,6 +5816,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/scope-manager@npm:8.6.0" + dependencies: + "@typescript-eslint/types": "npm:8.6.0" + "@typescript-eslint/visitor-keys": "npm:8.6.0" + checksum: 10c0/37092ef70171c06854ac67ebfb2255063890c1c6133654e6b15b6adb6d2ab83de4feafd1599f4d02ed71a018226fcb3a389021758ec045e1904fb1798e90b4fe + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/type-utils@npm:6.21.0" @@ -5368,6 +5860,21 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/type-utils@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/type-utils@npm:8.6.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:8.6.0" + "@typescript-eslint/utils": "npm:8.6.0" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^1.3.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/914b4637caa40c102117655a9b4451e0db611a61309ed39d6c57522655463c059f4dfd4e2d7ffdefcc9ab7533be21fb877b740c58f5be11f3530aa29f3d2cb62 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/types@npm:6.21.0" @@ -5382,6 +5889,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/types@npm:8.6.0" + checksum: 10c0/e7051d212252f7d1905b5527b211e335db4ec5bb1d3a52d73c8d2de6ddf5cbc981f2c92ca9ffcef35f7447bda635ea1ccce5f884ade7f243d14f2a254982c698 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" @@ -5420,6 +5934,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.6.0" + dependencies: + "@typescript-eslint/types": "npm:8.6.0" + "@typescript-eslint/visitor-keys": "npm:8.6.0" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/33ab8c03221a797865301f09d1d198c67f8b0e3dbf0d13e41f699dc2740242303a9fcfd7b38302cef318541fdedd832fd6e8ba34a5041a57e9114fa134045385 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/utils@npm:6.21.0" @@ -5451,6 +5984,20 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/utils@npm:8.6.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:8.6.0" + "@typescript-eslint/types": "npm:8.6.0" + "@typescript-eslint/typescript-estree": "npm:8.6.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + checksum: 10c0/5b615106342dfdf09f5a73e2554cc0c4d979c262a9a4548eb76ec7045768e0ff0bf0316cf8a5eb5404689cd476fcd335fc84f90eb985557559e42aeee33d687e + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:6.21.0": version: 6.21.0 resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" @@ -5471,6 +6018,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:8.6.0": + version: 8.6.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.6.0" + dependencies: + "@typescript-eslint/types": "npm:8.6.0" + eslint-visitor-keys: "npm:^3.4.3" + checksum: 10c0/9bd5d5daee9de7e009fdd1b64b1eca685a699d1b2639373bc279c97e25e769fff56fffef708ef66a2b19bc8bb201d36daf9e7084f0e0872178bfcf9d923b41f3 + languageName: node + linkType: hard + "@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" @@ -5478,6 +6035,21 @@ __metadata: languageName: node linkType: hard +"@vitejs/plugin-react@npm:^4.3.1": + version: 4.3.1 + resolution: "@vitejs/plugin-react@npm:4.3.1" + dependencies: + "@babel/core": "npm:^7.24.5" + "@babel/plugin-transform-react-jsx-self": "npm:^7.24.5" + "@babel/plugin-transform-react-jsx-source": "npm:^7.24.1" + "@types/babel__core": "npm:^7.20.5" + react-refresh: "npm:^0.14.2" + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + checksum: 10c0/39a027feddfd6b3e307121d79631462ef1aae05714ba7a2f9a73d240d0f89c2bf281132568eb27b55d6ddaf08d86ad1bd8b0066090240e570de8c6320eb9a903 + languageName: node + linkType: hard + "@vitest/expect@npm:1.6.0": version: 1.6.0 resolution: "@vitest/expect@npm:1.6.0" @@ -5532,6 +6104,94 @@ __metadata: languageName: node linkType: hard +"@volar/language-core@npm:2.4.5, @volar/language-core@npm:~2.4.1": + version: 2.4.5 + resolution: "@volar/language-core@npm:2.4.5" + dependencies: + "@volar/source-map": "npm:2.4.5" + checksum: 10c0/aea4b6e5874aede72e6f49892ebd6d09412e3bee70f38e2668729be566f2861d57caf0ef43921f591ef37b01a3b56c2837268295e3027e2d2dc30c8977328c8c + languageName: node + linkType: hard + +"@volar/source-map@npm:2.4.5": + version: 2.4.5 + resolution: "@volar/source-map@npm:2.4.5" + checksum: 10c0/f18dadca0db3b9fcf25e4b3e69d820a183ba449c54a70bba0b33a752ab659b713109b1be7f1e379370cdb47f4e171e84d827e2276f834730decd5cf8c68de79d + languageName: node + linkType: hard + +"@volar/typescript@npm:^2.4.4": + version: 2.4.5 + resolution: "@volar/typescript@npm:2.4.5" + dependencies: + "@volar/language-core": "npm:2.4.5" + path-browserify: "npm:^1.0.1" + vscode-uri: "npm:^3.0.8" + checksum: 10c0/c29acf9ed78c83f1f8bc579d7fff7f5d52d4021cb4f6a72f14832ba8b957c29511711c78a796ca57bd1ee4ef475659a58b0de4948d29c4d1217cc08f0bf181ff + languageName: node + linkType: hard + +"@vue/compiler-core@npm:3.5.8": + version: 3.5.8 + resolution: "@vue/compiler-core@npm:3.5.8" + dependencies: + "@babel/parser": "npm:^7.25.3" + "@vue/shared": "npm:3.5.8" + entities: "npm:^4.5.0" + estree-walker: "npm:^2.0.2" + source-map-js: "npm:^1.2.0" + checksum: 10c0/e6b3bf55dc834ed67e8d41a063a9e909aff88baa9399578add9ec43b6cc933e77df926da12df8d99427a8098654e9cd1881e3d78be4ebccd340ec2c9529fef9c + languageName: node + linkType: hard + +"@vue/compiler-dom@npm:^3.4.0": + version: 3.5.8 + resolution: "@vue/compiler-dom@npm:3.5.8" + dependencies: + "@vue/compiler-core": "npm:3.5.8" + "@vue/shared": "npm:3.5.8" + checksum: 10c0/94904b5d62c7bccb12e63a659aae1e00ad841c3fc21fe0ae639c9e00ded587381e0f85edde953fa932799b5ed2cafa92c621d52c01914d1e2226a9410953daef + languageName: node + linkType: hard + +"@vue/compiler-vue2@npm:^2.7.16": + version: 2.7.16 + resolution: "@vue/compiler-vue2@npm:2.7.16" + dependencies: + de-indent: "npm:^1.0.2" + he: "npm:^1.2.0" + checksum: 10c0/c76c3fad770b9a7da40b314116cc9da173da20e5fd68785c8ed8dd8a87d02f239545fa296e16552e040ec86b47bfb18283b39447b250c2e76e479bd6ae475bb3 + languageName: node + linkType: hard + +"@vue/language-core@npm:2.1.6": + version: 2.1.6 + resolution: "@vue/language-core@npm:2.1.6" + dependencies: + "@volar/language-core": "npm:~2.4.1" + "@vue/compiler-dom": "npm:^3.4.0" + "@vue/compiler-vue2": "npm:^2.7.16" + "@vue/shared": "npm:^3.4.0" + computeds: "npm:^0.0.1" + minimatch: "npm:^9.0.3" + muggle-string: "npm:^0.4.1" + path-browserify: "npm:^1.0.1" + peerDependencies: + typescript: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/bad09d54929f09d0d809f13ac1a3ccf0ab0d848c11c420e83a951f7fecfe15537caf95fc55756770a4d79f1fa6b4488bf2846afaba6854746fbb349cbb294bed + languageName: node + linkType: hard + +"@vue/shared@npm:3.5.8, @vue/shared@npm:^3.4.0": + version: 3.5.8 + resolution: "@vue/shared@npm:3.5.8" + checksum: 10c0/69c6f5096d73e5e4b481d4359c9ac420414eaac9e2bcf330c81c6299077636a6c587afcbe19f207d7b0ac61925aa561e2a987c0bd36b989861b0b1f31ce2b41c + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.12.1, @webassemblyjs/ast@npm:^1.12.1": version: 1.12.1 resolution: "@webassemblyjs/ast@npm:1.12.1" @@ -5778,7 +6438,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.0, acorn@npm:^8.0.4, acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:^8.0.0, acorn@npm:^8.0.4, acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.12.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": version: 8.12.1 resolution: "acorn@npm:8.12.1" bin: @@ -5822,6 +6482,18 @@ __metadata: languageName: node linkType: hard +"ajv-draft-04@npm:~1.0.0": + version: 1.0.0 + resolution: "ajv-draft-04@npm:1.0.0" + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/6044310bd38c17d77549fd326bd40ce1506fa10b0794540aa130180808bf94117fac8c9b448c621512bea60e4a947278f6a978e87f10d342950c15b33ddd9271 + languageName: node + linkType: hard + "ajv-formats@npm:^2.1.1": version: 2.1.1 resolution: "ajv-formats@npm:2.1.1" @@ -5836,6 +6508,20 @@ __metadata: languageName: node linkType: hard +"ajv-formats@npm:~3.0.1": + version: 3.0.1 + resolution: "ajv-formats@npm:3.0.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/168d6bca1ea9f163b41c8147bae537e67bd963357a5488a1eaf3abe8baa8eec806d4e45f15b10767e6020679315c7e1e5e6803088dfb84efa2b4e9353b83dd0a + languageName: node + linkType: hard + "ajv-keywords@npm:^3.4.1, ajv-keywords@npm:^3.5.2": version: 3.5.2 resolution: "ajv-keywords@npm:3.5.2" @@ -5880,6 +6566,30 @@ __metadata: languageName: node linkType: hard +"ajv@npm:~8.12.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.2.2" + checksum: 10c0/ac4f72adf727ee425e049bc9d8b31d4a57e1c90da8d28bcd23d60781b12fcd6fc3d68db5df16994c57b78b94eed7988f5a6b482fd376dc5b084125e20a0a622e + languageName: node + linkType: hard + +"ajv@npm:~8.13.0": + version: 8.13.0 + resolution: "ajv@npm:8.13.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.4.1" + checksum: 10c0/14c6497b6f72843986d7344175a1aa0e2c35b1e7f7475e55bc582cddb765fca7e6bf950f465dc7846f817776d9541b706f4b5b3fbedd8dfdeb5fce6f22864264 + languageName: node + linkType: hard + "algoliasearch-helper@npm:^3.13.3": version: 3.22.3 resolution: "algoliasearch-helper@npm:3.22.3" @@ -6002,7 +6712,7 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^1.0.7": +"argparse@npm:^1.0.7, argparse@npm:~1.0.9": version: 1.0.10 resolution: "argparse@npm:1.0.10" dependencies: @@ -7013,6 +7723,13 @@ __metadata: languageName: node linkType: hard +"compare-versions@npm:^6.1.1": + version: 6.1.1 + resolution: "compare-versions@npm:6.1.1" + checksum: 10c0/415205c7627f9e4f358f571266422980c9fe2d99086be0c9a48008ef7c771f32b0fbe8e97a441ffedc3910872f917a0675fe0fe3c3b6d331cda6d8690be06338 + languageName: node + linkType: hard + "compressible@npm:~2.0.16": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -7037,6 +7754,13 @@ __metadata: languageName: node linkType: hard +"computeds@npm:^0.0.1": + version: 0.0.1 + resolution: "computeds@npm:0.0.1" + checksum: 10c0/8a8736f1f43e4a99286519785d71a10ece8f444a2fa1fc2fe1f03dedf63f3477b45094002c85a2826f7631759c9f5a00b4ace47456997f253073fc525e8983de + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -7899,6 +8623,13 @@ __metadata: languageName: node linkType: hard +"de-indent@npm:^1.0.2": + version: 1.0.2 + resolution: "de-indent@npm:1.0.2" + checksum: 10c0/7058ce58abd6dfc123dd204e36be3797abd419b59482a634605420f47ae97639d0c183ec5d1b904f308a01033f473673897afc2bd59bc620ebf1658763ef4291 + languageName: node + linkType: hard + "debounce@npm:^1.2.1": version: 1.2.1 resolution: "debounce@npm:1.2.1" @@ -7936,6 +8667,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.6": + version: 4.3.7 + resolution: "debug@npm:4.3.7" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b + languageName: node + linkType: hard + "decode-named-character-reference@npm:^1.0.0": version: 1.0.2 resolution: "decode-named-character-reference@npm:1.0.2" @@ -8452,7 +9195,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.2.0, entities@npm:^4.4.0": +"entities@npm:^4.2.0, entities@npm:^4.4.0, entities@npm:^4.5.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 @@ -9055,6 +9798,15 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-react-hooks@npm:^5.1.0-rc.0": + version: 5.1.0-rc-fb9a90fa48-20240614 + resolution: "eslint-plugin-react-hooks@npm:5.1.0-rc-fb9a90fa48-20240614" + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + checksum: 10c0/e27a8073a19d8411cb1cbbd2a935d0f5ec824efb7fd17d907df5c71df47ace9faa9c08c0e8f6db627b62db202a146ff111e6b3067e31773af0b41d15a34ba956 + languageName: node + linkType: hard + "eslint-plugin-react-refresh@npm:^0.4.5": version: 0.4.9 resolution: "eslint-plugin-react-refresh@npm:0.4.9" @@ -9064,6 +9816,15 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-react-refresh@npm:^0.4.9": + version: 0.4.12 + resolution: "eslint-plugin-react-refresh@npm:0.4.12" + peerDependencies: + eslint: ">=7" + checksum: 10c0/33dd82450f7c5fa884c5c84ffaf9d9a8b363bc155432807dc09904c7db6ba724888fac4562b058268259aa7c9270b622ef411488011b3469a2add275ed5c2273 + languageName: node + linkType: hard + "eslint-plugin-react@npm:^7.33.2": version: 7.35.0 resolution: "eslint-plugin-react@npm:7.35.0" @@ -9146,6 +9907,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^8.0.2": + version: 8.0.2 + resolution: "eslint-scope@npm:8.0.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/477f820647c8755229da913025b4567347fd1f0bf7cbdf3a256efff26a7e2e130433df052bd9e3d014025423dc00489bea47eb341002b15553673379c1a7dc36 + languageName: node + linkType: hard + "eslint-utils@npm:^3.0.0": version: 3.0.0 resolution: "eslint-utils@npm:3.0.0" @@ -9171,6 +9942,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^4.0.0": + version: 4.0.0 + resolution: "eslint-visitor-keys@npm:4.0.0" + checksum: 10c0/76619f42cf162705a1515a6868e6fc7567e185c7063a05621a8ac4c3b850d022661262c21d9f1fc1d144ecf0d5d64d70a3f43c15c3fc969a61ace0fb25698cf5 + languageName: node + linkType: hard + "eslint@npm:8.57.0, eslint@npm:^8.57.0": version: 8.57.0 resolution: "eslint@npm:8.57.0" @@ -9219,6 +9997,55 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^9.9.0": + version: 9.11.0 + resolution: "eslint@npm:9.11.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.11.0" + "@eslint/config-array": "npm:^0.18.0" + "@eslint/eslintrc": "npm:^3.1.0" + "@eslint/js": "npm:9.11.0" + "@eslint/plugin-kit": "npm:^0.2.0" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@humanwhocodes/retry": "npm:^0.3.0" + "@nodelib/fs.walk": "npm:^1.2.8" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^8.0.2" + eslint-visitor-keys: "npm:^4.0.0" + espree: "npm:^10.1.0" + esquery: "npm:^1.5.0" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^8.0.0" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + bin: + eslint: bin/eslint.js + checksum: 10c0/3438a78172bc667dc87bc4ad864671bd93231c82c9d366899ea3a77fc3444c8cdd158e7fe3ca1cfe4cb566045b1b36c0ccae9fc20efeb4b187f1a534075a1177 + languageName: node + linkType: hard + "esm-env@npm:1.0.0, esm-env@npm:^1.0.0": version: 1.0.0 resolution: "esm-env@npm:1.0.0" @@ -9226,6 +10053,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^10.0.1, espree@npm:^10.1.0": + version: 10.1.0 + resolution: "espree@npm:10.1.0" + dependencies: + acorn: "npm:^8.12.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.0.0" + checksum: 10c0/52e6feaa77a31a6038f0c0e3fce93010a4625701925b0715cd54a2ae190b3275053a0717db698697b32653788ac04845e489d6773b508d6c2e8752f3c57470a0 + languageName: node + linkType: hard + "espree@npm:^9.6.0, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" @@ -9247,7 +10085,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.2": +"esquery@npm:^1.4.2, esquery@npm:^1.5.0": version: 1.6.0 resolution: "esquery@npm:1.6.0" dependencies: @@ -9344,6 +10182,13 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^2.0.2": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af + languageName: node + linkType: hard + "estree-walker@npm:^3.0.0, estree-walker@npm:^3.0.3": version: 3.0.3 resolution: "estree-walker@npm:3.0.3" @@ -9622,6 +10467,15 @@ __metadata: languageName: node linkType: hard +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" + dependencies: + flat-cache: "npm:^4.0.0" + checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 + languageName: node + linkType: hard + "file-loader@npm:^6.2.0": version: 6.2.0 resolution: "file-loader@npm:6.2.0" @@ -9715,6 +10569,16 @@ __metadata: languageName: node linkType: hard +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.4" + checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc + languageName: node + linkType: hard + "flat@npm:^5.0.2": version: 5.0.2 resolution: "flat@npm:5.0.2" @@ -9849,6 +10713,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:~7.0.1": + version: 7.0.1 + resolution: "fs-extra@npm:7.0.1" + dependencies: + graceful-fs: "npm:^4.1.2" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 10c0/1943bb2150007e3739921b8d13d4109abdc3cc481e53b97b7ea7f77eda1c3c642e27ae49eac3af074e3496ea02fde30f411ef410c760c70a38b92e656e5da784 + languageName: node + linkType: hard + "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -10052,6 +10927,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^11.0.0": + version: 11.0.0 + resolution: "glob@npm:11.0.0" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^4.0.1" + minimatch: "npm:^10.0.0" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^2.0.0" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/419866015d8795258a8ac51de5b9d1a99c72634fc3ead93338e4da388e89773ab21681e494eac0fbc4250b003451ca3110bb4f1c9393d15d14466270094fdb4e + languageName: node + linkType: hard + "glob@npm:^7.0.0, glob@npm:^7.1.3, glob@npm:^7.1.6": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -10123,6 +11014,20 @@ __metadata: languageName: node linkType: hard +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d + languageName: node + linkType: hard + +"globals@npm:^15.9.0": + version: 15.9.0 + resolution: "globals@npm:15.9.0" + checksum: 10c0/de4b553e412e7e830998578d51b605c492256fb2a9273eaeec6ec9ee519f1c5aa50de57e3979911607fd7593a4066420e01d8c3d551e7a6a236e96c521aee36c + languageName: node + linkType: hard + "globalthis@npm:^1.0.3": version: 1.0.4 resolution: "globalthis@npm:1.0.4" @@ -10830,7 +11735,7 @@ __metadata: languageName: node linkType: hard -"import-lazy@npm:^4.0.0": +"import-lazy@npm:^4.0.0, import-lazy@npm:~4.0.0": version: 4.0.0 resolution: "import-lazy@npm:4.0.0" checksum: 10c0/a3520313e2c31f25c0b06aa66d167f329832b68a4f957d7c9daf6e0fa41822b6e84948191648b9b9d8ca82f94740cdf15eecf2401a5b42cd1c33fd84f2225cca @@ -11509,6 +12414,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^4.0.1": + version: 4.0.1 + resolution: "jackspeak@npm:4.0.1" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/c87997d9c9c5b7366259b1f2a444ef148692f8eedad5307caca939babbb60af2b47d306e5c63bf9d5fefbab2ab48d4da275188c3de525d0e716cc21b784bbccb + languageName: node + linkType: hard + "jest-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-util@npm:29.7.0" @@ -11555,6 +12473,13 @@ __metadata: languageName: node linkType: hard +"jju@npm:~1.4.0": + version: 1.4.0 + resolution: "jju@npm:1.4.0" + checksum: 10c0/f3f444557e4364cfc06b1abf8331bf3778b26c0c8552ca54429bc0092652172fdea26cbffe33e1017b303d5aa506f7ede8571857400efe459cb7439180e2acad + languageName: node + linkType: hard + "joi@npm:^17.9.2": version: 17.13.3 resolution: "joi@npm:17.13.3" @@ -11685,6 +12610,18 @@ __metadata: languageName: node linkType: hard +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.6" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 + languageName: node + linkType: hard + "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -11710,7 +12647,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.3": +"keyv@npm:^4.5.3, keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -11747,6 +12684,13 @@ __metadata: languageName: node linkType: hard +"kolorist@npm:^1.8.0": + version: 1.8.0 + resolution: "kolorist@npm:1.8.0" + checksum: 10c0/73075db44a692bf6c34a649f3b4b3aea4993b84f6b754cbf7a8577e7c7db44c0bad87752bd23b0ce533f49de2244ce2ce03b7b1b667a85ae170a94782cc50f9b + languageName: node + linkType: hard + "language-subtag-registry@npm:^0.3.20": version: 0.3.23 resolution: "language-subtag-registry@npm:0.3.23" @@ -11932,7 +12876,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.20, lodash@npm:^4.17.21": +"lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -11989,6 +12933,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^11.0.0": + version: 11.0.1 + resolution: "lru-cache@npm:11.0.1" + checksum: 10c0/8bad6603dc67eb5b03520fba05bce5df6473dbba58ac4c6067ed088d29225a0a04416bb1462acd8c1f819d1fbf37920446a1c36bafd9c384bcc54cee0d3b697a + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -11998,6 +12949,15 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 + languageName: node + linkType: hard + "lunr-languages@npm:^1.4.0": version: 1.14.0 resolution: "lunr-languages@npm:1.14.0" @@ -12032,7 +12992,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.0, magic-string@npm:^0.30.10, magic-string@npm:^0.30.4, magic-string@npm:^0.30.5": +"magic-string@npm:^0.30.0, magic-string@npm:^0.30.10, magic-string@npm:^0.30.11, magic-string@npm:^0.30.4, magic-string@npm:^0.30.5": version: 0.30.11 resolution: "magic-string@npm:0.30.11" dependencies: @@ -13072,6 +14032,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^10.0.0": + version: 10.0.1 + resolution: "minimatch@npm:10.0.1" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/e6c29a81fe83e1877ad51348306be2e8aeca18c88fdee7a99df44322314279e15799e41d7cb274e4e8bb0b451a3bc622d6182e157dfa1717d6cda75e9cd8cd5d + languageName: node + linkType: hard + "minimatch@npm:^8.0.2": version: 8.0.4 resolution: "minimatch@npm:8.0.4" @@ -13081,7 +14050,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.4": +"minimatch@npm:^9.0.3, minimatch@npm:^9.0.4": version: 9.0.5 resolution: "minimatch@npm:9.0.5" dependencies: @@ -13090,6 +14059,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:~3.0.3": + version: 3.0.8 + resolution: "minimatch@npm:3.0.8" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/72b226f452dcfb5075255f53534cb83fc25565b909e79b9be4fad463d735cb1084827f7013ff41d050e77ee6e474408c6073473edd2fb72c2fd630cfb0acc6ad + languageName: node + linkType: hard + "minimist@npm:^1.2.0, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -13267,13 +14245,20 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 languageName: node linkType: hard +"muggle-string@npm:^0.4.1": + version: 0.4.1 + resolution: "muggle-string@npm:0.4.1" + checksum: 10c0/e914b63e24cd23f97e18376ec47e4ba3aa24365e4776212b666add2e47bb158003212980d732c49abf3719568900af7861873844a6e2d3a7ca7e86952c0e99e9 + languageName: node + linkType: hard + "multicast-dns@npm:^7.2.5": version: 7.2.5 resolution: "multicast-dns@npm:7.2.5" @@ -13875,6 +14860,13 @@ __metadata: languageName: node linkType: hard +"path-browserify@npm:^1.0.1": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: 10c0/8b8c3fd5c66bd340272180590ae4ff139769e9ab79522e2eb82e3d571a89b8117c04147f65ad066dccfb42fcad902e5b7d794b3d35e0fd840491a8ddbedf8c66 + languageName: node + linkType: hard + "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -13941,6 +14933,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^2.0.0": + version: 2.0.0 + resolution: "path-scurry@npm:2.0.0" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10c0/3da4adedaa8e7ef8d6dc4f35a0ff8f05a9b4d8365f2b28047752b62d4c1ad73eec21e37b1579ef2d075920157856a3b52ae8309c480a6f1a8bbe06ff8e52b33c + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -14059,6 +15061,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.1.0": + version: 1.1.0 + resolution: "picocolors@npm:1.1.0" + checksum: 10c0/86946f6032148801ef09c051c6fb13b5cf942eaf147e30ea79edb91dd32d700934edebe782a1078ff859fb2b816792e97ef4dab03d7f0b804f6b01a0df35e023 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -14670,6 +15679,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.43": + version: 8.4.47 + resolution: "postcss@npm:8.4.47" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.1.0" + source-map-js: "npm:^1.2.1" + checksum: 10c0/929f68b5081b7202709456532cee2a145c1843d391508c5a09de2517e8c4791638f71dd63b1898dba6712f8839d7a6da046c72a5e44c162e908f5911f57b5f44 + languageName: node + linkType: hard + "postgres-array@npm:~2.0.0": version: 2.0.0 resolution: "postgres-array@npm:2.0.0" @@ -15184,6 +16204,13 @@ __metadata: languageName: node linkType: hard +"react-refresh@npm:^0.14.2": + version: 0.14.2 + resolution: "react-refresh@npm:0.14.2" + checksum: 10c0/875b72ef56b147a131e33f2abd6ec059d1989854b3ff438898e4f9310bfcc73acff709445b7ba843318a953cb9424bcc2c05af2b3d80011cee28f25aef3e2ebb + languageName: node + linkType: hard + "react-router-config@npm:^5.1.1": version: 5.1.1 resolution: "react-router-config@npm:5.1.1" @@ -15627,7 +16654,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.14.2, resolve@npm:^1.22.2, resolve@npm:^1.22.4, resolve@npm:^1.22.8": +"resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.14.2, resolve@npm:^1.22.2, resolve@npm:^1.22.4, resolve@npm:^1.22.8, resolve@npm:~1.22.1, resolve@npm:~1.22.2": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -15653,7 +16680,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": +"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin, resolve@patch:resolve@npm%3A~1.22.1#optional!builtin, resolve@patch:resolve@npm%3A~1.22.2#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -15830,6 +16857,69 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.20.0": + version: 4.22.4 + resolution: "rollup@npm:4.22.4" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.22.4" + "@rollup/rollup-android-arm64": "npm:4.22.4" + "@rollup/rollup-darwin-arm64": "npm:4.22.4" + "@rollup/rollup-darwin-x64": "npm:4.22.4" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.22.4" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.22.4" + "@rollup/rollup-linux-arm64-gnu": "npm:4.22.4" + "@rollup/rollup-linux-arm64-musl": "npm:4.22.4" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.22.4" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.22.4" + "@rollup/rollup-linux-s390x-gnu": "npm:4.22.4" + "@rollup/rollup-linux-x64-gnu": "npm:4.22.4" + "@rollup/rollup-linux-x64-musl": "npm:4.22.4" + "@rollup/rollup-win32-arm64-msvc": "npm:4.22.4" + "@rollup/rollup-win32-ia32-msvc": "npm:4.22.4" + "@rollup/rollup-win32-x64-msvc": "npm:4.22.4" + "@types/estree": "npm:1.0.5" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/4c96b6e2e0c5dbe73b4ba899cea894a05115ab8c65ccff631fbbb944e2b3a9f2eb3b99c2dce3dd91b179647df1892ffc44ecee29381ccf155ba8000b22712a32 + languageName: node + linkType: hard + "root@workspace:.": version: 0.0.0-use.local resolution: "root@workspace:." @@ -16049,6 +17139,17 @@ __metadata: languageName: node linkType: hard +"semver@npm:~7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 10c0/5160b06975a38b11c1ab55950cb5b8a23db78df88275d3d8a42ccf1f29e55112ac995b3a26a522c36e3b5f76b0445f1eef70d696b8c7862a2b4303d7b0e7609e + languageName: node + linkType: hard + "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -16414,6 +17515,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + "source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" @@ -16563,6 +17671,13 @@ __metadata: languageName: node linkType: hard +"string-argv@npm:~0.3.1": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 10c0/75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 + languageName: node + linkType: hard + "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -16753,7 +17868,7 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd @@ -16842,7 +17957,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0": +"supports-color@npm:^8.0.0, supports-color@npm:~8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -17373,6 +18488,30 @@ __metadata: languageName: node linkType: hard +"typescript-eslint@npm:^8.0.1": + version: 8.6.0 + resolution: "typescript-eslint@npm:8.6.0" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.6.0" + "@typescript-eslint/parser": "npm:8.6.0" + "@typescript-eslint/utils": "npm:8.6.0" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/d009170af1cffece3a63784c3f6d6f5074fd42d198540f3140dd0fed4f37b1888d59abb5992624099834cae2ea4863b6c526b5f11ecbfd105f41a87e300305db + languageName: node + linkType: hard + +"typescript@npm:5.4.2": + version: 5.4.2 + resolution: "typescript@npm:5.4.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/583ff68cafb0c076695f72d61df6feee71689568179fb0d3a4834dac343df6b6ed7cf7b6f6c801fa52d43cd1d324e2f2d8ae4497b09f9e6cfe3d80a6d6c9ca52 + languageName: node + linkType: hard + "typescript@npm:^5.0.0, typescript@npm:^5.0.3": version: 5.5.4 resolution: "typescript@npm:5.5.4" @@ -17383,6 +18522,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.5.3": + version: 5.6.2 + resolution: "typescript@npm:5.6.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/3ed8297a8c7c56b7fec282532503d1ac795239d06e7c4966b42d4330c6cf433a170b53bcf93a130a7f14ccc5235de5560df4f1045eb7f3550b46ebed16d3c5e5 + languageName: node + linkType: hard + "typescript@npm:~5.2.2": version: 5.2.2 resolution: "typescript@npm:5.2.2" @@ -17393,6 +18542,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A5.4.2#optional!builtin": + version: 5.4.2 + resolution: "typescript@patch:typescript@npm%3A5.4.2#optional!builtin::version=5.4.2&hash=5adc0c" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/fcf6658073d07283910d9a0e04b1d5d0ebc822c04dbb7abdd74c3151c7aa92fcddbac7d799404e358197222006ccdc4c0db219d223d2ee4ccd9e2b01333b49be + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A^5.0.0#optional!builtin, typescript@patch:typescript@npm%3A^5.0.3#optional!builtin": version: 5.5.4 resolution: "typescript@patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07" @@ -17403,6 +18562,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A^5.5.3#optional!builtin": + version: 5.6.2 + resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=379a07" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/e6c1662e4852e22fe4bbdca471dca3e3edc74f6f1df043135c44a18a7902037023ccb0abdfb754595ca9028df8920f2f8492c00fc3cbb4309079aae8b7de71cd + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A~5.2.2#optional!builtin": version: 5.2.2 resolution: "typescript@patch:typescript@npm%3A5.2.2#optional!builtin::version=5.2.2&hash=f3b441" @@ -17616,6 +18785,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" @@ -17678,7 +18854,7 @@ __metadata: languageName: node linkType: hard -"uri-js@npm:^4.2.2": +"uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": version: 4.4.1 resolution: "uri-js@npm:4.4.1" dependencies: @@ -17836,6 +19012,29 @@ __metadata: languageName: node linkType: hard +"vite-plugin-dts@npm:^4.2.1": + version: 4.2.1 + resolution: "vite-plugin-dts@npm:4.2.1" + dependencies: + "@microsoft/api-extractor": "npm:7.47.7" + "@rollup/pluginutils": "npm:^5.1.0" + "@volar/typescript": "npm:^2.4.4" + "@vue/language-core": "npm:2.1.6" + compare-versions: "npm:^6.1.1" + debug: "npm:^4.3.6" + kolorist: "npm:^1.8.0" + local-pkg: "npm:^0.5.0" + magic-string: "npm:^0.30.11" + peerDependencies: + typescript: "*" + vite: "*" + peerDependenciesMeta: + vite: + optional: true + checksum: 10c0/cd18f7ee82ae93d56c90cd723fe93dfd169f4f35b80af520c9fb68d8eae84ee866329ac099fd7944f86c20752662c2aef380e784a9828f591eaa2df7ebf048c7 + languageName: node + linkType: hard + "vite-plugin-tailwind-purgecss@npm:0.3.3": version: 0.3.3 resolution: "vite-plugin-tailwind-purgecss@npm:0.3.3" @@ -17895,6 +19094,49 @@ __metadata: languageName: node linkType: hard +"vite@npm:^5.4.1": + version: 5.4.7 + resolution: "vite@npm:5.4.7" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + 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 + bin: + vite: bin/vite.js + checksum: 10c0/0ca7ca60f71c61f3855bbabf7e33909bec32933b35914d4d281813c728183e78e7ce5be05735a7671df3a994613d3881f520a32a80715faa92effb28deee9320 + languageName: node + linkType: hard + "vitefu@npm:^0.2.5": version: 0.2.5 resolution: "vitefu@npm:0.2.5" @@ -17957,6 +19199,13 @@ __metadata: languageName: node linkType: hard +"vscode-uri@npm:^3.0.8": + version: 3.0.8 + resolution: "vscode-uri@npm:3.0.8" + checksum: 10c0/f7f217f526bf109589969fe6e66b71e70b937de1385a1d7bb577ca3ee7c5e820d3856a86e9ff2fa9b7a0bc56a3dd8c3a9a557d3fedd7df414bc618d5e6b567f9 + languageName: node + linkType: hard + "watchpack@npm:^2.4.1": version: 2.4.1 resolution: "watchpack@npm:2.4.1"