diff --git a/.github/workflows/coverage-diff.yml b/.github/workflows/coverage-diff.yml index 02c95217..34044ea0 100644 --- a/.github/workflows/coverage-diff.yml +++ b/.github/workflows/coverage-diff.yml @@ -10,3 +10,5 @@ jobs: checks: write pull-requests: write uses: fingerprintjs/dx-team-toolkit/.github/workflows/coverage-diff.yml@v1 + with: + testScript: pnpm test:coverage:diff diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6ccec65e..17b6b4b4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,6 +11,7 @@ jobs: uses: fingerprintjs/dx-team-toolkit/.github/workflows/release-typescript-project.yml@v1 with: appId: ${{ vars.APP_ID }} + useTrustedPublishing: true secrets: APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} diff --git a/.releaserc b/.releaserc index bef5c32c..d589bfbd 100644 --- a/.releaserc +++ b/.releaserc @@ -21,7 +21,12 @@ } ], "@semantic-release/changelog", - "@semantic-release/npm", + [ + "@semantic-release/npm", + { + "npmPublish": false + } + ], [ "@semantic-release/exec", { diff --git a/README.md b/README.md index a03820de..2ed85568 100644 --- a/README.md +++ b/README.md @@ -8,28 +8,28 @@

- CI badge - coverage - Current NPM version - Monthly downloads from NPM + CI badge + coverage + Current NPM version + Monthly downloads from NPM MIT license Discord server - Discord server + Discord server

-# Fingerprint Pro React +# Fingerprint React -Fingerprint is a device intelligence platform offering industry-leading accuracy. Fingerprint Pro React SDK is an easy way to integrate **[Fingerprint Pro](https://fingerprint.com/)** into your React application. It's also compatible with Next.js and Preact. See application demos in the [examples](https://github.com/fingerprintjs/fingerprintjs-pro-react/tree/main/examples) folder. +Fingerprint is a device intelligence platform offering industry-leading accuracy. Fingerprint React SDK is an easy way to integrate **[Fingerprint](https://fingerprint.com/)** into your React application. It's also compatible with Next.js and Preact. See application demos in the [examples](https://github.com/fingerprintjs/react/tree/main/examples) folder. ## Table of contents -- [Fingerprint Pro React](#fingerprint-pro-react) +- [Fingerprint React](#fingerprint-react) - [Table of contents](#table-of-contents) - [Requirements](#requirements) - [Installation](#installation) - [Getting started](#getting-started) - - [1. Wrap your application (or component) in ``.](#1-wrap-your-application-or-component-in-fpjsprovider) + - [1. Wrap your application (or component) in ``.](#1-wrap-your-application-or-component-in-FingerprintProvider) - [2. Use the `useVisitorData()` hook in your components to identify visitors](#2-use-the-usevisitordata-hook-in-your-components-to-identify-visitors) - [Linking and tagging information](#linking-and-tagging-information) - [Caching strategy](#caching-strategy) @@ -46,69 +46,59 @@ Fingerprint is a device intelligence platform offering industry-leading accuracy - For Typescript users: Typescript 4.8 or higher > [!NOTE] -> This package assumes you have a Fingerprint Pro subscription or trial, it is not compatible with the [source-available FingerprintJS](https://github.com/fingerprintjs/fingerprintjs). See our documentation to learn more about the [differences between Fingerprint Pro and FingerprintJS](https://dev.fingerprint.com/docs/identification-vs-fingerprintjs). +> This package assumes you have a Fingerprint subscription or trial, it is not compatible with the [source-available FingerprintJS](https://github.com/fingerprintjs/fingerprintjs). See our documentation to learn more about the [differences between Fingerprint and FingerprintJS](https://docs.fingerprint.com/docs/identification-vs-fingerprintjs). ## Installation Using [npm](https://npmjs.org): ```sh -npm install @fingerprintjs/fingerprintjs-pro-react +npm install @fingerprint/react ``` Using [yarn](https://yarnpkg.com): ```sh -yarn add @fingerprintjs/fingerprintjs-pro-react +yarn add @fingerprint/react ``` Using [pnpm](https://pnpm.js.org): ```sh -pnpm add @fingerprintjs/fingerprintjs-pro-react +pnpm add @fingerprint/react ``` ## Getting started -In order to identify visitors, you'll need a Fingerprint Pro account (you can [sign up for free](https://dashboard.fingerprint.com/signup/)). -To get your API key and get started, see the [Fingerprint Pro Quick Start Guide](https://dev.fingerprint.com/docs/quick-start-guide). +In order to identify visitors, you'll need a Fingerprint account (you can [sign up for free](https://dashboard.fingerprint.com/signup/)). +To get your API key and get started, see the [Fingerprint Quick Start Guide](https://docs.fingerprint.com/docs/quick-start-guide). -### 1. Wrap your application (or component) in ``. +### 1. Wrap your application (or component) in ``. - Set `apiKey` to your Fingerprint [Public API Key](https://dashboard.fingerprint.com/api-keys). -- Set `region` if you have chosen a non-global [region](https://dev.fingerprint.com/docs/regions) during registration. -- Set `endpoint` and `scriptUrlPattern` if you are using [one of our proxy integrations to increase accuracy](https://dev.fingerprint.com/docs/protecting-the-javascript-agent-from-adblockers) and effectiveness of visitor identification. -- You can use all the [load options](https://dev.fingerprint.com/reference/load-function#load-options) available in the JavaScript agent `load` function. +- Set `region` if you have chosen a non-global [region](https://docs.fingerprint.com/docs/regions) during registration. +- Set `endpoint` if you are using [one of our proxy integrations to increase accuracy](https://docs.fingerprint.com/docs/protecting-the-javascript-agent-from-adblockers) and effectiveness of visitor identification. +- You can use all the [start options](https://docs.fingerprint.com/reference/js-agent-v4-start-function#start-options) available in the JavaScript agent `load` function. ```jsx // src/index.js import React from 'react' import ReactDOM from 'react-dom/client' import { - FpjsProvider, + FingerprintProvider, FingerprintJSPro, -} from '@fingerprintjs/fingerprintjs-pro-react' +} from '@fingerprint/react' import App from './App' const root = ReactDOM.createRoot(document.getElementById('app')) +// supports the same options as `start()` function. root.render( - //loader_v.js', - FingerprintJSPro.defaultScriptUrlPattern, - ], - }} + - + ) ``` @@ -117,10 +107,10 @@ root.render( ```jsx // src/App.js import React from 'react' -import { useVisitorData } from '@fingerprintjs/fingerprintjs-pro-react' +import { useVisitorData } from '@fingerprint/react' function App() { - const { isLoading, error, data } = useVisitorData() + const { isLoading, error, isFetched, data } = useVisitorData() if (isLoading) { return
Loading...
@@ -129,16 +119,11 @@ function App() { return
An error occured: {error.message}
} - if (data) { - // Perform some logic based on the visitor data - return ( -
- Welcome {data.visitorFound ? 'back' : ''}, {data.visitorId}! -
- ) - } else { - return null + if (isFetched) { + return
Welcome {data.visitor_id}!
} + + return null } export default App @@ -146,19 +131,17 @@ export default App The `useVisitorData` hook also returns a `getData` method you can use to make an API call on command. -- You can pass `{ ignoreCache: true }` to `useVisitorData` to force a fresh identification request. - You can pass `{ immediate: false }` to `useVisitorData` to disable automatic visitor identification on render. -Both `useVisitorData` and `getData` accept all the [get options](https://dev.fingerprint.com/reference/get-function#get-options) available in the JavaScript agent `get` function. +Both `useVisitorData` and `getData` accept all the [get options](https://docs.fingerprint.com/reference/get-function#get-options) available in the JavaScript agent `get` function. ```jsx // src/App.js import React, { useState } from 'react' -import { useVisitorData } from '@fingerprintjs/fingerprintjs-pro-react' +import { useVisitorData } from '@fingerprint/react' function App() { const { isLoading, error, getData } = useVisitorData( - { ignoreCache: true }, { immediate: false } ) const [email, setEmail] = useState('') @@ -206,7 +189,7 @@ export default App ## Linking and tagging information -The `visitorId` provided by Fingerprint Identification is especially useful when combined with information you already know about your users, for example, account IDs, order IDs, etc. To learn more about various applications of the `linkedId` and `tag`, see [Linking and tagging information](https://dev.fingerprint.com/docs/tagging-information). +The `visitorId` provided by Fingerprint Identification is especially useful when combined with information you already know about your users, for example, account IDs, order IDs, etc. To learn more about various applications of the `linkedId` and `tag`, see [Linking and tagging information](https://docs.fingerprint.com/docs/tagging-information). Associate the visitor ID with your data using the `linkedId` or `tag` parameter of the options object passed into the `useVisitorData()` hook or the `getData` function: @@ -224,32 +207,18 @@ function App() { // ... ``` -## Caching strategy - -Fingerprint Pro usage is billed per API call. To avoid unnecessary API calls, it is a good practice to cache identification results. By default, the SDK uses `sessionStorage` to cache results. - -- Specify the `cacheLocation` prop on `` to instead store results in `memory` or `localStorage`. Use `none` to disable caching completely. -- Specify the `cacheTimeInSeconds` prop on `` to set the cache time in seconds. It cannot exceed 86400 seconds (24 hours). -- Specify the `cache` prop on `` to use your custom cache implementation instead. For more details, see [Creating a custom cache](https://github.com/fingerprintjs/fingerprintjs-pro-spa#creating-a-custom-cache) - in the Fingerprint Pro SPA repository (a lower-level Fingerprint library used by this SDK). -- Pass `{ignoreCache: true}` to the `getData()` function to ignore cached results for that specific API call. - -> [!NOTE] -> If you use data from [`extendedResult`](https://dev.fingerprint.com/reference/get-function#extendedresult), pay additional attention to your caching strategy. -> Some fields, for example, `ip` or `lastSeenAt`, might change over time for the same visitor. Use `getData({ ignoreCache: true })` to fetch the latest identification results. - ## Error handling -The `getData` function throws errors directly from the JS Agent without changing them. See [JS Agent error handling](https://dev.fingerprint.com/reference/error-handling) for more details. +The `getData` function throws errors directly from the JS Agent without changing them. See [JS Agent error handling](https://docs.fingerprint.com/reference/js-agent-v4-error-handling) for more details. ## API Reference -See the full [generated API reference](https://fingerprintjs.github.io/fingerprintjs-pro-react/). +See the full [generated API reference](https://fingerprintjs.github.io/react/). ## Support and feedback -To ask questions or provide feedback, use [Issues](https://github.com/fingerprintjs/fingerprintjs-pro-react/issues). If you need private support, please email us at `oss-support@fingerprint.com`. If you'd like to have a similar React wrapper for the [source-availalbe FingerprintJS](https://github.com/fingerprintjs/fingerprintjs), consider creating an issue in the main [FingerprintJS repository](https://github.com/fingerprintjs/fingerprintjs/issues). +To ask questions or provide feedback, use [Issues](https://github.com/fingerprintjs/react/issues). If you need private support, please email us at `oss-support@fingerprint.com`. If you'd like to have a similar React wrapper for the [source-availalbe FingerprintJS](https://github.com/fingerprintjs/fingerprintjs), consider creating an issue in the main [FingerprintJS repository](https://github.com/fingerprintjs/fingerprintjs/issues). ## License -This project is licensed under the MIT license. See the [LICENSE](https://github.com/fingerprintjs/fingerprintjs-pro-react/blob/main/LICENSE) file for more info. +This project is licensed under the MIT license. See the [LICENSE](https://github.com/fingerprintjs/react/blob/main/LICENSE) file for more info. diff --git a/__tests__/detect-env.test.ts b/__tests__/detect-env.test.ts index 6d89a5b3..afd706c7 100644 --- a/__tests__/detect-env.test.ts +++ b/__tests__/detect-env.test.ts @@ -1,5 +1,6 @@ import { detectEnvironment } from '../src/detect-env' import { Env } from '../src/env.types' +import { describe, it, expect } from 'vitest' describe('Detect user env', () => { describe('Preact', () => { diff --git a/__tests__/fpjs-provider.test.tsx b/__tests__/fpjs-provider.test.tsx index 14de2aee..ba301c15 100644 --- a/__tests__/fpjs-provider.test.tsx +++ b/__tests__/fpjs-provider.test.tsx @@ -1,42 +1,36 @@ import { useContext } from 'react' import { renderHook } from '@testing-library/react' -import { FpjsContext } from '../src' +import { FingerprintContext } from '../src' import { createWrapper, getDefaultLoadOptions } from './helpers' -import { CacheLocation, FpjsClient, FpjsClientOptions } from '@fingerprintjs/fingerprintjs-pro-spa' -import * as packageInfo from '../package.json' +import { version } from '../package.json' +import { describe, it, expect, vi } from 'vitest' +import * as agent from '@fingerprint/agent' -jest.mock('@fingerprintjs/fingerprintjs-pro-spa', () => { - return { - ...jest.requireActual('@fingerprintjs/fingerprintjs-pro-spa'), - FpjsClient: jest.fn(() => ({ - init: jest.fn(), - })), - } -}) +vi.mock('@fingerprint/agent', { spy: true }) + +const mockStart = vi.mocked(agent.start) -describe(`FpjsProvider`, () => { - it('should configure an instance of the FpjsClient', async () => { +describe('FingerprintProvider', () => { + it('should configure an instance of the Fp Agent', async () => { const loadOptions = getDefaultLoadOptions() - const options: FpjsClientOptions = { - loadOptions, - cacheLocation: CacheLocation.LocalStorage, - cachePrefix: 'TEST_PREFIX', - cacheTimeInSeconds: 60 * 15, - } - const wrapper = createWrapper(options) - renderHook(() => useContext(FpjsContext), { + const wrapper = createWrapper({ + cache: { + cachePrefix: 'cache', + storage: 'sessionStorage', + duration: 100, + }, + }) + renderHook(() => useContext(FingerprintContext), { wrapper, }) - expect(FpjsClient).toHaveBeenCalledWith( - expect.objectContaining({ - loadOptions: expect.objectContaining({ - ...loadOptions, - integrationInfo: [`react-sdk/${packageInfo.version}/react`], - }), - cacheLocation: CacheLocation.LocalStorage, - cachePrefix: 'TEST_PREFIX', - cacheTimeInSeconds: 60 * 15, - }) - ) + expect(mockStart).toHaveBeenCalledWith({ + ...loadOptions, + integrationInfo: [`react-sdk/${version}/react`], + cache: { + cachePrefix: 'cache', + storage: 'sessionStorage', + duration: 100, + }, + }) }) }) diff --git a/__tests__/helpers.tsx b/__tests__/helpers.tsx index 29f8203a..d799b015 100644 --- a/__tests__/helpers.tsx +++ b/__tests__/helpers.tsx @@ -1,18 +1,17 @@ import { PropsWithChildren } from 'react' -import { FpjsClientOptions } from '@fingerprintjs/fingerprintjs-pro-spa' -import { FpjsProvider } from '../src' -import { act } from 'react-dom/test-utils' +import { FingerprintProvider, FingerprintProviderOptions } from '../src' +import { act } from '@testing-library/react' export const getDefaultLoadOptions = () => ({ apiKey: 'test_api_key', }) export const createWrapper = - ({ loadOptions = getDefaultLoadOptions(), ...options }: Partial = {}) => - ({ children }: PropsWithChildren<{}>): JSX.Element => ( - + (providerProps: Partial = {}) => + ({ children }: PropsWithChildren<{}>) => ( + {children} - +
) export const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) diff --git a/__tests__/use-visitor-data.test.tsx b/__tests__/use-visitor-data.test.tsx index e2065616..601342f1 100644 --- a/__tests__/use-visitor-data.test.tsx +++ b/__tests__/use-visitor-data.test.tsx @@ -1,36 +1,38 @@ -import { useVisitorData, VisitorQueryContext } from '../src' -import { render, renderHook } from '@testing-library/react' -import { actWait, createWrapper } from './helpers' -import { act } from 'react-dom/test-utils' +import { useVisitorData, UseVisitorDataReturn } from '../src' +import { act, render, renderHook } from '@testing-library/react' +import { actWait, createWrapper, wait } from './helpers' import { useEffect, useState } from 'react' import userEvent from '@testing-library/user-event' -import { FingerprintJSPro } from '@fingerprintjs/fingerprintjs-pro-spa' - -const testData = { - visitorId: 'abcdef123456', +import * as agent from '@fingerprint/agent' +import { GetResult } from '@fingerprint/agent' +import { beforeEach, describe, expect, it, vi } from 'vitest' + +const mockGetResult = { + visitor_id: 'kOzFgO0kw2Eivvb14mRL', + event_id: '1765898371879.Sad9kq', + sealed_result: null, + cache_hit: false, + suspect_score: 0.5, +} satisfies GetResult + +const mockGet = vi.fn() +const mockAgent = { + get: mockGet, + collect: vi.fn(), } -const init = jest.fn() -const getVisitorData = jest.fn() - -jest.mock('@fingerprintjs/fingerprintjs-pro-spa', () => { - return { - ...(jest.requireActual('@fingerprintjs/fingerprintjs-pro-spa') as any), - FpjsClient: jest.fn(() => { - return { - init, - getVisitorData, - clearCache: jest.fn(), - } - }), - } -}) + +vi.mock('@fingerprint/agent', { spy: true }) + +const mockStart = vi.mocked(agent.start) describe('useVisitorData', () => { beforeEach(() => { - getVisitorData.mockReset() + vi.resetAllMocks() + + mockStart.mockReturnValue(mockAgent) }) - it('should provide the Fpjs context', async () => { + it('should provide the Fp context', async () => { const wrapper = createWrapper() const { result: { current }, @@ -43,10 +45,10 @@ describe('useVisitorData', () => { }) it('should call getData on mount by default', async () => { - getVisitorData.mockImplementation(() => testData) + mockGet.mockImplementation(() => mockGetResult) const wrapper = createWrapper() - const { result } = renderHook(() => useVisitorData({}, { immediate: true }), { wrapper }) + const { result } = renderHook(() => useVisitorData({ immediate: true }), { wrapper }) expect(result.current).toMatchObject( expect.objectContaining({ isLoading: true, @@ -56,61 +58,90 @@ describe('useVisitorData', () => { await actWait(500) - expect(init).toHaveBeenCalled() - expect(getVisitorData).toHaveBeenCalled() + expect(mockStart).toHaveBeenCalled() + expect(mockGet).toHaveBeenCalled() expect(result.current).toMatchObject( expect.objectContaining({ isLoading: false, - data: testData, + data: mockGetResult, + }) + ) + }) + + it('should avoid duplicate requests if one is already pending', async () => { + mockGet.mockImplementation(async () => { + await wait(250) + return mockGetResult + }) + + const wrapper = createWrapper() + const { result } = renderHook(() => useVisitorData({ immediate: false }), { wrapper }) + expect(result.current).toMatchObject( + expect.objectContaining({ + isLoading: false, + data: undefined, + }) + ) + + await Promise.all([result.current.getData(), result.current.getData()]) + + await actWait(500) + + expect(mockStart).toHaveBeenCalled() + expect(mockGet).toHaveBeenCalledTimes(1) + expect(result.current).toMatchObject( + expect.objectContaining({ + isLoading: false, + data: mockGetResult, }) ) }) it("shouldn't call getData on mount if 'immediate' option is set to false", async () => { - getVisitorData.mockImplementation(() => testData) + mockGet.mockImplementation(() => mockGetResult) const wrapper = createWrapper() - const { rerender } = renderHook(() => useVisitorData({}, { immediate: false }), { wrapper }) + const { rerender } = renderHook(() => useVisitorData({ immediate: false }), { wrapper }) - expect(getVisitorData).not.toHaveBeenCalled() + expect(mockGet).not.toHaveBeenCalled() - await rerender() + rerender() - expect(getVisitorData).not.toHaveBeenCalled() + expect(mockGet).not.toHaveBeenCalled() }) it('should support immediate fetch with cache disabled', async () => { const wrapper = createWrapper() - renderHook(() => useVisitorData({ ignoreCache: true }, { immediate: true }), { wrapper }) + renderHook(() => useVisitorData({ immediate: true }), { wrapper }) await actWait(500) - expect(getVisitorData).toHaveBeenCalledTimes(1) - expect(getVisitorData).toHaveBeenCalledWith({}, true) + expect(mockGet).toHaveBeenCalledTimes(1) + expect(mockGet).toHaveBeenCalledWith({}) }) it('should support overwriting default cache option in getData call', async () => { const wrapper = createWrapper() - const hook = renderHook(() => useVisitorData({ ignoreCache: true }, { immediate: false }), { wrapper }) + const hook = renderHook(() => useVisitorData({ immediate: false }), { + wrapper, + }) await act(async () => { - await hook.result.current.getData({ - ignoreCache: false, - }) + await hook.result.current.getData() }) - expect(getVisitorData).toHaveBeenCalledTimes(1) - expect(getVisitorData).toHaveBeenCalledWith({}, false) + expect(mockGet).toHaveBeenCalledTimes(1) + expect(mockGet).toHaveBeenCalledWith({}) }) it('should re-fetch data when options change if "immediate" is set to true', async () => { const Component = () => { - const [extended, setExtended] = useState(false) - const { data } = useVisitorData({ extendedResult: extended }, { immediate: true }) + const [tag, setTag] = useState(1) + const { data } = useVisitorData({ immediate: true, tag }) return ( <> - +
{JSON.stringify(data)}
) @@ -132,26 +163,25 @@ describe('useVisitorData', () => { await actWait(1000) - expect(getVisitorData).toHaveBeenCalledTimes(2) - expect(getVisitorData).toHaveBeenNthCalledWith(1, { extendedResult: false }, undefined) - expect(getVisitorData).toHaveBeenNthCalledWith(2, { extendedResult: true }, undefined) + expect(mockGet).toHaveBeenCalledTimes(2) + expect(mockGet).toHaveBeenNthCalledWith(1, { tag: 1 }) + expect(mockGet).toHaveBeenNthCalledWith(2, { tag: 2 }) }) - it('should correctly pass errors from SPA library', async () => { - getVisitorData.mockRejectedValue(new Error(FingerprintJSPro.ERROR_CLIENT_TIMEOUT)) + it('should correctly pass errors from agent', async () => { + const ERROR_CLIENT_TIMEOUT = 'timeout' + mockGet.mockRejectedValue(new Error(ERROR_CLIENT_TIMEOUT)) const wrapper = createWrapper() - const hook = renderHook(() => useVisitorData({ ignoreCache: true }, { immediate: false }), { wrapper }) + const hook = renderHook(() => useVisitorData({ immediate: false }), { wrapper }) await act(async () => { - const promise = hook.result.current.getData({ - ignoreCache: false, - }) + const promise = hook.result.current.getData() - await expect(promise).rejects.toThrow(FingerprintJSPro.ERROR_CLIENT_TIMEOUT) + await expect(promise).rejects.toThrow(ERROR_CLIENT_TIMEOUT) }) - expect(hook.result.current.error?.message).toBe(FingerprintJSPro.ERROR_CLIENT_TIMEOUT) + expect(hook.result.current.error?.message).toBe(ERROR_CLIENT_TIMEOUT) }) it('`getVisitorData` `getOptions` should be passed from `getVisitorData` `getOptions`', async () => { @@ -159,24 +189,19 @@ describe('useVisitorData', () => { const wrapper = createWrapper() const hook = renderHook( () => - useVisitorData( - { - linkedId: useVisitorDataId, - tag: { tagA: useVisitorDataId }, - }, - { immediate: false } - ), + useVisitorData({ + linkedId: useVisitorDataId, + tag: { tagA: useVisitorDataId }, + immediate: false, + }), { wrapper } ) await act(async () => { await hook.result.current.getData() }) - expect(getVisitorData).toHaveBeenCalledTimes(1) - expect(getVisitorData).toHaveBeenCalledWith( - { linkedId: useVisitorDataId, tag: { tagA: useVisitorDataId } }, - undefined - ) + expect(mockGet).toHaveBeenCalledTimes(1) + expect(mockGet).toHaveBeenCalledWith({ linkedId: useVisitorDataId, tag: { tagA: useVisitorDataId } }) }) it('`getData` `getOptions` should be more important than `getVisitorData` `getOptions`', async () => { @@ -185,13 +210,11 @@ describe('useVisitorData', () => { const wrapper = createWrapper() const hook = renderHook( () => - useVisitorData( - { - linkedId: useVisitorDataId, - tag: { tagA: useVisitorDataId }, - }, - { immediate: false } - ), + useVisitorData({ + linkedId: useVisitorDataId, + tag: { tagA: useVisitorDataId }, + immediate: false, + }), { wrapper } ) @@ -201,8 +224,8 @@ describe('useVisitorData', () => { tag: { tagA: getDataId }, }) }) - expect(getVisitorData).toHaveBeenCalledTimes(1) - expect(getVisitorData).toHaveBeenCalledWith({ linkedId: getDataId, tag: { tagA: getDataId } }, undefined) + expect(mockGet).toHaveBeenCalledTimes(1) + expect(mockGet).toHaveBeenCalledWith({ linkedId: getDataId, tag: { tagA: getDataId } }) }) it('`getData` `getOptions` should extend `getVisitorData` `getOptions`', async () => { @@ -211,13 +234,11 @@ describe('useVisitorData', () => { const wrapper = createWrapper() const hook = renderHook( () => - useVisitorData( - { - linkedId: useVisitorDataId, - tag: { tagA: useVisitorDataId }, - }, - { immediate: false } - ), + useVisitorData({ + linkedId: useVisitorDataId, + tag: { tagA: useVisitorDataId }, + immediate: false, + }), { wrapper } ) @@ -226,8 +247,8 @@ describe('useVisitorData', () => { linkedId: getDataId, }) }) - expect(getVisitorData).toHaveBeenCalledTimes(1) - expect(getVisitorData).toHaveBeenCalledWith({ linkedId: getDataId, tag: { tagA: useVisitorDataId } }, undefined) + expect(mockGet).toHaveBeenCalledTimes(1) + expect(mockGet).toHaveBeenCalledWith({ linkedId: getDataId, tag: { tagA: useVisitorDataId } }) }) it('getData should only change if the getOptions semantically changes', async () => { @@ -242,11 +263,13 @@ describe('useVisitorData', () => { // More information about this pattern can be found at: // https://react.dev/reference/react/useState#storing-information-from-previous-renders - const getDataValues: VisitorQueryContext['getData'][] = [] + const getDataValues: UseVisitorDataReturn['getData'][] = [] let effectCount = 0 const Component = () => { const [count, setCount] = useState(0) - const { data, getData } = useVisitorData(count <= 1 ? { timeout: 1000 } : { timeout: 2000 }, { immediate: false }) + const { data, getData } = useVisitorData( + count <= 1 ? { timeout: 1000, immediate: false } : { timeout: 2000, immediate: false } + ) useEffect(() => { effectCount++ diff --git a/__tests__/with-environment.preact.test.tsx b/__tests__/with-environment.preact.test.tsx index 7bde8a12..c030424c 100644 --- a/__tests__/with-environment.preact.test.tsx +++ b/__tests__/with-environment.preact.test.tsx @@ -1,21 +1,23 @@ import { render as preactRender } from '@testing-library/preact' import { h } from 'preact' +import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest' +import * as compat from 'preact/compat' describe('WithEnvironment', () => { describe('when running within Preact', () => { beforeEach(() => { - jest.doMock('react-dom', () => require('preact/compat')) - jest.doMock('react', () => require('preact/compat')) + vi.doMock('react', () => compat) + vi.doMock('react-dom', () => compat) }) afterEach(() => { - jest.resetModules() + vi.resetModules() }) - - it('should detect env as "preact"', () => { - const { WithEnvironment } = require('../src/components/with-environment') + it('should detect env as "preact"', async () => { + const { WithEnvironment } = await import('../src/components/with-environment') const PrintEnv = (props: any) => h('div', null, props?.env?.name) + // @ts-ignore const { container } = preactRender(h(WithEnvironment, null, h(PrintEnv, null))) expect(container.innerHTML).toContain('preact') diff --git a/__tests__/with-environment.test.tsx b/__tests__/with-environment.test.tsx index 427d0254..f8352c86 100644 --- a/__tests__/with-environment.test.tsx +++ b/__tests__/with-environment.test.tsx @@ -4,10 +4,11 @@ import { WithEnvironment } from '../src/components/with-environment' import { Link, MemoryRouter, Route, Routes } from 'react-router-dom' import userEvent from '@testing-library/user-event' import { actWait } from './helpers' +import { describe, it, expect, vi } from 'vitest' describe('WithEnvironment', () => { it('enhances provided element with `env` prop', () => { - const Mock = jest.fn(() =>
foo
) as FunctionComponent + const Mock = vi.fn(() =>
foo
) as FunctionComponent render( diff --git a/contributing.md b/contributing.md index 01139fc1..27d99486 100644 --- a/contributing.md +++ b/contributing.md @@ -1,4 +1,4 @@ -# Contributing to FingerprintJS Pro React integration +# Contributing to Fingerprint React integration ## Working with code @@ -16,9 +16,7 @@ There are 4 demo pages for this integration: 4. In `/examples/preact` folder. It is a demo built with Preact. You can find more info about configuration and starting demo in the [readme](examples/preact/README.md). 5. In `/examples/webpack-based` folder. It is a simple demo built with raw webpack. -If you want to test integration with [fingerprintjs-pro-spa](https://github.com/fingerprintjs/fingerprintjs-pro-spa), just [link the package](https://pnpm.io/cli/link#replace-an-installed-package-with-a-local-version-of-it) with the `pnpm link `. - -❗ Build projects before testing integration. First build `fingerprintjs-pro-spa`, then `fingerprintjs-pro-react`, and then start spa example app. +❗ Build projects before testing integration. First build the `@fingerprint/react` package, and then start any of the example apps. ### How to build @@ -44,7 +42,7 @@ pnpm lint:fix ### How to test -Tests are located in `__tests__` folder and run by [jest](https://jestjs.io/) in [jsdom](https://github.com/jsdom/jsdom) environment. +Tests are located in `__tests__` folder and run by [vitest](https://vitest.dev/) in [jsdom](https://github.com/jsdom/jsdom) environment. To run tests you can use IDE instruments or just run: diff --git a/examples/create-react-app/package.json b/examples/create-react-app/package.json index a0944e23..c9ffb619 100644 --- a/examples/create-react-app/package.json +++ b/examples/create-react-app/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { - "@fingerprintjs/fingerprintjs-pro-react": "workspace:*", + "@fingerprint/react": "workspace:*", "react-router-dom": "^6.22.3", "react-scripts": "5.0.1" }, diff --git a/examples/create-react-app/src/in_memory_cache/InMemoryCache.tsx b/examples/create-react-app/src/in_memory_cache/InMemoryCache.tsx index d9ba36e1..0e552a59 100644 --- a/examples/create-react-app/src/in_memory_cache/InMemoryCache.tsx +++ b/examples/create-react-app/src/in_memory_cache/InMemoryCache.tsx @@ -1,17 +1,11 @@ -import { FpjsProvider } from '@fingerprintjs/fingerprintjs-pro-react' -import { useState } from 'react' +import { FingerprintProvider } from '@fingerprint/react' import { Outlet } from 'react-router-dom' import { FPJS_API_KEY } from '../shared/utils/env' import { Nav } from '../shared/components/Nav' -import { CacheLocation, FingerprintJSPro } from '@fingerprintjs/fingerprintjs-pro-spa' function InMemoryCache() { - const [loadOptions] = useState({ - apiKey: FPJS_API_KEY, - }) - return ( - +

Solution with an in-memory cache

@@ -22,7 +16,7 @@ function InMemoryCache() {
-
+
) } diff --git a/examples/create-react-app/src/local_storage_cache/LocalStorageCache.tsx b/examples/create-react-app/src/local_storage_cache/LocalStorageCache.tsx index 9e625d61..0524e684 100644 --- a/examples/create-react-app/src/local_storage_cache/LocalStorageCache.tsx +++ b/examples/create-react-app/src/local_storage_cache/LocalStorageCache.tsx @@ -1,21 +1,17 @@ -import { useState } from 'react' import { Outlet } from 'react-router-dom' import { Nav } from '../shared/components/Nav' import { FPJS_API_KEY } from '../shared/utils/env' -import { FpjsProvider } from '@fingerprintjs/fingerprintjs-pro-react' -import { CacheLocation, FingerprintJSPro } from '@fingerprintjs/fingerprintjs-pro-spa' +import { FingerprintProvider } from '@fingerprint/react' function LocalStorageCache() { - const [loadOptions] = useState({ - apiKey: FPJS_API_KEY, - }) - return ( -
@@ -25,7 +21,7 @@ function LocalStorageCache() {
-
+ ) } diff --git a/examples/create-react-app/src/no_cache/WithoutCache.tsx b/examples/create-react-app/src/no_cache/WithoutCache.tsx index eeee4260..829e8e2e 100644 --- a/examples/create-react-app/src/no_cache/WithoutCache.tsx +++ b/examples/create-react-app/src/no_cache/WithoutCache.tsx @@ -1,17 +1,11 @@ -import { FpjsProvider } from '@fingerprintjs/fingerprintjs-pro-react' -import { useState } from 'react' +import { FingerprintProvider } from '@fingerprint/react' import { Outlet } from 'react-router-dom' import { Nav } from '../shared/components/Nav' import { FPJS_API_KEY } from '../shared/utils/env' -import { CacheLocation, FingerprintJSPro } from '@fingerprintjs/fingerprintjs-pro-spa' function WithoutCache() { - const [loadOptions] = useState({ - apiKey: FPJS_API_KEY, - }) - return ( - +

Solution without cache

@@ -20,7 +14,7 @@ function WithoutCache() {
-
+ ) } diff --git a/examples/create-react-app/src/session_storage_cache/SessionStorageCache.tsx b/examples/create-react-app/src/session_storage_cache/SessionStorageCache.tsx index 4d66dc2b..f76addca 100644 --- a/examples/create-react-app/src/session_storage_cache/SessionStorageCache.tsx +++ b/examples/create-react-app/src/session_storage_cache/SessionStorageCache.tsx @@ -1,17 +1,11 @@ -import { FpjsProvider } from '@fingerprintjs/fingerprintjs-pro-react' -import { useState } from 'react' +import { FingerprintProvider } from '@fingerprint/react' import { Outlet } from 'react-router-dom' import { Nav } from '../shared/components/Nav' import { FPJS_API_KEY } from '../shared/utils/env' -import { CacheLocation, FingerprintJSPro } from '@fingerprintjs/fingerprintjs-pro-spa' function SessionStorageCache() { - const [loadOptions] = useState({ - apiKey: FPJS_API_KEY, - }) - return ( - +

Solution with a custom implementation of a session storage cache

@@ -20,7 +14,7 @@ function SessionStorageCache() {
-
+ ) } diff --git a/examples/create-react-app/src/shared/components/VisitorDataPresenter.tsx b/examples/create-react-app/src/shared/components/VisitorDataPresenter.tsx index ae4ff695..7737d200 100644 --- a/examples/create-react-app/src/shared/components/VisitorDataPresenter.tsx +++ b/examples/create-react-app/src/shared/components/VisitorDataPresenter.tsx @@ -1,6 +1,14 @@ -import { VisitorData } from '@fingerprintjs/fingerprintjs-pro-spa' +import { Fingerprint } from '@fingerprint/react' -function VisitorDataPresenter({ data, isLoading, error }: { data?: VisitorData; isLoading?: boolean; error?: Error }) { +function VisitorDataPresenter({ + data, + isLoading, + error, +}: { + data?: Fingerprint.GetResult + isLoading?: boolean + error?: Error +}) { if (error) { return

An error occurred: {error.message}

} @@ -8,7 +16,7 @@ function VisitorDataPresenter({ data, isLoading, error }: { data?: VisitorData; return (

- Visitor ID: {isLoading ? 'Loading...' : data ? data.visitorId : 'not established yet'} + Visitor ID: {isLoading ? 'Loading...' : data ? data.visitor_id : 'not established yet'}

{data && ( <> diff --git a/examples/create-react-app/src/shared/pages/HomePage.tsx b/examples/create-react-app/src/shared/pages/HomePage.tsx index 9fdaad48..15ccd0e1 100644 --- a/examples/create-react-app/src/shared/pages/HomePage.tsx +++ b/examples/create-react-app/src/shared/pages/HomePage.tsx @@ -1,10 +1,13 @@ import Toggler from '../components/Toggler' import VisitorDataPresenter from '../components/VisitorDataPresenter' -import { useContext } from 'react' -import { FpjsContext, useVisitorData } from '@fingerprintjs/fingerprintjs-pro-react' +import { useCallback } from 'react' +import { useVisitorData } from '@fingerprint/react' function HomePage() { - const { clearCache } = useContext(FpjsContext) + const clearCache = useCallback(() => { + localStorage.clear() + sessionStorage.clear() + }, []) return (
@@ -24,7 +27,7 @@ function HomePage() { } function VisitorDataComponent() { - const { data, isLoading, error } = useVisitorData({ extendedResult: true }) + const { data, isLoading, error } = useVisitorData() return } diff --git a/examples/create-react-app/src/shared/pages/SignInPage.tsx b/examples/create-react-app/src/shared/pages/SignInPage.tsx index d706e253..e62f7092 100644 --- a/examples/create-react-app/src/shared/pages/SignInPage.tsx +++ b/examples/create-react-app/src/shared/pages/SignInPage.tsx @@ -1,5 +1,5 @@ import { useState } from 'react' -import { useVisitorData } from '@fingerprintjs/fingerprintjs-pro-react' +import { useVisitorData } from '@fingerprint/react' import VisitorDataPresenter from '../components/VisitorDataPresenter' function SignInPage() { @@ -7,13 +7,7 @@ function SignInPage() { const [password, setPassword] = useState('') const [tag, setTag] = useState('') - const [ignoreCache, setIgnoreCache] = useState(false) - const [extendedResult, setExtendedResult] = useState(false) - - const { getData, data, isLoading, error } = useVisitorData( - { extendedResult, tag, linkedId: login }, - { immediate: false } - ) + const { getData, data, isLoading, error } = useVisitorData({ tag, linkedId: login, immediate: false }) return (
@@ -27,34 +21,11 @@ function SignInPage() {

Try submitting the form with any values and notice that a fingerprint will be calculated.

-
- -
-
- - will be used as extended_result param for the request -
{ e.preventDefault() - getData({ ignoreCache }).then((data) => { + getData().then((data) => { if (data) { // do something with the visitor data // for example, append visitor data to the form data to send to your server diff --git a/examples/next-appDir/app/HomePage.tsx b/examples/next-appDir/app/HomePage.tsx index f8f22fe3..399424c3 100644 --- a/examples/next-appDir/app/HomePage.tsx +++ b/examples/next-appDir/app/HomePage.tsx @@ -1,19 +1,13 @@ 'use client' import styles from '../styles/Home.module.css' -import { useVisitorData } from '@fingerprintjs/fingerprintjs-pro-react' -import { useState } from 'react' +import { useVisitorData } from '@fingerprint/react' const HomePage = () => { - const [extendedResult, updateExtendedResult] = useState(false) - const { isLoading, error, data, getData } = useVisitorData({ extendedResult }, { immediate: true }) + const { isLoading, error, data, getData } = useVisitorData({ immediate: true }) const reloadData = () => { - getData({ ignoreCache: true }) - } - - const onChangeExtendedResult = (e: React.ChangeEvent) => { - updateExtendedResult(e.target.checked) + getData({}) } return ( @@ -33,13 +27,9 @@ const HomePage = () => { -

- VisitorId: {isLoading ? 'Loading...' : data?.visitorId} + VisitorId: {isLoading ? 'Loading...' : data?.visitor_id}

Full visitor data:

{error ? error.message : JSON.stringify(data, null, 2)}
diff --git a/examples/next-appDir/app/layout.tsx b/examples/next-appDir/app/layout.tsx index 844552c0..2c913c8a 100644 --- a/examples/next-appDir/app/layout.tsx +++ b/examples/next-appDir/app/layout.tsx @@ -1,5 +1,5 @@ import '../styles/globals.css' -import { FpjsProvider } from '@fingerprintjs/fingerprintjs-pro-react' +import { FingerprintProvider } from '@fingerprint/react' import { PropsWithChildren } from 'react' const fpjsPublicApiKey = process.env.NEXT_PUBLIC_FPJS_PUBLIC_API_KEY as string @@ -8,13 +8,7 @@ function RootLayout({ children }: PropsWithChildren) { return ( - - {children} - + {children} ) diff --git a/examples/next-appDir/next-env.d.ts b/examples/next-appDir/next-env.d.ts index 4f11a03d..40c3d680 100644 --- a/examples/next-appDir/next-env.d.ts +++ b/examples/next-appDir/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/examples/next-appDir/package.json b/examples/next-appDir/package.json index a5cc7fda..ce23f84e 100644 --- a/examples/next-appDir/package.json +++ b/examples/next-appDir/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@fingerprintjs/fingerprintjs-pro-react": "workspace:*", + "@fingerprint/react": "workspace:*", "next": "14.2.32" }, "peerDependencies": { diff --git a/examples/next/next-env.d.ts b/examples/next/next-env.d.ts index 4f11a03d..a4a7b3f5 100644 --- a/examples/next/next-env.d.ts +++ b/examples/next/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/pages/building-your-application/configuring/typescript for more information. diff --git a/examples/next/package.json b/examples/next/package.json index c7e79a3d..3d7d35ac 100644 --- a/examples/next/package.json +++ b/examples/next/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@fingerprintjs/fingerprintjs-pro-react": "workspace:*", + "@fingerprint/react": "workspace:*", "next": "14.2.32" }, "peerDependencies": { diff --git a/examples/next/pages/_app.tsx b/examples/next/pages/_app.tsx index f8ee6a46..f7aa0eaa 100644 --- a/examples/next/pages/_app.tsx +++ b/examples/next/pages/_app.tsx @@ -1,18 +1,14 @@ import '../styles/globals.css' import type { AppProps } from 'next/app' -import { FpjsProvider } from '@fingerprintjs/fingerprintjs-pro-react' +import { FingerprintProvider } from '@fingerprint/react' const fpjsPublicApiKey = process.env.NEXT_PUBLIC_FPJS_PUBLIC_API_KEY as string function MyApp({ Component, pageProps }: AppProps) { return ( - + - + ) } diff --git a/examples/next/pages/index.tsx b/examples/next/pages/index.tsx index 65cd509a..53db6973 100644 --- a/examples/next/pages/index.tsx +++ b/examples/next/pages/index.tsx @@ -1,19 +1,13 @@ import type { NextPage } from 'next' import Head from 'next/head' import styles from '../styles/Home.module.css' -import { useVisitorData } from '@fingerprintjs/fingerprintjs-pro-react' -import { useState } from 'react' +import { useVisitorData } from '@fingerprint/react' const Home: NextPage = () => { - const [extendedResult, updateExtendedResult] = useState(false) - const { isLoading, error, data, getData } = useVisitorData({ extendedResult }, { immediate: true }) + const { isLoading, error, data } = useVisitorData({ immediate: true }) const reloadData = () => { - getData({ ignoreCache: true }) - } - - const onChangeExtendedResult = (e: React.ChangeEvent) => { - updateExtendedResult(e.target.checked) + //getData({ ignoreCache: true }) } return ( @@ -39,13 +33,9 @@ const Home: NextPage = () => { -

- VisitorId: {isLoading ? 'Loading...' : data?.visitorId} + VisitorId: {isLoading ? 'Loading...' : data?.visitor_id}

Full visitor data:

{error ? error.message : JSON.stringify(data, null, 2)}
diff --git a/examples/preact/.env.example b/examples/preact/.env.example index fd184689..8961791d 100644 --- a/examples/preact/.env.example +++ b/examples/preact/.env.example @@ -1 +1 @@ -PREACT_APP_FPJS_PUBLIC_API_KEY= \ No newline at end of file +PREACT_APP_FPJS_PUBLIC_API_KEY= \ No newline at end of file diff --git a/examples/preact/package.json b/examples/preact/package.json index 09fad122..83991956 100644 --- a/examples/preact/package.json +++ b/examples/preact/package.json @@ -10,7 +10,7 @@ "lint": "eslint 'src/**/*.{js,jsx,ts,tsx}'" }, "dependencies": { - "@fingerprintjs/fingerprintjs-pro-react": "workspace:*", + "@fingerprint/react": "workspace:*", "preact": "10.19.6", "preact-render-to-string": "^6.4.0" }, diff --git a/examples/preact/src/components/app.tsx b/examples/preact/src/components/app.tsx index a9c04474..7c0c4485 100644 --- a/examples/preact/src/components/app.tsx +++ b/examples/preact/src/components/app.tsx @@ -1,18 +1,11 @@ import { FunctionalComponent } from 'preact' -import { useVisitorData } from '@fingerprintjs/fingerprintjs-pro-react' -import { useState } from 'preact/hooks' -import { JSX } from 'preact/compat' +import { useVisitorData } from '@fingerprint/react' const App: FunctionalComponent = () => { - const [extendedResult, updateExtendedResult] = useState(false) - const { isLoading, error, data, getData } = useVisitorData({ extendedResult }, { immediate: true }) + const { isLoading, error, data, getData } = useVisitorData({ immediate: true }) const reloadData = (): void => { - getData({ ignoreCache: true }) - } - - const onChangeExtendedResult = (e: JSX.TargetedEvent): void => { - updateExtendedResult((e.target as HTMLInputElement).checked) + getData() } return ( @@ -32,13 +25,9 @@ const App: FunctionalComponent = () => { -

- VisitorId: {isLoading ? 'Loading...' : data?.visitorId} + VisitorId: {isLoading ? 'Loading...' : data?.visitor_id}

Full visitor data:

{error ? error.message : JSON.stringify(data, null, 2)}
diff --git a/examples/preact/src/index.tsx b/examples/preact/src/index.tsx index a8289642..ce1f5c1a 100644 --- a/examples/preact/src/index.tsx +++ b/examples/preact/src/index.tsx @@ -1,14 +1,14 @@ import { FunctionalComponent } from 'preact' import './style/index.css' import App from './components/app' -import { FpjsProvider } from '@fingerprintjs/fingerprintjs-pro-react' +import { FingerprintProvider } from '@fingerprint/react' const WrappedApp: FunctionalComponent = () => { const apiKey = process.env.PREACT_APP_FPJS_PUBLIC_API_KEY as string return ( - + - + ) } diff --git a/examples/vite/.env.example b/examples/vite/.env.example new file mode 100644 index 00000000..acd0b4e5 --- /dev/null +++ b/examples/vite/.env.example @@ -0,0 +1 @@ +VITE_FPJS_PUBLIC_API_KEY= diff --git a/examples/vite/.gitignore b/examples/vite/.gitignore new file mode 100644 index 00000000..438657a9 --- /dev/null +++ b/examples/vite/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local +.env + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/examples/vite/README.md b/examples/vite/README.md new file mode 100644 index 00000000..d2e77611 --- /dev/null +++ b/examples/vite/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/examples/vite/eslint.config.js b/examples/vite/eslint.config.js new file mode 100644 index 00000000..5e6b472f --- /dev/null +++ b/examples/vite/eslint.config.js @@ -0,0 +1,23 @@ +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' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/examples/vite/index.html b/examples/vite/index.html new file mode 100644 index 00000000..5ec37c5f --- /dev/null +++ b/examples/vite/index.html @@ -0,0 +1,13 @@ + + + + + + + vite + + +
+ + + diff --git a/examples/vite/package.json b/examples/vite/package.json new file mode 100644 index 00000000..de899391 --- /dev/null +++ b/examples/vite/package.json @@ -0,0 +1,31 @@ +{ + "name": "vite", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@fingerprint/react": "workspace:*", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } +} diff --git a/examples/vite/public/vite.svg b/examples/vite/public/vite.svg new file mode 100644 index 00000000..e7b8dfb1 --- /dev/null +++ b/examples/vite/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/vite/src/App.tsx b/examples/vite/src/App.tsx new file mode 100644 index 00000000..5b9b35e6 --- /dev/null +++ b/examples/vite/src/App.tsx @@ -0,0 +1,19 @@ +import { useVisitorData } from '@fingerprint/react' + +function App() { + const { isLoading, error, isFetched, data } = useVisitorData() + + if (isLoading) { + return
Loading...
+ } + if (error) { + return
An error occurred: {error.message}
+ } + + if (isFetched) { + return
Welcome {data.visitor_id}!
+ } + return null +} + +export default App diff --git a/examples/vite/src/index.css b/examples/vite/src/index.css new file mode 100644 index 00000000..08a3ac9e --- /dev/null +++ b/examples/vite/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: 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/examples/vite/src/main.tsx b/examples/vite/src/main.tsx new file mode 100644 index 00000000..5d5114bc --- /dev/null +++ b/examples/vite/src/main.tsx @@ -0,0 +1,15 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' +import { FingerprintProvider } from '@fingerprint/react' + +const apiKey = import.meta.env.VITE_FPJS_PUBLIC_API_KEY + +createRoot(document.getElementById('root')!).render( + + + + + +) diff --git a/examples/vite/tsconfig.app.json b/examples/vite/tsconfig.app.json new file mode 100644 index 00000000..a9b5a59c --- /dev/null +++ b/examples/vite/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/examples/vite/tsconfig.json b/examples/vite/tsconfig.json new file mode 100644 index 00000000..1ffef600 --- /dev/null +++ b/examples/vite/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/examples/vite/tsconfig.node.json b/examples/vite/tsconfig.node.json new file mode 100644 index 00000000..8a67f62f --- /dev/null +++ b/examples/vite/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/examples/vite/vite.config.ts b/examples/vite/vite.config.ts new file mode 100644 index 00000000..8b0f57b9 --- /dev/null +++ b/examples/vite/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/examples/webpack-based/.env.example b/examples/webpack-based/.env.example index f14dc59e..994ffaea 100644 --- a/examples/webpack-based/.env.example +++ b/examples/webpack-based/.env.example @@ -1 +1 @@ -REACT_APP_FPJS_PUBLIC_API_KEY= +REACT_APP_FPJS_PUBLIC_API_KEY= diff --git a/examples/webpack-based/package.json b/examples/webpack-based/package.json index d38d60ed..cb9b429f 100644 --- a/examples/webpack-based/package.json +++ b/examples/webpack-based/package.json @@ -19,7 +19,7 @@ "webpack-dev-server": "^5.0.3" }, "dependencies": { - "@fingerprintjs/fingerprintjs-pro-react": "workspace:*" + "@fingerprint/react": "workspace:*" }, "peerDependencies": { "react": "*", diff --git a/examples/webpack-based/src/App.js b/examples/webpack-based/src/App.js index 3a40dbeb..b437892f 100644 --- a/examples/webpack-based/src/App.js +++ b/examples/webpack-based/src/App.js @@ -1,5 +1,4 @@ -import React from 'react' -import { useVisitorData } from '@fingerprintjs/fingerprintjs-pro-react' +import { useVisitorData } from '@fingerprint/react' function App() { const { isLoading, error, data } = useVisitorData() @@ -12,8 +11,7 @@ function App() { } if (data) { - // perform some logic based on the visitor data - return
Welcome {data.visitorFound ? `back ${data.visitorId}` : ''}!
+ return
Welcome {data.visitor_id}!
} return null } diff --git a/examples/webpack-based/src/index.js b/examples/webpack-based/src/index.js index a6810563..3ba95769 100644 --- a/examples/webpack-based/src/index.js +++ b/examples/webpack-based/src/index.js @@ -1,6 +1,6 @@ import React from 'react' import { createRoot } from 'react-dom/client' -import { FpjsProvider } from '@fingerprintjs/fingerprintjs-pro-react' +import { FingerprintProvider } from '@fingerprint/react' import App from './App' const rootElement = document.getElementById('root') @@ -9,12 +9,8 @@ const apiKey = process.env.REACT_APP_FPJS_PUBLIC_API_KEY root.render( - + - + ) diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 495b28f8..00000000 --- a/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'jsdom', - testRegex: '/__tests__/.+test.tsx?$', - collectCoverageFrom: ['./src/**/**.{ts,tsx}'], - coverageReporters: ['lcov', 'json-summary', ['text', { file: 'coverage.txt', path: './' }]], -} diff --git a/package.json b/package.json index 9102a1a4..e0a44cc4 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,18 @@ { - "name": "@fingerprintjs/fingerprintjs-pro-react", - "version": "2.7.1", + "name": "@fingerprint/react", + "version": "3.0.0-test.2", "description": "FingerprintJS Pro React SDK", - "main": "dist/fp-pro-react.cjs.js", - "module": "dist/fp-pro-react.esm.js", - "types": "dist/fp-pro-react.d.ts", + "main": "dist/fingerprint-react.js", + "module": "dist/fingerprint-react.mjs", + "types": "dist/fingerprint-react.d.ts", + "publishConfig": { + "access": "public" + }, "exports": { ".": { - "types": "./dist/fp-pro-react.d.ts", - "import": "./dist/fp-pro-react.esm.js", - "require": "./dist/fp-pro-react.cjs.js", - "node": "./dist/fp-pro-react.esm.js" + "types": "./dist/fingerprint-react.d.ts", + "import": "./dist/fingerprint-react.mjs", + "require": "./dist/fingerprint-react.js" } }, "keywords": [ @@ -28,14 +30,15 @@ "scripts": { "postinstall": "node scripts/detect-env.js", "prepare": "husky install", - "watch": "rollup -c rollup.config.js -w", - "build": "rimraf dist && rollup -c rollup.config.js --bundleConfigAsCjs", + "watch": "vite build --watch", + "build": "vite build", "start:spa": "pnpm start --prefix=examples/spa", "lint": "eslint --ext .js,.ts,.tsx --ignore-path .gitignore --max-warnings 0 .", "lint:fix": "pnpm lint --fix", - "test": "jest", - "test:coverage": "jest --coverage", - "test:dts": "tsc --noEmit --isolatedModules dist/fp-pro-react.d.ts", + "test": "vitest", + "test:coverage": "vitest run --coverage", + "test:coverage:diff": "vitest run --coverage --reporter json --outputFile.json=report.json", + "test:dts": "tsc --noEmit --isolatedModules dist/fingerprint-react.d.ts", "docs": "typedoc src/index.ts --out docs" }, "files": [ @@ -53,7 +56,7 @@ }, "homepage": "https://github.com/fingerprintjs/fingerprintjs-pro-react#readme", "dependencies": { - "@fingerprintjs/fingerprintjs-pro-spa": "^1.3.3", + "@fingerprint/agent": "^4.0.0", "fast-deep-equal": "3.1.3" }, "devDependencies": { @@ -63,15 +66,13 @@ "@fingerprintjs/eslint-config-dx-team": "^0.1.0", "@fingerprintjs/prettier-config-dx-team": "^0.2.0", "@fingerprintjs/tsconfig-dx-team": "^0.0.2", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-typescript": "^11.1.6", - "@testing-library/preact": "^3.2.3", - "@testing-library/react": "^14.2.1", - "@testing-library/user-event": "^14.5.2", - "@types/jest": "^29.5.12", + "@testing-library/preact": "^3.2.4", + "@testing-library/react": "^16.3.2", + "@testing-library/user-event": "^14.6.1", "@types/node": "^20.11.28", "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", + "@vitest/coverage-istanbul": "^4.0.18", "commitizen": "^4.3.0", "cz-conventional-changelog": "^3.3.0", "eslint": "8.57.0", @@ -80,23 +81,20 @@ "eslint-plugin-react": "7.34.0", "eslint-plugin-react-hooks": "^4.6.0", "husky": "^9.0.11", - "jest": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", "lint-staged": "^15.2.2", "preact": "^10.19.6", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.22.3", "rimraf": "^5.0.5", - "rollup": "^4.43.0", "rollup-plugin-banner2": "^1.3.1", - "rollup-plugin-dts": "^6.2.1", - "rollup-plugin-license": "^3.6.0", - "rollup-plugin-peer-deps-external": "^2.2.4", - "ts-jest": "^29.1.2", "tslib": "^2.6.2", "typedoc": "^0.25.12", - "typescript": "^5.4.2" + "typescript": "^5.4.2", + "vite": "^7.3.0", + "vite-plugin-banner": "^0.8.1", + "vite-plugin-dts": "^4.5.4", + "vitest": "^4.0.18" }, "lint-staged": { "*.ts": "pnpm lint:fix", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b172cc54..02621474 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,9 @@ importers: .: dependencies: - '@fingerprintjs/fingerprintjs-pro-spa': - specifier: ^1.3.3 - version: 1.3.3 + '@fingerprint/agent': + specifier: ^4.0.0 + version: 4.0.0 fast-deep-equal: specifier: 3.1.3 version: 3.1.3 @@ -33,24 +33,15 @@ importers: '@fingerprintjs/tsconfig-dx-team': specifier: ^0.0.2 version: 0.0.2 - '@rollup/plugin-json': - specifier: ^6.1.0 - version: 6.1.0(rollup@4.43.0) - '@rollup/plugin-typescript': - specifier: ^11.1.6 - version: 11.1.6(rollup@4.43.0)(tslib@2.6.2)(typescript@5.4.2) '@testing-library/preact': - specifier: ^3.2.3 - version: 3.2.3(preact@10.19.6) + specifier: ^3.2.4 + version: 3.2.4(preact@10.19.6) '@testing-library/react': - specifier: ^14.2.1 - version: 14.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: ^16.3.2 + version: 16.3.2(@testing-library/dom@9.3.4)(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@testing-library/user-event': - specifier: ^14.5.2 - version: 14.5.2(@testing-library/dom@9.3.4) - '@types/jest': - specifier: ^29.5.12 - version: 29.5.12 + specifier: ^14.6.1 + version: 14.6.1(@testing-library/dom@9.3.4) '@types/node': specifier: ^20.11.28 version: 20.11.28 @@ -60,6 +51,9 @@ importers: '@types/react-dom': specifier: ^18.2.22 version: 18.2.22 + '@vitest/coverage-istanbul': + specifier: ^4.0.18 + version: 4.0.18(vitest@4.0.18(@types/node@20.11.28)(jiti@1.21.0)(jsdom@16.7.0)(terser@5.43.1)) commitizen: specifier: ^4.3.0 version: 4.3.0(@types/node@20.11.28)(typescript@5.4.2) @@ -74,7 +68,7 @@ importers: version: 14.1.3(eslint@8.57.0)(typescript@5.4.2) eslint-config-preact: specifier: ^1.3.0 - version: 1.3.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2) + version: 1.3.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2) eslint-plugin-react: specifier: 7.34.0 version: 7.34.0(eslint@8.57.0) @@ -84,12 +78,6 @@ importers: husky: specifier: ^9.0.11 version: 9.0.11 - jest: - specifier: ^27.5.1 - version: 27.5.1 - jest-environment-jsdom: - specifier: ^27.5.1 - version: 27.5.1 lint-staged: specifier: ^15.2.2 version: 15.2.2 @@ -108,24 +96,9 @@ importers: rimraf: specifier: ^5.0.5 version: 5.0.5 - rollup: - specifier: ^4.43.0 - version: 4.43.0 rollup-plugin-banner2: specifier: ^1.3.1 version: 1.3.1 - rollup-plugin-dts: - specifier: ^6.2.1 - version: 6.2.1(rollup@4.43.0)(typescript@5.4.2) - rollup-plugin-license: - specifier: ^3.6.0 - version: 3.6.0(rollup@4.43.0) - rollup-plugin-peer-deps-external: - specifier: ^2.2.4 - version: 2.2.4(rollup@4.43.0) - ts-jest: - specifier: ^29.1.2 - version: 29.1.2(@babel/core@7.24.0)(@jest/types@29.6.3)(jest@27.5.1)(typescript@5.4.2) tslib: specifier: ^2.6.2 version: 2.6.2 @@ -135,10 +108,22 @@ importers: typescript: specifier: ^5.4.2 version: 5.4.2 + vite: + specifier: ^7.3.0 + version: 7.3.0(@types/node@20.11.28)(jiti@1.21.0)(terser@5.43.1) + vite-plugin-banner: + specifier: ^0.8.1 + version: 0.8.1 + vite-plugin-dts: + specifier: ^4.5.4 + version: 4.5.4(@types/node@20.11.28)(rollup@4.43.0)(typescript@5.4.2)(vite@7.3.0(@types/node@20.11.28)(jiti@1.21.0)(terser@5.43.1)) + vitest: + specifier: ^4.0.18 + version: 4.0.18(@types/node@20.11.28)(jiti@1.21.0)(jsdom@16.7.0)(terser@5.43.1) examples/create-react-app: dependencies: - '@fingerprintjs/fingerprintjs-pro-react': + '@fingerprint/react': specifier: workspace:* version: link:../.. react: @@ -152,14 +137,14 @@ importers: version: 6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-scripts: specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(@types/babel__core@7.20.5)(@types/webpack@4.41.38)(eslint@8.57.0)(react@18.2.0)(type-fest@3.13.1)(typescript@5.4.2) + version: 5.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(@types/babel__core@7.20.5)(@types/webpack@4.41.38)(eslint@9.39.2(jiti@1.21.0))(react@18.2.0)(type-fest@3.13.1)(typescript@5.4.2) typescript: specifier: '*' version: 5.4.2 examples/next: dependencies: - '@fingerprintjs/fingerprintjs-pro-react': + '@fingerprint/react': specifier: workspace:* version: link:../.. '@types/node': @@ -186,7 +171,7 @@ importers: examples/next-appDir: dependencies: - '@fingerprintjs/fingerprintjs-pro-react': + '@fingerprint/react': specifier: workspace:* version: link:../.. '@types/node': @@ -213,21 +198,21 @@ importers: examples/preact: dependencies: - '@fingerprintjs/fingerprintjs-pro-react': + '@fingerprint/react': specifier: workspace:* version: link:../.. '@typescript-eslint/eslint-plugin': specifier: '*' - version: 7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2) + version: 7.2.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) '@typescript-eslint/parser': specifier: '*' - version: 7.2.0(eslint@8.57.0)(typescript@5.4.2) + version: 7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) eslint: specifier: '*' - version: 8.57.0 + version: 9.39.2(jiti@1.21.0) eslint-config-preact: specifier: '*' - version: 1.3.0(@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2) + version: 1.3.0(@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) preact: specifier: 10.19.6 version: 10.19.6 @@ -236,21 +221,70 @@ importers: version: 6.4.0(preact@10.19.6) typescript: specifier: '*' - version: 5.4.2 + version: 5.9.3 devDependencies: dotenv: specifier: ^16.4.5 version: 16.4.5 preact-cli: specifier: ^3.5.1 - version: 3.5.1(@types/babel__core@7.20.5)(eslint@8.57.0)(preact-render-to-string@6.4.0(preact@10.19.6))(preact@10.19.6)(typescript@5.4.2) + version: 3.5.1(@types/babel__core@7.20.5)(eslint@9.39.2(jiti@1.21.0))(preact-render-to-string@6.4.0(preact@10.19.6))(preact@10.19.6)(typescript@5.9.3) sirv-cli: specifier: ^2.0.2 version: 2.0.2 + examples/vite: + dependencies: + '@fingerprint/react': + specifier: workspace:* + version: link:../.. + react: + specifier: ^19.2.0 + version: 19.2.3 + react-dom: + specifier: ^19.2.0 + version: 19.2.3(react@19.2.3) + devDependencies: + '@eslint/js': + specifier: ^9.39.1 + version: 9.39.2 + '@types/node': + specifier: ^24.10.1 + version: 24.10.4 + '@types/react': + specifier: ^19.2.5 + version: 19.2.7 + '@types/react-dom': + specifier: ^19.2.3 + version: 19.2.3(@types/react@19.2.7) + '@vitejs/plugin-react': + specifier: ^5.1.1 + version: 5.1.2(vite@7.3.0(@types/node@24.10.4)(jiti@1.21.0)(terser@5.43.1)) + eslint: + specifier: ^9.39.1 + version: 9.39.2(jiti@1.21.0) + eslint-plugin-react-hooks: + specifier: ^7.0.1 + version: 7.0.1(eslint@9.39.2(jiti@1.21.0)) + eslint-plugin-react-refresh: + specifier: ^0.4.24 + version: 0.4.26(eslint@9.39.2(jiti@1.21.0)) + globals: + specifier: ^16.5.0 + version: 16.5.0 + typescript: + specifier: ~5.9.3 + version: 5.9.3 + typescript-eslint: + specifier: ^8.46.4 + version: 8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + vite: + specifier: ^7.2.4 + version: 7.3.0(@types/node@24.10.4)(jiti@1.21.0)(terser@5.43.1) + examples/webpack-based: dependencies: - '@fingerprintjs/fingerprintjs-pro-react': + '@fingerprint/react': specifier: workspace:* version: link:../.. react: @@ -324,10 +358,18 @@ packages: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.28.5': + resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + engines: {node: '>=6.9.0'} + '@babel/core@7.24.0': resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} engines: {node: '>=6.9.0'} + '@babel/core@7.28.5': + resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + engines: {node: '>=6.9.0'} + '@babel/eslint-parser@7.23.10': resolution: {integrity: sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -339,6 +381,10 @@ packages: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.22.5': resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} @@ -351,6 +397,10 @@ packages: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.24.0': resolution: {integrity: sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==} engines: {node: '>=6.9.0'} @@ -381,6 +431,10 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.22.5': resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} @@ -393,12 +447,22 @@ packages: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.23.3': resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.22.5': resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} @@ -439,6 +503,10 @@ packages: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} @@ -447,10 +515,18 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.23.5': resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.22.20': resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} engines: {node: '>=6.9.0'} @@ -459,6 +535,10 @@ packages: resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.23.4': resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} @@ -472,6 +552,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3': resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} @@ -934,6 +1019,18 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.23.4': resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} engines: {node: '>=6.9.0'} @@ -1058,14 +1155,26 @@ packages: resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.24.0': resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + engines: {node: '>=6.9.0'} + '@babel/types@7.24.0': resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1235,20 +1344,202 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} + '@esbuild/aix-ppc64@0.27.2': + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.2': + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.2': + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.2': + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.2': + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.2': + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.2': + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.2': + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.2': + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.2': + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.2': + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.2': + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.2': + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.2': + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.2': + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.2': + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.2': + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.2': + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.2': + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.2': + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.2': + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.2': + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.2': + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.2': + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.2': + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.2': + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.10.0': resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@8.56.0': resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1257,6 +1548,21 @@ packages: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/js@9.39.2': + resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@fingerprint/agent@4.0.0': + resolution: {integrity: sha512-GdFdBeaDqLc3hVQLcxPwckk+1217raR/ouxBkGXSykxAswl1xxrt6GLaR93cKY8ehjp7ZFYSjSu4aLKUesgvIg==} + '@fingerprintjs/commit-lint-dx-team@0.0.2': resolution: {integrity: sha512-8FDlPI+KhnWsfbf4Lo/TERdiHl9daMhnZb4MsV5nhrta13XXGRSxOvLPUnFmZA0FsxR4HHzpszlr7ZSoPVaLSg==} @@ -1268,12 +1574,6 @@ packages: peerDependencies: prettier: '>=3' - '@fingerprintjs/fingerprintjs-pro-spa@1.3.3': - resolution: {integrity: sha512-jM5k30S9RT/WW6gnmNWACc7UHeK1md9NbZg8kUsdxvPtDeW8xKnA6tb58Rqfkg6kvqHTq5aHFzw9hgsTH3DbNQ==} - - '@fingerprintjs/fingerprintjs-pro@3.12.1': - resolution: {integrity: sha512-lJSfafyXn0dQeZeg1MjRkGWtw4dbyPcARw6hfce43tRBZvFSCpih+6DPD0OWIu22B4yZcaS/9ESk5e8mkhhk4w==} - '@fingerprintjs/prettier-config-dx-team@0.2.0': resolution: {integrity: sha512-fbtRuqF8YI4SKjvv9SQ2FoQxoTp4drKN15vXkhi2/SimC5ALpz7SFh1S0jbfmjM/rvDJ/z2x+sGFpp9ZsQZ6vg==} @@ -1283,6 +1583,14 @@ packages: '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -1296,6 +1604,18 @@ packages: resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1329,10 +1649,6 @@ packages: resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/fake-timers@27.5.1': resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -1354,10 +1670,6 @@ packages: resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/source-map@27.5.1': resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -1386,10 +1698,6 @@ packages: resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1397,6 +1705,9 @@ packages: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -1411,12 +1722,6 @@ packages: '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -1426,6 +1731,9 @@ packages: '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jsonjoy.com/base64@1.1.2': resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} engines: {node: '>=10.0'} @@ -1450,6 +1758,19 @@ packages: '@mdn/browser-compat-data@5.5.15': resolution: {integrity: sha512-BWm+TMK60HSepXOZcu39bDs/2sJZVetHO5w0mkuxhpkZvz0G5yGAoyimfaru8g5nK6LXXUIeX6Uk/SWzOfph3g==} + '@microsoft/api-extractor-model@7.32.2': + resolution: {integrity: sha512-Ussc25rAalc+4JJs9HNQE7TuO9y6jpYQX9nWD1DhqUzYPBr3Lr7O9intf+ZY8kD5HnIqeIRJX7ccCT0QyBy2Ww==} + + '@microsoft/api-extractor@7.55.2': + resolution: {integrity: sha512-1jlWO4qmgqYoVUcyh+oXYRztZde/pAi7cSVzBz/rc+S7CoVzDasy8QE13dx6sLG4VRo8SfkkLbFORR6tBw4uGQ==} + hasBin: true + + '@microsoft/tsdoc-config@0.18.0': + resolution: {integrity: sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw==} + + '@microsoft/tsdoc@0.16.0': + resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} + '@next/env@14.2.32': resolution: {integrity: sha512-n9mQdigI6iZ/DF6pCTwMKeWgF2e8lg7qgt5M7HXMLtyhZYMnf/u905M18sSpPmHL9MKp9JHo56C6jrD2EvWxng==} @@ -1473,24 +1794,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@next/swc-linux-arm64-musl@14.2.32': resolution: {integrity: sha512-tA6sIKShXtSJBTH88i0DRd6I9n3ZTirmwpwAqH5zdJoQF7/wlJXR8DkPmKwYl5mFWhEKr5IIa3LfpMW9RRwKmQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@next/swc-linux-x64-gnu@14.2.32': resolution: {integrity: sha512-7S1GY4TdnlGVIdeXXKQdDkfDysoIVFMD0lJuVVMeb3eoVjrknQ0JNN7wFlhCvea0hEk0Sd4D1hedVChDKfV2jw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@next/swc-linux-x64-musl@14.2.32': resolution: {integrity: sha512-OHHC81P4tirVa6Awk6eCQ6RBfWl8HpFsZtfEkMpJ5GjPsJ3nhPe6wKAJUZ/piC8sszUkAgv3fLflgzPStIwfWg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@next/swc-win32-arm64-msvc@14.2.32': resolution: {integrity: sha512-rORQjXsAFeX6TLYJrCG5yoIDj+NKq31Rqwn8Wpn/bkPNy5rTHvOXkW8mLFonItS7QC6M+1JIIcLe+vOCTOYpvg==} @@ -1598,6 +1923,9 @@ packages: resolution: {integrity: sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==} engines: {node: '>=14.0.0'} + '@rolldown/pluginutils@1.0.0-beta.53': + resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} + '@rollup/plugin-babel@5.3.1': resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} @@ -1609,15 +1937,6 @@ packages: '@types/babel__core': optional: true - '@rollup/plugin-json@6.1.0': - resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/plugin-node-resolve@11.2.1': resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} engines: {node: '>= 10.0.0'} @@ -1629,27 +1948,14 @@ packages: peerDependencies: rollup: ^1.20.0 || ^2.0.0 - '@rollup/plugin-typescript@11.1.6': - resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.14.0||^3.0.0||^4.0.0 - tslib: '*' - typescript: '>=3.7.0' - peerDependenciesMeta: - rollup: - optional: true - tslib: - optional: true - '@rollup/pluginutils@3.1.0': resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0 - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1691,56 +1997,67 @@ packages: resolution: {integrity: sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.43.0': resolution: {integrity: sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.43.0': resolution: {integrity: sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.43.0': resolution: {integrity: sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loongarch64-gnu@4.43.0': resolution: {integrity: sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.43.0': resolution: {integrity: sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.43.0': resolution: {integrity: sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.43.0': resolution: {integrity: sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.43.0': resolution: {integrity: sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.43.0': resolution: {integrity: sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.43.0': resolution: {integrity: sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.43.0': resolution: {integrity: sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==} @@ -1760,12 +2077,39 @@ packages: '@rushstack/eslint-patch@1.7.2': resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==} + '@rushstack/node-core-library@5.19.1': + resolution: {integrity: sha512-ESpb2Tajlatgbmzzukg6zyAhH+sICqJR2CNXNhXcEbz6UGCQfrKCtkxOpJTftWc8RGouroHG0Nud1SJAszvpmA==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/problem-matcher@0.1.1': + resolution: {integrity: sha512-Fm5XtS7+G8HLcJHCWpES5VmeMyjAKaWeyZU5qPzZC+22mPlJzAsOxymHiWIfuirtPckX3aptWws+K2d0BzniJA==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/rig-package@0.6.0': + resolution: {integrity: sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==} + + '@rushstack/terminal@0.19.5': + resolution: {integrity: sha512-6k5tpdB88G0K7QrH/3yfKO84HK9ggftfUZ51p7fePyCE7+RLLHkWZbID9OFWbXuna+eeCFE7AkKnRMHMxNbz7Q==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/ts-command-line@5.1.5': + resolution: {integrity: sha512-YmrFTFUdHXblYSa+Xc9OO9FsL/XFcckZy0ycQ6q7VSBsVs5P0uD9vcges5Q9vctGlVdu27w+Ct6IuJ458V0cTQ==} + '@sinclair/typebox@0.24.51': resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@sindresorhus/is@0.14.0': resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} engines: {node: '>=6'} @@ -1776,6 +2120,9 @@ packages: '@sinonjs/fake-timers@8.1.0': resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@surma/rollup-plugin-off-main-thread@2.2.3': resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} @@ -1853,21 +2200,29 @@ packages: resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} engines: {node: '>=14'} - '@testing-library/preact@3.2.3': - resolution: {integrity: sha512-y6Kklp1XK3f1X2fWCbujmJyzkf+1BgLYXNgAx21j9+D4CoqMTz5qC4SQufb1L6q/jxLGACzrQ90ewVOTBvHOfg==} + '@testing-library/preact@3.2.4': + resolution: {integrity: sha512-F+kJ243LP6VmEK1M809unzTE/ijg+bsMNuiRN0JEDIJBELKKDNhdgC/WrUSZ7klwJvtlO3wQZ9ix+jhObG07Fg==} engines: {node: '>= 12'} peerDependencies: preact: '>=10 || ^10.0.0-alpha.0 || ^10.0.0-beta.0' - '@testing-library/react@14.2.1': - resolution: {integrity: sha512-sGdjws32ai5TLerhvzThYFbpnF9XtL65Cjf+gB0Dhr29BGqK+mAeN7SURSdu+eqgET4ANcWoC7FQpkaiGvBr+A==} - engines: {node: '>=14'} + '@testing-library/react@16.3.2': + resolution: {integrity: sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==} + engines: {node: '>=18'} peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - '@testing-library/user-event@14.5.2': - resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' @@ -1880,6 +2235,9 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} + '@types/argparse@1.0.38': + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -1904,6 +2262,9 @@ packages: '@types/bonjour@3.5.13': resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/connect-history-api-fallback@1.5.4': resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} @@ -1913,6 +2274,9 @@ packages: '@types/conventional-commits-parser@5.0.0': resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -1967,9 +2331,6 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jest@29.5.12': - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1991,8 +2352,8 @@ packages: '@types/node@20.11.28': resolution: {integrity: sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==} - '@types/node@24.0.3': - resolution: {integrity: sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==} + '@types/node@24.10.4': + resolution: {integrity: sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -2018,9 +2379,17 @@ packages: '@types/react-dom@18.2.22': resolution: {integrity: sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==} + '@types/react-dom@19.2.3': + resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} + peerDependencies: + '@types/react': ^19.2.0 + '@types/react@18.2.66': resolution: {integrity: sha512-OYTmMI4UigXeFMF/j4uv0lBBEbongSgptPrHBxqME44h9+yNov+oL6Z3ocJKo0WyXR84sQUNeyIp9MRfckvZpg==} + '@types/react@19.2.7': + resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==} + '@types/resolve@1.17.1': resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} @@ -2123,6 +2492,14 @@ packages: typescript: optional: true + '@typescript-eslint/eslint-plugin@8.50.0': + resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.50.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/experimental-utils@5.62.0': resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2169,6 +2546,19 @@ packages: typescript: optional: true + '@typescript-eslint/parser@8.50.0': + resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.50.0': + resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@5.62.0': resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2185,6 +2575,16 @@ packages: resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@8.50.0': + resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.50.0': + resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@5.62.0': resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2215,6 +2615,13 @@ packages: typescript: optional: true + '@typescript-eslint/type-utils@8.50.0': + resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@5.62.0': resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2231,6 +2638,10 @@ packages: resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/types@8.50.0': + resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2267,6 +2678,12 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.50.0': + resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@5.62.0': resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2285,7 +2702,14 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@5.62.0': + '@typescript-eslint/utils@8.50.0': + resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2301,9 +2725,82 @@ packages: resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@8.50.0': + resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@vitejs/plugin-react@5.1.2': + resolution: {integrity: sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + '@vitest/coverage-istanbul@4.0.18': + resolution: {integrity: sha512-0OhjP30owEDihYTZGWuq20rNtV1RjjJs1Mv4MaZIKcFBmiLUXX7HJLX4fU7wE+Mrc3lQxI2HKq6WrSXi5FGuCQ==} + peerDependencies: + vitest: 4.0.18 + + '@vitest/expect@4.0.18': + resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} + + '@vitest/mocker@4.0.18': + resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.0.18': + resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} + + '@vitest/runner@4.0.18': + resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} + + '@vitest/snapshot@4.0.18': + resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} + + '@vitest/spy@4.0.18': + resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} + + '@vitest/utils@4.0.18': + resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + + '@volar/language-core@2.4.27': + resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} + + '@volar/source-map@2.4.27': + resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} + + '@volar/typescript@2.4.27': + resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==} + + '@vue/compiler-core@3.5.27': + resolution: {integrity: sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==} + + '@vue/compiler-dom@3.5.27': + resolution: {integrity: sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==} + + '@vue/compiler-vue2@2.7.16': + resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + + '@vue/language-core@2.2.0': + resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/shared@3.5.27': + resolution: {integrity: sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==} + '@webassemblyjs/ast@1.12.1': resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} @@ -2556,6 +3053,14 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-errors@1.0.1: resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} peerDependencies: @@ -2569,6 +3074,14 @@ packages: ajv: optional: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -2585,9 +3098,15 @@ packages: ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + alien-signals@0.4.14: + resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} + alphanum-sort@1.0.2: resolution: {integrity: sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==} @@ -2689,10 +3208,6 @@ packages: array-equal@1.0.2: resolution: {integrity: sha512-gUHx76KtnhEgB3HOuFYiCm3FIdEs6ocM2asHvNTkfu/Y09qQVrrVVaOKENmS2KkSaGoxgXNqC+ZVtR/n0MOkSA==} - array-find-index@1.0.2: - resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} - engines: {node: '>=0.10.0'} - array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -2761,6 +3276,10 @@ packages: assert@1.5.1: resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + assign-symbols@1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} @@ -3019,10 +3538,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -3145,6 +3660,10 @@ packages: caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + chalk@2.4.1: resolution: {integrity: sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==} engines: {node: '>=4'} @@ -3352,9 +3871,6 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - commenting@1.1.0: - resolution: {integrity: sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==} - commitizen@4.3.0: resolution: {integrity: sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==} engines: {node: '>= 12'} @@ -3373,6 +3889,9 @@ packages: compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} @@ -3401,6 +3920,12 @@ packages: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + configstore@5.0.1: resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} engines: {node: '>=8'} @@ -3553,6 +4078,10 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + crypto-browserify@3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} @@ -3729,6 +4258,9 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + csstype@3.2.3: + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + cyclist@1.0.2: resolution: {integrity: sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==} @@ -3754,6 +4286,9 @@ packages: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + debounce@1.2.1: resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} @@ -3818,6 +4353,7 @@ packages: deepcopy@1.0.0: resolution: {integrity: sha512-WJrecobaoqqgQHtvRI2/VCzWoWXPAnFYyAkF/spmL46lZMnd0gW0gLGuyeFVSrqt2B3s0oEEj6i+j2L/2QiS4g==} + deprecated: No longer maintained. Use structuredClone instead. deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} @@ -3919,9 +4455,9 @@ packages: resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff@8.0.3: + resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} + engines: {node: '>=0.3.1'} diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} @@ -4107,6 +4643,10 @@ packages: entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -4152,9 +4692,6 @@ packages: resolution: {integrity: sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==} engines: {node: '>= 0.4'} - es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} - es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -4173,6 +4710,11 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + esbuild@0.27.2: + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} + engines: {node: '>=18'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -4334,6 +4876,17 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-react-hooks@7.0.1: + resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-refresh@0.4.26: + resolution: {integrity: sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==} + peerDependencies: + eslint: '>=8.40' + eslint-plugin-react@7.34.0: resolution: {integrity: sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==} engines: {node: '>=4'} @@ -4358,6 +4911,10 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} @@ -4366,6 +4923,10 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-webpack-plugin@3.2.0: resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} engines: {node: '>= 12.13.0'} @@ -4385,10 +4946,24 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true + eslint@9.39.2: + resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + esm@3.2.25: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} engines: {node: '>=6'} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4425,6 +5000,9 @@ packages: estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -4466,14 +5044,14 @@ packages: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + expect@27.5.1: resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - express@4.18.3: resolution: {integrity: sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==} engines: {node: '>= 0.10.0'} @@ -4482,6 +5060,9 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -4538,8 +5119,9 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -4558,6 +5140,10 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + file-loader@6.2.0: resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} engines: {node: '>= 10.13.0'} @@ -4640,6 +5226,10 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true @@ -4726,6 +5316,10 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} + fs-extra@11.3.3: + resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} + engines: {node: '>=14.14'} + fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -4906,6 +5500,14 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + engines: {node: '>=18'} + globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -5023,6 +5625,12 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + hex-color-regex@1.1.0: resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==} @@ -5197,6 +5805,10 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + immer@9.0.21: resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} @@ -5212,6 +5824,10 @@ packages: resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} engines: {node: '>=4'} + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -5602,6 +6218,10 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} @@ -5614,6 +6234,10 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + iterator.prototype@1.1.2: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} @@ -5657,10 +6281,6 @@ packages: resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-docblock@27.5.1: resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -5681,10 +6301,6 @@ packages: resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-haste-map@27.5.1: resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -5701,10 +6317,6 @@ packages: resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-message-util@27.5.1: resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -5713,10 +6325,6 @@ packages: resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-mock@27.5.1: resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -5770,10 +6378,6 @@ packages: resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-validate@27.5.1: resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -5818,6 +6422,9 @@ packages: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -5829,6 +6436,10 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} @@ -5854,6 +6465,11 @@ packages: engines: {node: '>=4'} hasBin: true + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + json-buffer@3.0.0: resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} @@ -5949,6 +6565,9 @@ packages: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} @@ -6032,6 +6651,10 @@ packages: resolution: {integrity: sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==} engines: {node: '>=6'} + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -6144,12 +6767,11 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magic-string@0.30.8: - resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} - engines: {node: '>=12'} + magicast@0.5.1: + resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} @@ -6163,9 +6785,6 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} @@ -6301,6 +6920,10 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -6312,6 +6935,10 @@ packages: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} @@ -6369,8 +6996,8 @@ packages: engines: {node: '>=10'} hasBin: true - moment@2.30.1: - resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} move-concurrently@1.0.1: resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==} @@ -6393,6 +7020,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true @@ -6406,6 +7036,11 @@ packages: nan@2.19.0: resolution: {integrity: sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -6438,6 +7073,7 @@ packages: next@14.2.32: resolution: {integrity: sha512-fg5g0GZ7/nFc09X8wLe6pNSU8cLWbLRG3TZzPJ1BJvi2s9m7eF991se67wliM9kR5yLHRkyGKU49MMx58s3LJg==} engines: {node: '>=18.17.0'} + deprecated: This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/security-update-2025-12-11 for more details. hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -6592,6 +7228,9 @@ packages: obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -6699,10 +7338,6 @@ packages: resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} engines: {node: '>=8'} - package-name-regex@2.0.6: - resolution: {integrity: sha512-gFL35q7kbE/zBaPA3UKhp2vSzcPYx2ecbYuwv1ucE9Il6IIgBDweBlH8D68UFGZic2MkllKa2KHCfC1IQBQUYA==} - engines: {node: '>=12'} - pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -6758,6 +7393,9 @@ packages: path-browserify@0.0.1: resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-dirname@1.0.2: resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} @@ -6802,6 +7440,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pbkdf2@3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} @@ -6822,6 +7463,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} @@ -6851,6 +7496,12 @@ packages: resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} engines: {node: '>=14.16'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} @@ -7433,6 +8084,10 @@ packages: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + preact-cli@3.5.1: resolution: {integrity: sha512-6sRewJOtPAWkIVc+cycU4cjk9294stdh4hyw2ENpJ5N5lWJ8Y3r9r5Ly6Hmo5rzvcUq4cnlshMwTTwGq7ip/1w==} engines: {node: '>=12'} @@ -7510,10 +8165,6 @@ packages: resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - pretty-format@3.8.0: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} @@ -7614,6 +8265,9 @@ packages: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + querystring-es3@0.2.1: resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} engines: {node: '>=0.4.x'} @@ -7675,6 +8329,11 @@ packages: peerDependencies: react: ^18.2.0 + react-dom@19.2.3: + resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} + peerDependencies: + react: ^19.2.3 + react-error-overlay@6.0.11: resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} @@ -7695,6 +8354,10 @@ packages: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} engines: {node: '>=0.10.0'} + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} + engines: {node: '>=0.10.0'} + react-router-dom@6.22.3: resolution: {integrity: sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==} engines: {node: '>=14.0.0'} @@ -7724,6 +8387,10 @@ packages: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} + react@19.2.3: + resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} + engines: {node: '>=0.10.0'} + read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -7952,24 +8619,6 @@ packages: resolution: {integrity: sha512-BUxYj2FbSCxgfyvln6f1AWG1n+b1ZUXXb/LkKpClB12CTIjwDFexWw35V/STz7xT+BLat475I204aRzpxRQwKg==} engines: {node: '>=12.13'} - rollup-plugin-dts@6.2.1: - resolution: {integrity: sha512-sR3CxYUl7i2CHa0O7bA45mCrgADyAQ0tVtGSqi3yvH28M+eg1+g5d7kQ9hLvEz5dorK3XVsH5L2jwHLQf72DzA==} - engines: {node: '>=16'} - peerDependencies: - rollup: ^3.29.4 || ^4 - typescript: ^4.5 || ^5.0 - - rollup-plugin-license@3.6.0: - resolution: {integrity: sha512-1ieLxTCaigI5xokIfszVDRoy6c/Wmlot1fDEnea7Q/WXSR8AqOjYljHDLObAx7nFxHC2mbxT3QnTSPhaic2IYw==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - - rollup-plugin-peer-deps-external@2.2.4: - resolution: {integrity: sha512-AWdukIM1+k5JDdAqV/Cxd+nejvno2FVLVeZ74NKggm3Q5s9cbbcOgUPGdbxPi4BXu7xGaZ8HG12F+thImYu/0g==} - peerDependencies: - rollup: '*' - rollup-plugin-terser@7.0.2: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser @@ -8063,6 +8712,9 @@ packages: scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + schema-utils@1.0.0: resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} engines: {node: '>= 4'} @@ -8110,6 +8762,11 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} @@ -8219,6 +8876,9 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -8284,6 +8944,10 @@ packages: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-loader@1.1.3: resolution: {integrity: sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA==} engines: {node: '>= 10.13.0'} @@ -8328,27 +8992,6 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead - spdx-compare@1.0.0: - resolution: {integrity: sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-expression-validate@2.0.0: - resolution: {integrity: sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==} - - spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} - - spdx-ranges@2.1.1: - resolution: {integrity: sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==} - - spdx-satisfies@5.0.1: - resolution: {integrity: sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw==} - spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} @@ -8390,6 +9033,9 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} @@ -8408,6 +9054,9 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stealthy-require@1.1.1: resolution: {integrity: sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==} engines: {node: '>=0.10.0'} @@ -8742,10 +9391,25 @@ packages: timsort@0.3.0: resolution: {integrity: sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinydate@1.3.0: resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==} engines: {node: '>=4'} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + engines: {node: '>=14.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -8824,30 +9488,15 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-jest@29.1.2: - resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} - engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - ts-pnp@1.2.0: resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} engines: {node: '>=6'} @@ -8945,11 +9594,31 @@ packages: peerDependencies: typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x + typescript-eslint@8.50.0: + resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + typescript@5.4.2: resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} engines: {node: '>=14.17'} hasBin: true + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + uglify-js@3.4.10: resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==} engines: {node: '>=0.8.0'} @@ -8964,8 +9633,8 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@7.8.0: - resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} @@ -9136,6 +9805,92 @@ packages: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} + vite-plugin-banner@0.8.1: + resolution: {integrity: sha512-0+gGguHk3MH0HvzMSOCJC6fGgH4+jtY9KlKVZh+hwwE+PBkGVzY8xe657JL74vEgbeUJD37XjVqTrmve8XvZBQ==} + + vite-plugin-dts@4.5.4: + resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} + peerDependencies: + typescript: '*' + vite: '*' + peerDependenciesMeta: + vite: + optional: true + + vite@7.3.0: + resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.0.18: + resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.18 + '@vitest/browser-preview': 4.0.18 + '@vitest/browser-webdriverio': 4.0.18 + '@vitest/ui': 4.0.18 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} @@ -9145,6 +9900,9 @@ packages: vscode-textmate@8.0.0: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. @@ -9332,6 +10090,7 @@ packages: whatwg-encoding@1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} @@ -9373,6 +10132,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} @@ -9588,6 +10352,15 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@4.2.1: + resolution: {integrity: sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==} + snapshots: '@aashutoshrathi/word-wrap@1.2.6': {} @@ -9599,9 +10372,9 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@apideck/better-ajv-errors@0.3.6(ajv@8.12.0)': + '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': dependencies: - ajv: 8.12.0 + ajv: 8.17.1 json-schema: 0.4.0 jsonpointer: 5.0.1 leven: 3.1.0 @@ -9621,10 +10394,11 @@ snapshots: '@babel/helper-validator-identifier': 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - optional: true '@babel/compat-data@7.23.5': {} + '@babel/compat-data@7.28.5': {} + '@babel/core@7.24.0': dependencies: '@ampproject/remapping': 2.3.0 @@ -9645,13 +10419,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.23.10(@babel/core@7.24.0)(eslint@8.57.0)': + '@babel/core@7.28.5': dependencies: - '@babel/core': 7.24.0 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.1 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/eslint-parser@7.23.10(@babel/core@7.24.0)(eslint@8.57.0)': + dependencies: + '@babel/core': 7.24.0 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.57.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + + '@babel/eslint-parser@7.23.10(@babel/core@7.24.0)(eslint@9.39.2(jiti@1.21.0))': + dependencies: + '@babel/core': 7.24.0 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 9.39.2(jiti@1.21.0) + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 '@babel/generator@7.23.6': dependencies: @@ -9660,6 +10462,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + '@babel/generator@7.28.5': + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.22.5': dependencies: '@babel/types': 7.24.0 @@ -9676,6 +10486,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.28.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.25.4 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.24.0(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 @@ -9689,6 +10507,19 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.24.0(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.28.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 @@ -9696,11 +10527,29 @@ snapshots: regexpu-core: 5.3.2 semver: 6.3.1 + '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + '@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.1 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.1 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -9711,7 +10560,18 @@ snapshots: dependencies: '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.1 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.1 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -9725,18 +10585,27 @@ snapshots: '@babel/template': 7.24.0 '@babel/types': 7.24.0 + '@babel/helper-globals@7.28.0': {} + '@babel/helper-hoist-variables@7.22.5': dependencies: '@babel/types': 7.24.0 '@babel/helper-member-expression-to-functions@7.23.0': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.28.5 '@babel/helper-module-imports@7.22.15': dependencies: '@babel/types': 7.24.0 + '@babel/helper-module-imports@7.27.1': + dependencies: + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 @@ -9746,9 +10615,27 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-module-transforms@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.22.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.28.5 '@babel/helper-plugin-utils@7.24.0': {} @@ -9761,6 +10648,13 @@ snapshots: '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 + '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + '@babel/helper-replace-supers@7.22.20(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 @@ -9768,6 +10662,13 @@ snapshots: '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers@7.22.20(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-simple-access@7.22.5': dependencies: '@babel/types': 7.24.0 @@ -9782,18 +10683,23 @@ snapshots: '@babel/helper-string-parser@7.23.4': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.22.20': {} - '@babel/helper-validator-identifier@7.27.1': - optional: true + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} '@babel/helper-validator-option@7.23.5': {} + '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-wrap-function@7.22.20': dependencies: '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 '@babel/helpers@7.24.0': dependencies: @@ -9803,6 +10709,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + '@babel/highlight@7.23.4': dependencies: '@babel/helper-validator-identifier': 7.22.20 @@ -9814,29 +10725,51 @@ snapshots: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.1.1 '@babel/parser@7.24.0': dependencies: '@babel/types': 7.24.0 + '@babel/parser@7.28.5': + dependencies: + '@babel/types': 7.28.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.0)': dependencies: @@ -9854,13 +10787,13 @@ snapshots: '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.24.0)': @@ -9875,7 +10808,7 @@ snapshots: '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) @@ -9883,39 +10816,63 @@ snapshots: dependencies: '@babel/core': 7.24.0 '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.0) '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-decorators@7.24.0(@babel/core@7.24.0)': dependencies: @@ -9927,15 +10884,25 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0)': dependencies: @@ -9945,22 +10912,42 @@ snapshots: '@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.0)': dependencies: @@ -9970,97 +10957,191 @@ snapshots: '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.0) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) + '@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.28.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5) + '@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.0) + '@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.0) + '@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-transform-classes@7.23.8(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 @@ -10068,61 +11149,119 @@ snapshots: '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.0) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 + '@babel/plugin-transform-classes@7.23.8(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.28.5) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + '@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.24.0 + + '@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.24.0 '@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.24.0) '@babel/plugin-transform-for-of@7.23.6(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + + '@babel/plugin-transform-for-of@7.23.6(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-function-name@7.23.3(@babel/core@7.24.0)': @@ -10130,41 +11269,83 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-function-name@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-transform-literals@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-literals@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) + '@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-simple-access': 7.22.5 + + '@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-simple-access': 7.22.5 '@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.24.0)': @@ -10172,38 +11353,75 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.22.20 + + '@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-validator-identifier': 7.22.20 '@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-new-target@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-new-target@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) + '@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-transform-object-assign@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 @@ -10214,68 +11432,130 @@ snapshots: '@babel/compat-data': 7.23.5 '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.24.0) + '@babel/plugin-transform-object-rest-spread@7.24.0(@babel/core@7.28.5)': + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-object-super@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.0) + '@babel/plugin-transform-object-super@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.28.5) + '@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) + '@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-transform-parameters@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-parameters@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.0) + '@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-constant-elements@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 @@ -10289,24 +11569,35 @@ snapshots: dependencies: '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 regenerator-transform: 0.15.2 '@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-runtime@7.24.0(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.0) babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.24.0) babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.24.0) @@ -10317,59 +11608,108 @@ snapshots: '@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-spread@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + + '@babel/plugin-transform-spread@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-typescript@7.23.6(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) '@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.28.5) + '@babel/helper-plugin-utils': 7.27.1 '@babel/preset-env@7.24.0(@babel/core@7.24.0)': dependencies: @@ -10457,10 +11797,103 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-env@7.24.0(@babel/core@7.28.5)': + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.28.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.28.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.28.5) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.28.5) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.28.5) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.28.5) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.28.5) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-transform-object-rest-spread': 7.24.0(@babel/core@7.28.5) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.28.5) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.28.5) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.28.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5) + babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.28.5) + babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.28.5) + babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.28.5) + core-js-compat: 3.36.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.24.0 + esutils: 2.0.3 + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)': + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/types': 7.24.0 esutils: 2.0.3 @@ -10495,6 +11928,12 @@ snapshots: '@babel/parser': 7.24.0 '@babel/types': 7.24.0 + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@babel/traverse@7.24.0': dependencies: '@babel/code-frame': 7.23.5 @@ -10505,17 +11944,34 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.24.0 '@babel/types': 7.24.0 - debug: 4.3.4 + debug: 4.4.1 globals: 11.12.0 transitivePeerDependencies: - supports-color + '@babel/traverse@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + '@babel/types@7.24.0': dependencies: '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@bcoe/v8-coverage@0.2.3': {} '@commitlint/cli@19.2.0(@types/node@20.11.28)(typescript@5.4.2)': @@ -10710,6 +12166,84 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} + '@esbuild/aix-ppc64@0.27.2': + optional: true + + '@esbuild/android-arm64@0.27.2': + optional: true + + '@esbuild/android-arm@0.27.2': + optional: true + + '@esbuild/android-x64@0.27.2': + optional: true + + '@esbuild/darwin-arm64@0.27.2': + optional: true + + '@esbuild/darwin-x64@0.27.2': + optional: true + + '@esbuild/freebsd-arm64@0.27.2': + optional: true + + '@esbuild/freebsd-x64@0.27.2': + optional: true + + '@esbuild/linux-arm64@0.27.2': + optional: true + + '@esbuild/linux-arm@0.27.2': + optional: true + + '@esbuild/linux-ia32@0.27.2': + optional: true + + '@esbuild/linux-loong64@0.27.2': + optional: true + + '@esbuild/linux-mips64el@0.27.2': + optional: true + + '@esbuild/linux-ppc64@0.27.2': + optional: true + + '@esbuild/linux-riscv64@0.27.2': + optional: true + + '@esbuild/linux-s390x@0.27.2': + optional: true + + '@esbuild/linux-x64@0.27.2': + optional: true + + '@esbuild/netbsd-arm64@0.27.2': + optional: true + + '@esbuild/netbsd-x64@0.27.2': + optional: true + + '@esbuild/openbsd-arm64@0.27.2': + optional: true + + '@esbuild/openbsd-x64@0.27.2': + optional: true + + '@esbuild/openharmony-arm64@0.27.2': + optional: true + + '@esbuild/sunos-x64@0.27.2': + optional: true + + '@esbuild/win32-arm64@0.27.2': + optional: true + + '@esbuild/win32-ia32@0.27.2': + optional: true + + '@esbuild/win32-x64@0.27.2': + optional: true + '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': dependencies: eslint: 8.56.0 @@ -10720,8 +12254,36 @@ snapshots: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.4.0(eslint@9.39.2(jiti@1.21.0))': + dependencies: + eslint: 9.39.2(jiti@1.21.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@1.21.0))': + dependencies: + eslint: 9.39.2(jiti@1.21.0) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.10.0': {} + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.1': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.1 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 @@ -10736,10 +12298,35 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/eslintrc@3.3.3': + dependencies: + ajv: 6.12.6 + debug: 4.4.1 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.1 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + '@eslint/js@8.56.0': {} '@eslint/js@8.57.0': {} + '@eslint/js@9.39.2': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@fingerprint/agent@4.0.0': {} + '@fingerprintjs/commit-lint-dx-team@0.0.2': dependencies: '@commitlint/config-conventional': 17.8.1 @@ -10754,20 +12341,13 @@ snapshots: '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.4.2) eslint: 8.56.0 eslint-config-prettier: 9.1.0(eslint@8.56.0) - eslint-plugin-prettier: 5.1.3(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@3.2.5) + eslint-plugin-prettier: 5.1.3(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.56.0)(prettier@3.2.5) prettier: 3.2.5 transitivePeerDependencies: - '@types/eslint' - supports-color - typescript - '@fingerprintjs/fingerprintjs-pro-spa@1.3.3': - dependencies: - '@fingerprintjs/fingerprintjs-pro': 3.12.1 - tslib: 2.8.1 - - '@fingerprintjs/fingerprintjs-pro@3.12.1': {} - '@fingerprintjs/prettier-config-dx-team@0.2.0': dependencies: prettier: 3.2.4 @@ -10776,6 +12356,13 @@ snapshots: '@gar/promisify@1.1.3': {} + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 @@ -10788,6 +12375,14 @@ snapshots: '@humanwhocodes/object-schema@2.0.2': {} + '@humanwhocodes/retry@0.4.3': {} + + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -10869,10 +12464,6 @@ snapshots: '@types/node': 20.11.28 jest-mock: 27.5.1 - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - '@jest/fake-timers@27.5.1': dependencies: '@jest/types': 27.5.1 @@ -10922,10 +12513,6 @@ snapshots: dependencies: '@sinclair/typebox': 0.24.51 - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - '@jest/source-map@27.5.1': dependencies: callsites: 3.1.0 @@ -10957,7 +12544,7 @@ snapshots: '@jest/transform@27.5.1': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.28.5 '@jest/types': 27.5.1 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -10992,25 +12579,21 @@ snapshots: '@types/yargs': 17.0.32 chalk: 4.1.2 - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.28 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.30 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} @@ -11023,25 +12606,26 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping@0.3.30': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: tslib: 2.8.1 @@ -11062,6 +12646,42 @@ snapshots: '@mdn/browser-compat-data@5.5.15': {} + '@microsoft/api-extractor-model@7.32.2(@types/node@20.11.28)': + dependencies: + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.0 + '@rushstack/node-core-library': 5.19.1(@types/node@20.11.28) + transitivePeerDependencies: + - '@types/node' + + '@microsoft/api-extractor@7.55.2(@types/node@20.11.28)': + dependencies: + '@microsoft/api-extractor-model': 7.32.2(@types/node@20.11.28) + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.0 + '@rushstack/node-core-library': 5.19.1(@types/node@20.11.28) + '@rushstack/rig-package': 0.6.0 + '@rushstack/terminal': 0.19.5(@types/node@20.11.28) + '@rushstack/ts-command-line': 5.1.5(@types/node@20.11.28) + diff: 8.0.3 + lodash: 4.17.21 + minimatch: 10.0.3 + resolve: 1.22.8 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.8.2 + transitivePeerDependencies: + - '@types/node' + + '@microsoft/tsdoc-config@0.18.0': + dependencies: + '@microsoft/tsdoc': 0.16.0 + ajv: 8.12.0 + jju: 1.4.0 + resolve: 1.22.8 + + '@microsoft/tsdoc@0.16.0': {} + '@next/env@14.2.32': {} '@next/eslint-plugin-next@14.1.3': @@ -11170,21 +12790,17 @@ snapshots: '@remix-run/router@1.15.3': {} - '@rollup/plugin-babel@5.3.1(@babel/core@7.24.0)(@types/babel__core@7.20.5)(rollup@2.79.2)': + '@rolldown/pluginutils@1.0.0-beta.53': {} + + '@rollup/plugin-babel@5.3.1(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@2.79.2)': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.22.15 '@rollup/pluginutils': 3.1.0(rollup@2.79.2) rollup: 2.79.2 optionalDependencies: '@types/babel__core': 7.20.5 - '@rollup/plugin-json@6.1.0(rollup@4.43.0)': - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.43.0) - optionalDependencies: - rollup: 4.43.0 - '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.2)': dependencies: '@rollup/pluginutils': 3.1.0(rollup@2.79.2) @@ -11201,15 +12817,6 @@ snapshots: magic-string: 0.25.9 rollup: 2.79.2 - '@rollup/plugin-typescript@11.1.6(rollup@4.43.0)(tslib@2.6.2)(typescript@5.4.2)': - dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.43.0) - resolve: 1.22.8 - typescript: 5.4.2 - optionalDependencies: - rollup: 4.43.0 - tslib: 2.6.2 - '@rollup/pluginutils@3.1.0(rollup@2.79.2)': dependencies: '@types/estree': 0.0.39 @@ -11217,11 +12824,11 @@ snapshots: picomatch: 2.3.1 rollup: 2.79.2 - '@rollup/pluginutils@5.1.0(rollup@4.43.0)': + '@rollup/pluginutils@5.3.0(rollup@4.43.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 2.3.1 + picomatch: 4.0.3 optionalDependencies: rollup: 4.43.0 @@ -11287,9 +12894,46 @@ snapshots: '@rushstack/eslint-patch@1.7.2': {} - '@sinclair/typebox@0.24.51': {} + '@rushstack/node-core-library@5.19.1(@types/node@20.11.28)': + dependencies: + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 3.0.1(ajv@8.13.0) + fs-extra: 11.3.3 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.8 + semver: 7.5.4 + optionalDependencies: + '@types/node': 20.11.28 + + '@rushstack/problem-matcher@0.1.1(@types/node@20.11.28)': + optionalDependencies: + '@types/node': 20.11.28 + + '@rushstack/rig-package@0.6.0': + dependencies: + resolve: 1.22.8 + strip-json-comments: 3.1.1 + + '@rushstack/terminal@0.19.5(@types/node@20.11.28)': + dependencies: + '@rushstack/node-core-library': 5.19.1(@types/node@20.11.28) + '@rushstack/problem-matcher': 0.1.1(@types/node@20.11.28) + supports-color: 8.1.1 + optionalDependencies: + '@types/node': 20.11.28 + + '@rushstack/ts-command-line@5.1.5(@types/node@20.11.28)': + dependencies: + '@rushstack/terminal': 0.19.5(@types/node@20.11.28) + '@types/argparse': 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' - '@sinclair/typebox@0.27.8': {} + '@sinclair/typebox@0.24.51': {} '@sindresorhus/is@0.14.0': {} @@ -11301,6 +12945,8 @@ snapshots: dependencies: '@sinonjs/commons': 1.8.6 + '@standard-schema/spec@1.1.0': {} + '@surma/rollup-plugin-off-main-thread@2.2.3': dependencies: ejs: 3.1.9 @@ -11345,11 +12991,11 @@ snapshots: '@svgr/hast-util-to-babel-ast@5.5.0': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.28.5 '@svgr/plugin-jsx@5.5.0': dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.28.5 '@svgr/babel-preset': 5.5.0 '@svgr/hast-util-to-babel-ast': 5.5.0 svg-parser: 2.0.4 @@ -11388,7 +13034,7 @@ snapshots: '@testing-library/dom@8.20.1': dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.27.1 '@babel/runtime': 7.24.0 '@types/aria-query': 5.0.4 aria-query: 5.1.3 @@ -11399,7 +13045,7 @@ snapshots: '@testing-library/dom@9.3.4': dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.27.1 '@babel/runtime': 7.24.0 '@types/aria-query': 5.0.4 aria-query: 5.1.3 @@ -11408,20 +13054,22 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/preact@3.2.3(preact@10.19.6)': + '@testing-library/preact@3.2.4(preact@10.19.6)': dependencies: '@testing-library/dom': 8.20.1 preact: 10.19.6 - '@testing-library/react@14.2.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@testing-library/react@16.3.2(@testing-library/dom@9.3.4)(@types/react-dom@18.2.22)(@types/react@18.2.66)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.24.0 '@testing-library/dom': 9.3.4 - '@types/react-dom': 18.2.22 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.66 + '@types/react-dom': 18.2.22 - '@testing-library/user-event@14.5.2(@testing-library/dom@9.3.4)': + '@testing-library/user-event@14.6.1(@testing-library/dom@9.3.4)': dependencies: '@testing-library/dom': 9.3.4 @@ -11429,56 +13077,65 @@ snapshots: '@trysound/sax@0.2.0': {} + '@types/argparse@1.0.38': {} + '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.5 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.28.5 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@types/babel__traverse@7.20.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.28.5 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/bonjour@3.5.13': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.11.28 + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.6 - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/connect@3.4.38': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/conventional-commits-parser@5.0.0': dependencies: '@types/node': 20.11.28 + '@types/deep-eql@4.0.2': {} + '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 @@ -11502,7 +13159,7 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 @@ -11533,11 +13190,11 @@ snapshots: '@types/http-proxy@1.17.14': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/http-proxy@1.17.16': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/istanbul-lib-coverage@2.0.6': {} @@ -11549,18 +13206,13 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jest@29.5.12': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} '@types/keyv@3.1.4': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/mime@1.3.5': {} @@ -11568,15 +13220,15 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/node@20.11.28': dependencies: undici-types: 5.26.5 - '@types/node@24.0.3': + '@types/node@24.10.4': dependencies: - undici-types: 7.8.0 + undici-types: 7.16.0 '@types/parse-json@4.0.2': {} @@ -11596,19 +13248,27 @@ snapshots: dependencies: '@types/react': 18.2.66 + '@types/react-dom@19.2.3(@types/react@19.2.7)': + dependencies: + '@types/react': 19.2.7 + '@types/react@18.2.66': dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 csstype: 3.1.3 + '@types/react@19.2.7': + dependencies: + csstype: 3.2.3 + '@types/resolve@1.17.1': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/responselike@1.0.3': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/retry@0.12.0': {} @@ -11621,7 +13281,7 @@ snapshots: '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/serve-index@1.9.4': dependencies: @@ -11636,12 +13296,12 @@ snapshots: '@types/serve-static@1.15.8': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/send': 0.17.5 '@types/sockjs@0.3.36': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/source-list-map@0.1.6': {} @@ -11672,7 +13332,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.11.28 '@types/ws@8.5.10': dependencies: @@ -11688,15 +13348,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2))(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/parser': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - debug: 4.3.4 - eslint: 8.57.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) + '@typescript-eslint/utils': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) + debug: 4.4.1 + eslint: 9.39.2(jiti@1.21.0) graphemer: 1.4.0 ignore: 5.3.1 natural-compare-lite: 1.4.0 @@ -11714,7 +13374,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - debug: 4.3.4 + debug: 4.4.1 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -11747,23 +13407,39 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2)': + '@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/parser': 7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) '@typescript-eslint/scope-manager': 7.2.0 - '@typescript-eslint/type-utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2) - '@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/type-utils': 7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + '@typescript-eslint/utils': 7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 7.2.0 debug: 4.3.4 - eslint: 8.57.0 + eslint: 9.39.2(jiti@1.21.0) graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.2) + ts-api-utils: 1.3.0(typescript@5.9.3) optionalDependencies: - typescript: 5.4.2 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.50.0 + eslint: 9.39.2(jiti@1.21.0) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -11775,13 +13451,29 @@ snapshots: - supports-color - typescript - '@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.2)': + '@typescript-eslint/experimental-utils@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2)': + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) + eslint: 9.39.2(jiti@1.21.0) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/experimental-utils@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + eslint: 9.39.2(jiti@1.21.0) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2) - debug: 4.3.4 - eslint: 8.57.0 + debug: 4.4.1 + eslint: 9.39.2(jiti@1.21.0) optionalDependencies: typescript: 5.4.2 transitivePeerDependencies: @@ -11813,16 +13505,37 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.2)': + '@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 7.2.0 '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2) + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 7.2.0 debug: 4.3.4 - eslint: 8.57.0 + eslint: 9.39.2(jiti@1.21.0) optionalDependencies: - typescript: 5.4.2 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.50.0 + debug: 4.4.1 + eslint: 9.39.2(jiti@1.21.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.50.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3) + '@typescript-eslint/types': 8.50.0 + debug: 4.4.1 + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -11846,23 +13559,45 @@ snapshots: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 + '@typescript-eslint/scope-manager@8.50.0': + dependencies: + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/visitor-keys': 8.50.0 + + '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.2)': dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - debug: 4.3.4 + debug: 4.4.1 eslint: 8.57.0 tsutils: 3.21.0(typescript@5.4.2) optionalDependencies: typescript: 5.4.2 transitivePeerDependencies: - supports-color + optional: true + + '@typescript-eslint/type-utils@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2)': + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2) + '@typescript-eslint/utils': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) + debug: 4.4.1 + eslint: 9.39.2(jiti@1.21.0) + tsutils: 3.21.0(typescript@5.4.2) + optionalDependencies: + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color '@typescript-eslint/type-utils@6.19.1(eslint@8.56.0)(typescript@5.4.2)': dependencies: '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.4.2) '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.4.2) - debug: 4.3.4 + debug: 4.4.1 eslint: 8.56.0 ts-api-utils: 1.3.0(typescript@5.4.2) optionalDependencies: @@ -11870,15 +13605,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@7.2.0(eslint@8.57.0)(typescript@5.4.2)': + '@typescript-eslint/type-utils@7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)': dependencies: - '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2) - '@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.9.3) + '@typescript-eslint/utils': 7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.2) + eslint: 9.39.2(jiti@1.21.0) + ts-api-utils: 1.3.0(typescript@5.9.3) optionalDependencies: - typescript: 5.4.2 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + debug: 4.4.1 + eslint: 9.39.2(jiti@1.21.0) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -11890,11 +13637,13 @@ snapshots: '@typescript-eslint/types@7.2.0': {} + '@typescript-eslint/types@8.50.0': {} + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 + debug: 4.4.1 globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 @@ -11904,11 +13653,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.4.1 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.0 + tsutils: 3.21.0(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/typescript-estree@6.19.1(typescript@5.4.2)': dependencies: '@typescript-eslint/types': 6.19.1 '@typescript-eslint/visitor-keys': 6.19.1 - debug: 4.3.4 + debug: 4.4.1 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -11923,7 +13686,7 @@ snapshots: dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 + debug: 4.4.1 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -11934,18 +13697,33 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.2)': + '@typescript-eslint/typescript-estree@7.2.0(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.4 + debug: 4.4.1 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.2) + ts-api-utils: 1.3.0(typescript@5.9.3) optionalDependencies: - typescript: 5.4.2 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.50.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.50.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3) + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/visitor-keys': 8.50.0 + debug: 4.4.1 + minimatch: 9.0.5 + semver: 7.6.0 + tinyglobby: 0.2.15 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -11964,6 +13742,36 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.39.2(jiti@1.21.0)) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.2) + eslint: 9.39.2(jiti@1.21.0) + eslint-scope: 5.1.1 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.39.2(jiti@1.21.0)) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.3) + eslint: 9.39.2(jiti@1.21.0) + eslint-scope: 5.1.1 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/utils@6.19.1(eslint@8.56.0)(typescript@5.4.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) @@ -11978,41 +13786,169 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@7.2.0(eslint@8.57.0)(typescript@5.4.2)': + '@typescript-eslint/utils@7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.39.2(jiti@1.21.0)) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.2.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.9.3) + eslint: 9.39.2(jiti@1.21.0) + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.0)) + '@typescript-eslint/scope-manager': 8.50.0 + '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + eslint: 9.39.2(jiti@1.21.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@6.19.1': + dependencies: + '@typescript-eslint/types': 6.19.1 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@7.2.0': + dependencies: + '@typescript-eslint/types': 7.2.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@8.50.0': + dependencies: + '@typescript-eslint/types': 8.50.0 + eslint-visitor-keys: 4.2.1 + + '@ungap/structured-clone@1.2.0': {} + + '@vitejs/plugin-react@5.1.2(vite@7.3.0(@types/node@24.10.4)(jiti@1.21.0)(terser@5.43.1))': + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.5) + '@rolldown/pluginutils': 1.0.0-beta.53 + '@types/babel__core': 7.20.5 + react-refresh: 0.18.0 + vite: 7.3.0(@types/node@24.10.4)(jiti@1.21.0)(terser@5.43.1) + transitivePeerDependencies: + - supports-color + + '@vitest/coverage-istanbul@4.0.18(vitest@4.0.18(@types/node@20.11.28)(jiti@1.21.0)(jsdom@16.7.0)(terser@5.43.1))': + dependencies: + '@istanbuljs/schema': 0.1.3 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.2.0 + magicast: 0.5.1 + obug: 2.1.1 + tinyrainbow: 3.0.3 + vitest: 4.0.18(@types/node@20.11.28)(jiti@1.21.0)(jsdom@16.7.0)(terser@5.43.1) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@4.0.18': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 + chai: 6.2.2 + tinyrainbow: 3.0.3 + + '@vitest/mocker@4.0.18(vite@7.3.0(@types/node@20.11.28)(jiti@1.21.0)(terser@5.43.1))': + dependencies: + '@vitest/spy': 4.0.18 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.3.0(@types/node@20.11.28)(jiti@1.21.0)(terser@5.43.1) + + '@vitest/pretty-format@4.0.18': + dependencies: + tinyrainbow: 3.0.3 + + '@vitest/runner@4.0.18': + dependencies: + '@vitest/utils': 4.0.18 + pathe: 2.0.3 + + '@vitest/snapshot@4.0.18': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.2.0 - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2) - eslint: 8.57.0 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - - typescript + '@vitest/pretty-format': 4.0.18 + magic-string: 0.30.21 + pathe: 2.0.3 - '@typescript-eslint/visitor-keys@5.62.0': + '@vitest/spy@4.0.18': {} + + '@vitest/utils@4.0.18': dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 + '@vitest/pretty-format': 4.0.18 + tinyrainbow: 3.0.3 - '@typescript-eslint/visitor-keys@6.19.1': + '@volar/language-core@2.4.27': dependencies: - '@typescript-eslint/types': 6.19.1 - eslint-visitor-keys: 3.4.3 + '@volar/source-map': 2.4.27 - '@typescript-eslint/visitor-keys@6.21.0': + '@volar/source-map@2.4.27': {} + + '@volar/typescript@2.4.27': dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 + '@volar/language-core': 2.4.27 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 - '@typescript-eslint/visitor-keys@7.2.0': + '@vue/compiler-core@3.5.27': dependencies: - '@typescript-eslint/types': 7.2.0 - eslint-visitor-keys: 3.4.3 + '@babel/parser': 7.28.5 + '@vue/shared': 3.5.27 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 - '@ungap/structured-clone@1.2.0': {} + '@vue/compiler-dom@3.5.27': + dependencies: + '@vue/compiler-core': 3.5.27 + '@vue/shared': 3.5.27 + + '@vue/compiler-vue2@2.7.16': + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/language-core@2.2.0(typescript@5.4.2)': + dependencies: + '@volar/language-core': 2.4.27 + '@vue/compiler-dom': 3.5.27 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.27 + alien-signals: 0.4.14 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.4.2 + + '@vue/shared@3.5.27': {} '@webassemblyjs/ast@1.12.1': dependencies: @@ -12340,6 +14276,10 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 + ajv-draft-04@1.0.0(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + ajv-errors@1.0.1(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -12352,6 +14292,10 @@ snapshots: optionalDependencies: ajv: 8.17.1 + ajv-formats@3.0.1(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -12380,6 +14324,13 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 + ajv@8.13.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -12387,6 +14338,8 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + alien-signals@0.4.14: {} + alphanum-sort@1.0.2: {} ansi-align@3.0.1: @@ -12471,8 +14424,6 @@ snapshots: array-equal@1.0.2: {} - array-find-index@1.0.2: {} - array-flatten@1.1.1: {} array-ify@1.0.0: {} @@ -12557,7 +14508,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.22.5 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 @@ -12580,6 +14531,8 @@ snapshots: object.assign: 4.1.5 util: 0.10.4 + assertion-error@2.0.1: {} + assign-symbols@1.0.0: {} ast-metadata-inferer@0.8.0: @@ -12655,6 +14608,20 @@ snapshots: transitivePeerDependencies: - supports-color + babel-jest@27.5.1(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 27.5.1(@babel/core@7.28.5) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + babel-loader@8.3.0(@babel/core@7.24.0)(webpack@4.47.0): dependencies: '@babel/core': 7.24.0 @@ -12682,7 +14649,7 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.27.1 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -12692,8 +14659,8 @@ snapshots: babel-plugin-jest-hoist@27.5.1: dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.5 @@ -12716,6 +14683,15 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.28.5): + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.28.5) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.24.0): dependencies: '@babel/core': 7.24.0 @@ -12724,6 +14700,14 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.28.5) + core-js-compat: 3.36.0 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.24.0): dependencies: '@babel/core': 7.24.0 @@ -12731,6 +14715,13 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.28.5) + transitivePeerDependencies: + - supports-color + babel-plugin-transform-react-remove-prop-types@0.4.24: {} babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.0): @@ -12749,12 +14740,34 @@ snapshots: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.0) + babel-preset-current-node-syntax@1.0.1(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5) + babel-preset-jest@27.5.1(@babel/core@7.24.0): dependencies: '@babel/core': 7.24.0 babel-plugin-jest-hoist: 27.5.1 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.0) + babel-preset-jest@27.5.1(@babel/core@7.28.5): + dependencies: + '@babel/core': 7.28.5 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.28.5) + babel-preset-react-app@10.0.1: dependencies: '@babel/core': 7.24.0 @@ -12982,10 +14995,6 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.4) - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -13138,7 +15147,7 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 caniuse-lite: 1.0.30001737 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 @@ -13151,6 +15160,8 @@ snapshots: caseless@0.12.0: {} + chai@6.2.2: {} + chalk@2.4.1: dependencies: ansi-styles: 3.2.1 @@ -13358,8 +15369,6 @@ snapshots: commander@8.3.0: {} - commenting@1.1.0: {} - commitizen@4.3.0(@types/node@20.11.28)(typescript@5.4.2): dependencies: cachedir: 2.3.0 @@ -13391,6 +15400,8 @@ snapshots: array-ify: 1.0.0 dot-prop: 5.3.0 + compare-versions@6.1.1: {} + component-emitter@1.3.1: {} compressible@2.0.18: @@ -13441,6 +15452,10 @@ snapshots: readable-stream: 2.3.8 typedarray: 0.0.6 + confbox@0.1.8: {} + + confbox@0.2.2: {} + configstore@5.0.1: dependencies: dot-prop: 5.3.0 @@ -13631,6 +15646,12 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crypto-browserify@3.12.0: dependencies: browserify-cipher: 1.0.1 @@ -13863,6 +15884,8 @@ snapshots: csstype@3.1.3: {} + csstype@3.2.3: {} + cyclist@1.0.2: {} cz-conventional-changelog@3.3.0(@types/node@20.11.28)(typescript@5.4.2): @@ -13899,6 +15922,8 @@ snapshots: whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 + de-indent@1.0.2: {} + debounce@1.2.1: {} debug@2.6.9: @@ -13932,7 +15957,7 @@ snapshots: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 es-get-iterator: 1.1.3 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 is-arguments: 1.1.1 is-array-buffer: 3.0.4 is-date-object: 1.0.5 @@ -14038,7 +16063,7 @@ snapshots: diff-sequences@27.5.1: {} - diff-sequences@29.6.3: {} + diff@8.0.3: {} diffie-hellman@5.0.3: dependencies: @@ -14225,6 +16250,8 @@ snapshots: entities@2.2.0: {} + entities@7.0.1: {} + env-paths@2.2.1: {} envinfo@7.11.1: {} @@ -14289,7 +16316,7 @@ snapshots: es-define-property@1.0.0: dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 es-define-property@1.0.1: {} @@ -14298,8 +16325,8 @@ snapshots: es-get-iterator@1.1.3: dependencies: call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 is-arguments: 1.1.1 is-map: 2.0.3 is-set: 2.0.3 @@ -14325,8 +16352,6 @@ snapshots: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 - es-module-lexer@1.4.1: {} - es-module-lexer@1.7.0: {} es-object-atoms@1.1.1: @@ -14349,6 +16374,35 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 + esbuild@0.27.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.2 + '@esbuild/android-arm': 0.27.2 + '@esbuild/android-arm64': 0.27.2 + '@esbuild/android-x64': 0.27.2 + '@esbuild/darwin-arm64': 0.27.2 + '@esbuild/darwin-x64': 0.27.2 + '@esbuild/freebsd-arm64': 0.27.2 + '@esbuild/freebsd-x64': 0.27.2 + '@esbuild/linux-arm': 0.27.2 + '@esbuild/linux-arm64': 0.27.2 + '@esbuild/linux-ia32': 0.27.2 + '@esbuild/linux-loong64': 0.27.2 + '@esbuild/linux-mips64el': 0.27.2 + '@esbuild/linux-ppc64': 0.27.2 + '@esbuild/linux-riscv64': 0.27.2 + '@esbuild/linux-s390x': 0.27.2 + '@esbuild/linux-x64': 0.27.2 + '@esbuild/netbsd-arm64': 0.27.2 + '@esbuild/netbsd-x64': 0.27.2 + '@esbuild/openbsd-arm64': 0.27.2 + '@esbuild/openbsd-x64': 0.27.2 + '@esbuild/openharmony-arm64': 0.27.2 + '@esbuild/sunos-x64': 0.27.2 + '@esbuild/win32-arm64': 0.27.2 + '@esbuild/win32-ia32': 0.27.2 + '@esbuild/win32-x64': 0.27.2 + escalade@3.1.2: {} escalade@3.2.0: {} @@ -14398,7 +16452,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2): + eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2): dependencies: '@babel/core': 7.24.0 '@babel/eslint-parser': 7.23.10(@babel/core@7.24.0)(eslint@8.57.0) @@ -14407,7 +16461,7 @@ snapshots: '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) eslint: 8.57.0 eslint-plugin-compat: 4.2.0(eslint@8.57.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2) eslint-plugin-react: 7.34.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) transitivePeerDependencies: @@ -14416,18 +16470,18 @@ snapshots: - supports-color - typescript - eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2): + eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3): dependencies: '@babel/core': 7.24.0 - '@babel/eslint-parser': 7.23.10(@babel/core@7.24.0)(eslint@8.57.0) + '@babel/eslint-parser': 7.23.10(@babel/core@7.24.0)(eslint@9.39.2(jiti@1.21.0)) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.0) '@babel/plugin-syntax-decorators': 7.24.0(@babel/core@7.24.0) '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) - eslint: 8.57.0 - eslint-plugin-compat: 4.2.0(eslint@8.57.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2) - eslint-plugin-react: 7.34.0(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) + eslint: 9.39.2(jiti@1.21.0) + eslint-plugin-compat: 4.2.0(eslint@9.39.2(jiti@1.21.0)) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + eslint-plugin-react: 7.34.0(eslint@9.39.2(jiti@1.21.0)) + eslint-plugin-react-hooks: 4.6.0(eslint@9.39.2(jiti@1.21.0)) transitivePeerDependencies: - '@typescript-eslint/eslint-plugin' - jest @@ -14438,23 +16492,23 @@ snapshots: dependencies: eslint: 8.56.0 - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@9.39.2(jiti@1.21.0))(jest@27.5.1)(typescript@5.4.2): dependencies: '@babel/core': 7.24.0 - '@babel/eslint-parser': 7.23.10(@babel/core@7.24.0)(eslint@8.57.0) + '@babel/eslint-parser': 7.23.10(@babel/core@7.24.0)(eslint@9.39.2(jiti@1.21.0)) '@rushstack/eslint-patch': 1.7.2 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2))(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) + '@typescript-eslint/parser': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 - eslint: 8.57.0 - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.34.0(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 5.11.1(eslint@8.57.0)(typescript@5.4.2) + eslint: 9.39.2(jiti@1.21.0) + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@9.39.2(jiti@1.21.0)) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2))(eslint@9.39.2(jiti@1.21.0)) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2))(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2))(eslint@9.39.2(jiti@1.21.0))(jest@27.5.1)(typescript@5.4.2) + eslint-plugin-jsx-a11y: 6.8.0(eslint@9.39.2(jiti@1.21.0)) + eslint-plugin-react: 7.34.0(eslint@9.39.2(jiti@1.21.0)) + eslint-plugin-react-hooks: 4.6.0(eslint@9.39.2(jiti@1.21.0)) + eslint-plugin-testing-library: 5.11.1(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) optionalDependencies: typescript: 5.4.2 transitivePeerDependencies: @@ -14490,12 +16544,12 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@1.21.0)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - eslint: 8.57.0 + '@typescript-eslint/parser': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) + eslint: 9.39.2(jiti@1.21.0) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color @@ -14522,15 +16576,26 @@ snapshots: lodash.memoize: 4.1.2 semver: 7.6.0 - eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@8.57.0): + eslint-plugin-compat@4.2.0(eslint@9.39.2(jiti@1.21.0)): + dependencies: + '@mdn/browser-compat-data': 5.5.15 + ast-metadata-inferer: 0.8.0 + browserslist: 4.25.4 + caniuse-lite: 1.0.30001597 + eslint: 9.39.2(jiti@1.21.0) + find-up: 5.0.0 + lodash.memoize: 4.1.2 + semver: 7.6.0 + + eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@9.39.2(jiti@1.21.0)): dependencies: '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.0) '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.0) - eslint: 8.57.0 + eslint: 9.39.2(jiti@1.21.0) lodash: 4.17.21 string-natural-compare: 3.0.1 - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2))(eslint@9.39.2(jiti@1.21.0)): dependencies: array-includes: 3.1.7 array.prototype.findlastindex: 1.2.4 @@ -14538,9 +16603,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 9.39.2(jiti@1.21.0) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@1.21.0)) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -14551,7 +16616,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/parser': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14584,35 +16649,33 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2): + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2))(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2))(eslint@9.39.2(jiti@1.21.0))(jest@27.5.1)(typescript@5.4.2): dependencies: - '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - eslint: 8.57.0 + '@typescript-eslint/experimental-utils': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) + eslint: 9.39.2(jiti@1.21.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2))(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) jest: 27.5.1 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2): + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2): dependencies: '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2) - jest: 27.5.1 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2): + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3): dependencies: - '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - eslint: 8.57.0 + '@typescript-eslint/experimental-utils': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + eslint: 9.39.2(jiti@1.21.0) optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.2))(eslint@8.57.0)(typescript@5.4.2) - jest: 27.5.1 + '@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) transitivePeerDependencies: - supports-color - typescript @@ -14637,7 +16700,27 @@ snapshots: object.entries: 1.1.7 object.fromentries: 2.0.7 - eslint-plugin-prettier@5.1.3(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@8.56.0))(eslint@8.56.0)(prettier@3.2.5): + eslint-plugin-jsx-a11y@6.8.0(eslint@9.39.2(jiti@1.21.0)): + dependencies: + '@babel/runtime': 7.24.0 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.17 + eslint: 9.39.2(jiti@1.21.0) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + + eslint-plugin-prettier@5.1.3(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.56.0)(prettier@3.2.5): dependencies: eslint: 8.56.0 prettier: 3.2.5 @@ -14651,6 +16734,25 @@ snapshots: dependencies: eslint: 8.57.0 + eslint-plugin-react-hooks@4.6.0(eslint@9.39.2(jiti@1.21.0)): + dependencies: + eslint: 9.39.2(jiti@1.21.0) + + eslint-plugin-react-hooks@7.0.1(eslint@9.39.2(jiti@1.21.0)): + dependencies: + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 + eslint: 9.39.2(jiti@1.21.0) + hermes-parser: 0.25.1 + zod: 4.2.1 + zod-validation-error: 4.0.2(zod@4.2.1) + transitivePeerDependencies: + - supports-color + + eslint-plugin-react-refresh@0.4.26(eslint@9.39.2(jiti@1.21.0)): + dependencies: + eslint: 9.39.2(jiti@1.21.0) + eslint-plugin-react@7.34.0(eslint@8.57.0): dependencies: array-includes: 3.1.7 @@ -14673,10 +16775,32 @@ snapshots: semver: 6.3.1 string.prototype.matchall: 4.0.10 - eslint-plugin-testing-library@5.11.1(eslint@8.57.0)(typescript@5.4.2): + eslint-plugin-react@7.34.0(eslint@9.39.2(jiti@1.21.0)): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2) - eslint: 8.57.0 + array-includes: 3.1.7 + array.prototype.findlast: 1.2.4 + array.prototype.flatmap: 1.3.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.3 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.17 + eslint: 9.39.2(jiti@1.21.0) + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + + eslint-plugin-testing-library@5.11.1(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2): + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2) + eslint: 9.39.2(jiti@1.21.0) transitivePeerDependencies: - supports-color - typescript @@ -14696,14 +16820,21 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + eslint-visitor-keys@2.1.0: {} eslint-visitor-keys@3.4.3: {} - eslint-webpack-plugin@3.2.0(eslint@8.57.0)(webpack@5.90.3): + eslint-visitor-keys@4.2.1: {} + + eslint-webpack-plugin@3.2.0(eslint@9.39.2(jiti@1.21.0))(webpack@5.90.3): dependencies: '@types/eslint': 8.56.5 - eslint: 8.57.0 + eslint: 9.39.2(jiti@1.21.0) jest-worker: 28.1.3 micromatch: 4.0.5 normalize-path: 3.0.0 @@ -14796,8 +16927,55 @@ snapshots: transitivePeerDependencies: - supports-color + eslint@9.39.2(jiti@1.21.0): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@1.21.0)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.3 + '@eslint/js': 9.39.2 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.1 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + optionalDependencies: + jiti: 1.21.0 + transitivePeerDependencies: + - supports-color + esm@3.2.25: {} + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + espree@9.6.1: dependencies: acorn: 8.15.0 @@ -14824,6 +17002,10 @@ snapshots: estree-walker@2.0.2: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + esutils@2.0.3: {} etag@1.8.1: {} @@ -14881,6 +17063,8 @@ snapshots: dependencies: homedir-polyfill: 1.0.3 + expect-type@1.3.0: {} + expect@27.5.1: dependencies: '@jest/types': 27.5.1 @@ -14888,14 +17072,6 @@ snapshots: jest-matcher-utils: 27.5.1 jest-message-util: 27.5.1 - expect@29.7.0: - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - express@4.18.3: dependencies: accepts: 1.3.8 @@ -14968,6 +17144,8 @@ snapshots: transitivePeerDependencies: - supports-color + exsolve@1.0.8: {} + extend-shallow@2.0.1: dependencies: is-extendable: 0.1.1 @@ -15032,7 +17210,9 @@ snapshots: dependencies: bser: 2.1.1 - fdir@6.4.6: {} + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 figgy-pudding@3.5.2: {} @@ -15044,11 +17224,9 @@ snapshots: dependencies: flat-cache: 3.2.0 - file-loader@6.2.0(webpack@4.47.0): + file-entry-cache@8.0.0: dependencies: - loader-utils: 2.0.4 - schema-utils: 3.3.0 - webpack: 4.47.0 + flat-cache: 4.0.1 file-loader@6.2.0(webpack@5.90.3): dependencies: @@ -15056,6 +17234,12 @@ snapshots: schema-utils: 3.3.0 webpack: 5.90.3 + file-loader@6.2.0(webpack@5.97.0): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.97.0(webpack-cli@5.1.4) + file-uri-to-path@1.0.0: optional: true @@ -15166,6 +17350,11 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + flat@5.0.2: {} flatted@3.3.1: {} @@ -15192,7 +17381,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.4.2)(webpack@4.47.0): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2)(webpack@5.90.3): dependencies: '@babel/code-frame': 7.24.2 '@types/json-schema': 7.0.15 @@ -15208,11 +17397,11 @@ snapshots: semver: 7.6.0 tapable: 1.1.3 typescript: 5.4.2 - webpack: 4.47.0 + webpack: 5.90.3 optionalDependencies: - eslint: 8.57.0 + eslint: 9.39.2(jiti@1.21.0) - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.4.2)(webpack@5.90.3): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)(webpack@4.47.0): dependencies: '@babel/code-frame': 7.24.2 '@types/json-schema': 7.0.15 @@ -15227,10 +17416,10 @@ snapshots: schema-utils: 2.7.0 semver: 7.6.0 tapable: 1.1.3 - typescript: 5.4.2 - webpack: 5.90.3 + typescript: 5.9.3 + webpack: 4.47.0 optionalDependencies: - eslint: 8.57.0 + eslint: 9.39.2(jiti@1.21.0) form-data@2.3.3: dependencies: @@ -15259,7 +17448,13 @@ snapshots: inherits: 2.0.4 readable-stream: 2.3.8 - fs-extra@10.1.0: + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.3.3: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 @@ -15367,7 +17562,7 @@ snapshots: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 get-tsconfig@4.7.3: dependencies: @@ -15469,6 +17664,10 @@ snapshots: dependencies: type-fest: 0.20.2 + globals@14.0.0: {} + + globals@16.5.0: {} + globalthis@1.0.3: dependencies: define-properties: 1.2.1 @@ -15484,7 +17683,7 @@ snapshots: gopd@1.0.1: dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 gopd@1.2.0: {} @@ -15588,6 +17787,12 @@ snapshots: he@1.2.0: {} + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + hex-color-regex@1.1.0: {} hmac-drbg@1.0.1: @@ -15793,6 +17998,8 @@ snapshots: ignore@5.3.1: {} + ignore@7.0.5: {} + immer@9.0.21: {} import-fresh@2.0.0: @@ -15807,6 +18014,8 @@ snapshots: import-lazy@2.1.0: {} + import-lazy@4.0.0: {} + import-local@3.1.0: dependencies: pkg-dir: 4.2.0 @@ -15885,7 +18094,7 @@ snapshots: is-array-buffer@3.0.4: dependencies: call-bind: 1.0.7 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 is-arrayish@0.2.1: {} @@ -16067,7 +18276,7 @@ snapshots: is-symbol@1.0.4: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 is-text-path@2.0.0: dependencies: @@ -16092,7 +18301,7 @@ snapshots: is-weakset@2.0.3: dependencies: call-bind: 1.0.7 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 is-windows@1.0.2: {} @@ -16133,14 +18342,24 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color + istanbul-lib-instrument@6.0.3: + dependencies: + '@babel/core': 7.28.5 + '@babel/parser': 7.28.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 @@ -16160,6 +18379,11 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 @@ -16234,10 +18458,10 @@ snapshots: jest-config@27.5.1: dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.28.5 '@jest/test-sequencer': 27.5.1 '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.24.0) + babel-jest: 27.5.1(@babel/core@7.28.5) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -16271,13 +18495,6 @@ snapshots: jest-get-type: 27.5.1 pretty-format: 27.5.1 - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - jest-docblock@27.5.1: dependencies: detect-newline: 3.1.0 @@ -16316,8 +18533,6 @@ snapshots: jest-get-type@27.5.1: {} - jest-get-type@29.6.3: {} - jest-haste-map@27.5.1: dependencies: '@jest/types': 27.5.1 @@ -16369,16 +18584,9 @@ snapshots: jest-get-type: 27.5.1 pretty-format: 27.5.1 - jest-matcher-utils@29.7.0: - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - jest-message-util@27.5.1: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.27.1 '@jest/types': 27.5.1 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -16390,7 +18598,7 @@ snapshots: jest-message-util@28.1.3: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.27.1 '@jest/types': 28.1.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -16400,18 +18608,6 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.24.2 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 @@ -16509,16 +18705,16 @@ snapshots: jest-snapshot@27.5.1: dependencies: - '@babel/core': 7.24.0 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) - '@babel/traverse': 7.24.0 - '@babel/types': 7.24.0 + '@babel/core': 7.28.5 + '@babel/generator': 7.28.5 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.28.5) + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 '@types/babel__traverse': 7.20.5 '@types/prettier': 2.7.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.0) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.28.5) chalk: 4.1.2 expect: 27.5.1 graceful-fs: 4.2.11 @@ -16552,15 +18748,6 @@ snapshots: graceful-fs: 4.2.11 picomatch: 2.3.1 - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.11.28 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - jest-validate@27.5.1: dependencies: '@jest/types': 27.5.1 @@ -16634,6 +18821,8 @@ snapshots: jiti@1.21.0: {} + jju@1.4.0: {} + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -16645,6 +18834,10 @@ snapshots: dependencies: argparse: 2.0.1 + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + jsbn@0.1.1: {} jsdom@12.2.0: @@ -16716,6 +18909,8 @@ snapshots: jsesc@2.5.2: {} + jsesc@3.1.0: {} + json-buffer@3.0.0: {} json-buffer@3.0.1: {} @@ -16798,6 +18993,8 @@ snapshots: klona@2.0.6: {} + kolorist@1.8.0: {} + language-subtag-registry@0.3.22: {} language-tags@1.0.9: @@ -16894,6 +19091,12 @@ snapshots: local-access@1.1.0: {} + local-pkg@1.1.2: + dependencies: + mlly: 1.8.0 + pkg-types: 2.3.0 + quansync: 0.2.11 + locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -16991,13 +19194,15 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.17: + magic-string@0.30.21: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 - magic-string@0.30.8: + magicast@0.5.1: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + source-map-js: 1.2.1 make-dir@2.1.0: dependencies: @@ -17012,8 +19217,6 @@ snapshots: dependencies: semver: 7.6.0 - make-error@1.3.6: {} - makeerror@1.0.12: dependencies: tmpl: 1.0.5 @@ -17141,6 +19344,10 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} + minimatch@10.0.3: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -17153,6 +19360,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + minimist@1.2.7: {} minimist@1.2.8: {} @@ -17215,7 +19426,12 @@ snapshots: mkdirp@1.0.4: {} - moment@2.30.1: {} + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 move-concurrently@1.0.1: dependencies: @@ -17236,6 +19452,8 @@ snapshots: ms@2.1.3: {} + muggle-string@0.4.1: {} + multicast-dns@7.2.5: dependencies: dns-packet: 5.6.1 @@ -17252,6 +19470,8 @@ snapshots: nan@2.19.0: optional: true + nanoid@3.3.11: {} + nanoid@3.3.7: {} nanomatch@1.2.13: @@ -17468,6 +19688,8 @@ snapshots: obuf@1.1.2: {} + obug@2.1.1: {} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -17596,8 +19818,6 @@ snapshots: registry-url: 5.1.0 semver: 6.3.1 - package-name-regex@2.0.6: {} - pako@1.0.11: {} parallel-transform@1.2.0: @@ -17635,7 +19855,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.27.1 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -17659,6 +19879,8 @@ snapshots: path-browserify@0.0.1: {} + path-browserify@1.0.1: {} + path-dirname@1.0.2: optional: true @@ -17687,6 +19909,8 @@ snapshots: path-type@4.0.0: {} + pathe@2.0.3: {} + pbkdf2@3.1.2: dependencies: create-hash: 1.2.0 @@ -17705,6 +19929,8 @@ snapshots: picomatch@2.3.1: {} + picomatch@4.0.3: {} + pidtree@0.6.0: {} pify@2.3.0: {} @@ -17725,15 +19951,27 @@ snapshots: dependencies: find-up: 6.3.0 + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + pkg-up@3.1.0: dependencies: find-up: 3.0.0 pn@1.1.0: {} - pnp-webpack-plugin@1.7.0(typescript@5.4.2): + pnp-webpack-plugin@1.7.0(typescript@5.9.3): dependencies: - ts-pnp: 1.2.0(typescript@5.4.2) + ts-pnp: 1.2.0(typescript@5.9.3) transitivePeerDependencies: - typescript @@ -17785,7 +20023,7 @@ snapshots: postcss-colormin@4.0.3: dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 color: 3.2.1 has: 1.0.4 postcss: 7.0.39 @@ -17793,7 +20031,7 @@ snapshots: postcss-colormin@5.3.1(postcss@8.4.35): dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.35 @@ -17806,7 +20044,7 @@ snapshots: postcss-convert-values@5.1.3(postcss@8.4.35): dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 postcss: 8.4.35 postcss-value-parser: 4.2.0 @@ -17977,7 +20215,7 @@ snapshots: postcss-merge-rules@4.0.3: dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 caniuse-api: 3.0.0 cssnano-util-same-parent: 4.0.1 postcss: 7.0.39 @@ -17986,7 +20224,7 @@ snapshots: postcss-merge-rules@5.1.4(postcss@8.4.35): dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.4.35) postcss: 8.4.35 @@ -18019,7 +20257,7 @@ snapshots: postcss-minify-params@4.0.2: dependencies: alphanum-sort: 1.0.2 - browserslist: 4.23.0 + browserslist: 4.25.4 cssnano-util-get-arguments: 4.0.0 postcss: 7.0.39 postcss-value-parser: 3.3.1 @@ -18027,7 +20265,7 @@ snapshots: postcss-minify-params@5.1.4(postcss@8.4.35): dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 cssnano-utils: 3.1.0(postcss@8.4.35) postcss: 8.4.35 postcss-value-parser: 4.2.0 @@ -18143,13 +20381,13 @@ snapshots: postcss-normalize-unicode@4.0.1: dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 postcss: 7.0.39 postcss-value-parser: 3.3.1 postcss-normalize-unicode@5.1.1(postcss@8.4.35): dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 postcss: 8.4.35 postcss-value-parser: 4.2.0 @@ -18274,14 +20512,14 @@ snapshots: postcss-reduce-initial@4.0.3: dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 caniuse-api: 3.0.0 has: 1.0.4 postcss: 7.0.39 postcss-reduce-initial@5.1.2(postcss@8.4.35): dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 caniuse-api: 3.0.0 postcss: 8.4.35 @@ -18361,7 +20599,13 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.0.2 - preact-cli@3.5.1(@types/babel__core@7.20.5)(eslint@8.57.0)(preact-render-to-string@6.4.0(preact@10.19.6))(preact@10.19.6)(typescript@5.4.2): + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + preact-cli@3.5.1(@types/babel__core@7.20.5)(eslint@9.39.2(jiti@1.21.0))(preact-render-to-string@6.4.0(preact@10.19.6))(preact@10.19.6)(typescript@5.9.3): dependencies: '@babel/core': 7.24.0 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.24.0) @@ -18392,8 +20636,8 @@ snapshots: ejs-loader: 0.5.0 envinfo: 7.11.1 esm: 3.2.25 - file-loader: 6.2.0(webpack@4.47.0) - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.4.2)(webpack@4.47.0) + file-loader: 6.2.0(webpack@5.97.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3)(webpack@4.47.0) get-port: 5.1.1 gittar: 0.1.1 glob: 8.1.0 @@ -18408,7 +20652,7 @@ snapshots: native-url: 0.3.4 optimize-css-assets-webpack-plugin: 6.0.1(webpack@4.47.0) ora: 5.4.1 - pnp-webpack-plugin: 1.7.0(typescript@5.4.2) + pnp-webpack-plugin: 1.7.0(typescript@5.9.3) postcss: 8.4.35 postcss-load-config: 3.1.4(postcss@8.4.35) postcss-loader: 4.3.0(postcss@8.4.35)(webpack@4.47.0) @@ -18445,7 +20689,7 @@ snapshots: workbox-strategies: 6.6.0 workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@4.47.0) optionalDependencies: - typescript: 5.4.2 + typescript: 5.9.3 transitivePeerDependencies: - '@types/babel__core' - bluebird @@ -18508,12 +20752,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.2.0 - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.2.0 - pretty-format@3.8.0: {} process-nextick-args@2.0.1: {} @@ -18597,7 +20835,7 @@ snapshots: qs@6.11.0: dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 qs@6.13.0: dependencies: @@ -18609,6 +20847,8 @@ snapshots: qs@6.5.3: {} + quansync@0.2.11: {} + querystring-es3@0.2.1: {} querystring@0.2.1: {} @@ -18661,7 +20901,7 @@ snapshots: regenerator-runtime: 0.13.11 whatwg-fetch: 3.6.20 - react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.4.2)(webpack@5.90.3): + react-dev-utils@12.0.1(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2)(webpack@5.90.3): dependencies: '@babel/code-frame': 7.24.2 address: 1.2.2 @@ -18672,7 +20912,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.4.2)(webpack@5.90.3) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2)(webpack@5.90.3) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -18701,6 +20941,11 @@ snapshots: react: 18.2.0 scheduler: 0.23.0 + react-dom@19.2.3(react@19.2.3): + dependencies: + react: 19.2.3 + scheduler: 0.27.0 + react-error-overlay@6.0.11: {} react-is@16.13.1: {} @@ -18713,6 +20958,8 @@ snapshots: react-refresh@0.11.0: {} + react-refresh@0.18.0: {} + react-router-dom@6.22.3(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@remix-run/router': 1.15.3 @@ -18725,7 +20972,7 @@ snapshots: '@remix-run/router': 1.15.3 react: 18.2.0 - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(@types/babel__core@7.20.5)(@types/webpack@4.41.38)(eslint@8.57.0)(react@18.2.0)(type-fest@3.13.1)(typescript@5.4.2): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(@types/babel__core@7.20.5)(@types/webpack@4.41.38)(eslint@9.39.2(jiti@1.21.0))(react@18.2.0)(type-fest@3.13.1)(typescript@5.4.2): dependencies: '@babel/core': 7.24.0 '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(@types/webpack@4.41.38)(react-refresh@0.11.0)(type-fest@3.13.1)(webpack-dev-server@4.15.1(webpack@5.90.3))(webpack@5.90.3) @@ -18742,9 +20989,9 @@ snapshots: css-minimizer-webpack-plugin: 3.4.1(webpack@5.90.3) dotenv: 10.0.0 dotenv-expand: 5.1.0 - eslint: 8.57.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1)(typescript@5.4.2) - eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.90.3) + eslint: 9.39.2(jiti@1.21.0) + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@9.39.2(jiti@1.21.0))(jest@27.5.1)(typescript@5.4.2) + eslint-webpack-plugin: 3.2.0(eslint@9.39.2(jiti@1.21.0))(webpack@5.90.3) file-loader: 6.2.0(webpack@5.90.3) fs-extra: 10.1.0 html-webpack-plugin: 5.6.0(webpack@5.90.3) @@ -18761,7 +21008,7 @@ snapshots: prompts: 2.4.2 react: 18.2.0 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.4.2)(webpack@5.90.3) + react-dev-utils: 12.0.1(eslint@9.39.2(jiti@1.21.0))(typescript@5.4.2)(webpack@5.90.3) react-refresh: 0.11.0 resolve: 1.22.8 resolve-url-loader: 4.0.0 @@ -18816,6 +21063,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + react@19.2.3: {} + read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -18863,7 +21112,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.22.5 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 globalthis: 1.0.3 which-builtin-type: 1.1.3 @@ -19070,35 +21319,9 @@ snapshots: dependencies: magic-string: 0.25.9 - rollup-plugin-dts@6.2.1(rollup@4.43.0)(typescript@5.4.2): - dependencies: - magic-string: 0.30.17 - rollup: 4.43.0 - typescript: 5.4.2 - optionalDependencies: - '@babel/code-frame': 7.27.1 - - rollup-plugin-license@3.6.0(rollup@4.43.0): - dependencies: - commenting: 1.1.0 - fdir: 6.4.6 - lodash: 4.17.21 - magic-string: 0.30.8 - moment: 2.30.1 - package-name-regex: 2.0.6 - rollup: 4.43.0 - spdx-expression-validate: 2.0.0 - spdx-satisfies: 5.0.1 - transitivePeerDependencies: - - picomatch - - rollup-plugin-peer-deps-external@2.2.4(rollup@4.43.0): - dependencies: - rollup: 4.43.0 - rollup-plugin-terser@7.0.2(rollup@2.79.2): dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.27.1 jest-worker: 26.6.2 rollup: 2.79.2 serialize-javascript: 4.0.0 @@ -19199,6 +21422,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + scheduler@0.27.0: {} + schema-utils@1.0.0: dependencies: ajv: 6.12.6 @@ -19254,6 +21479,10 @@ snapshots: semver@6.3.1: {} + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + semver@7.6.0: dependencies: lru-cache: 6.0.0 @@ -19341,7 +21570,7 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 gopd: 1.0.1 has-property-descriptors: 1.0.2 @@ -19432,6 +21661,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -19520,6 +21751,8 @@ snapshots: source-map-js@1.0.2: {} + source-map-js@1.2.1: {} + source-map-loader@1.1.3(webpack@4.47.0): dependencies: abab: 2.0.6 @@ -19564,33 +21797,6 @@ snapshots: sourcemap-codec@1.4.8: {} - spdx-compare@1.0.0: - dependencies: - array-find-index: 1.0.2 - spdx-expression-parse: 3.0.1 - spdx-ranges: 2.1.1 - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 - - spdx-expression-validate@2.0.0: - dependencies: - spdx-expression-parse: 3.0.1 - - spdx-license-ids@3.0.17: {} - - spdx-ranges@2.1.1: {} - - spdx-satisfies@5.0.1: - dependencies: - spdx-compare: 1.0.0 - spdx-expression-parse: 3.0.1 - spdx-ranges: 2.1.1 - spdy-transport@3.0.0: dependencies: debug: 4.4.1 @@ -19648,6 +21854,8 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + stackback@0.0.2: {} + stackframe@1.3.4: {} static-eval@2.0.2: @@ -19663,6 +21871,8 @@ snapshots: statuses@2.0.1: {} + std-env@3.10.0: {} + stealthy-require@1.1.1: {} stop-iteration-iterator@1.0.0: @@ -19812,19 +22022,19 @@ snapshots: stylehacks@4.0.3: dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 postcss: 7.0.39 postcss-selector-parser: 3.1.2 stylehacks@5.1.1(postcss@8.4.35): dependencies: - browserslist: 4.23.0 + browserslist: 4.25.4 postcss: 8.4.35 postcss-selector-parser: 6.0.16 sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 glob: 10.3.10 lines-and-columns: 1.2.4 @@ -20058,8 +22268,19 @@ snapshots: timsort@0.3.0: {} + tinybench@2.9.0: {} + tinydate@1.3.0: {} + tinyexec@1.0.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinyrainbow@3.0.3: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -20130,27 +22351,19 @@ snapshots: dependencies: typescript: 5.4.2 - ts-interface-checker@0.1.13: {} + ts-api-utils@1.3.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 - ts-jest@29.1.2(@babel/core@7.24.0)(@jest/types@29.6.3)(jest@27.5.1)(typescript@5.4.2): + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - jest: 27.5.1 - jest-util: 29.7.0 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.6.0 - typescript: 5.4.2 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.24.0 - '@jest/types': 29.6.3 + typescript: 5.9.3 + + ts-interface-checker@0.1.13: {} - ts-pnp@1.2.0(typescript@5.4.2): + ts-pnp@1.2.0(typescript@5.9.3): optionalDependencies: - typescript: 5.4.2 + typescript: 5.9.3 tsconfig-paths@3.15.0: dependencies: @@ -20170,6 +22383,11 @@ snapshots: tslib: 1.14.1 typescript: 5.4.2 + tsutils@3.21.0(typescript@5.9.3): + dependencies: + tslib: 1.14.1 + typescript: 5.9.3 + tty-browserify@0.0.0: {} tunnel-agent@0.6.0: @@ -20247,8 +22465,25 @@ snapshots: shiki: 0.14.7 typescript: 5.4.2 + typescript-eslint@8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3))(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@1.21.0))(typescript@5.9.3) + eslint: 9.39.2(jiti@1.21.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + typescript@5.4.2: {} + typescript@5.8.2: {} + + typescript@5.9.3: {} + + ufo@1.6.3: {} + uglify-js@3.4.10: dependencies: commander: 2.19.0 @@ -20265,7 +22500,7 @@ snapshots: undici-types@5.26.5: {} - undici-types@7.8.0: {} + undici-types@7.16.0: {} unfetch@4.2.0: {} @@ -20364,7 +22599,7 @@ snapshots: schema-utils: 3.3.0 webpack: 4.47.0 optionalDependencies: - file-loader: 6.2.0(webpack@4.47.0) + file-loader: 6.2.0(webpack@5.97.0) url-parse-lax@3.0.0: dependencies: @@ -20393,7 +22628,7 @@ snapshots: dependencies: define-properties: 1.2.1 es-abstract: 1.22.5 - has-symbols: 1.0.3 + has-symbols: 1.1.0 object.getownpropertydescriptors: 2.1.7 util.promisify@1.1.2: @@ -20442,12 +22677,101 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 + vite-plugin-banner@0.8.1: {} + + vite-plugin-dts@4.5.4(@types/node@20.11.28)(rollup@4.43.0)(typescript@5.4.2)(vite@7.3.0(@types/node@20.11.28)(jiti@1.21.0)(terser@5.43.1)): + dependencies: + '@microsoft/api-extractor': 7.55.2(@types/node@20.11.28) + '@rollup/pluginutils': 5.3.0(rollup@4.43.0) + '@volar/typescript': 2.4.27 + '@vue/language-core': 2.2.0(typescript@5.4.2) + compare-versions: 6.1.1 + debug: 4.4.1 + kolorist: 1.8.0 + local-pkg: 1.1.2 + magic-string: 0.30.21 + typescript: 5.4.2 + optionalDependencies: + vite: 7.3.0(@types/node@20.11.28)(jiti@1.21.0)(terser@5.43.1) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + + vite@7.3.0(@types/node@20.11.28)(jiti@1.21.0)(terser@5.43.1): + dependencies: + esbuild: 0.27.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.43.0 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 20.11.28 + fsevents: 2.3.3 + jiti: 1.21.0 + terser: 5.43.1 + + vite@7.3.0(@types/node@24.10.4)(jiti@1.21.0)(terser@5.43.1): + dependencies: + esbuild: 0.27.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.43.0 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.10.4 + fsevents: 2.3.3 + jiti: 1.21.0 + terser: 5.43.1 + + vitest@4.0.18(@types/node@20.11.28)(jiti@1.21.0)(jsdom@16.7.0)(terser@5.43.1): + dependencies: + '@vitest/expect': 4.0.18 + '@vitest/mocker': 4.0.18(vite@7.3.0(@types/node@20.11.28)(jiti@1.21.0)(terser@5.43.1)) + '@vitest/pretty-format': 4.0.18 + '@vitest/runner': 4.0.18 + '@vitest/snapshot': 4.0.18 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 + es-module-lexer: 1.7.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.3.0(@types/node@20.11.28)(jiti@1.21.0)(terser@5.43.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 20.11.28 + jsdom: 16.7.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + vm-browserify@1.1.2: {} vscode-oniguruma@1.7.0: {} vscode-textmate@8.0.0: {} + vscode-uri@3.1.0: {} + w3c-hr-time@1.0.2: dependencies: browser-process-hrtime: 1.0.0 @@ -20770,7 +23094,7 @@ snapshots: browserslist: 4.23.0 chrome-trace-event: 1.0.3 enhanced-resolve: 5.16.0 - es-module-lexer: 1.4.1 + es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -20889,7 +23213,7 @@ snapshots: available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-tostringtag: 1.0.2 which@1.3.1: @@ -20900,6 +23224,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + widest-line@3.1.0: dependencies: string-width: 4.2.3 @@ -20919,15 +23248,15 @@ snapshots: workbox-build@6.6.0(@types/babel__core@7.20.5): dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) - '@babel/core': 7.24.0 - '@babel/preset-env': 7.24.0(@babel/core@7.24.0) + '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) + '@babel/core': 7.28.5 + '@babel/preset-env': 7.24.0(@babel/core@7.28.5) '@babel/runtime': 7.24.0 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.0)(@types/babel__core@7.20.5)(rollup@2.79.2) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@2.79.2) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.12.0 + ajv: 8.17.1 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 @@ -21139,3 +23468,9 @@ snapshots: yocto-queue@0.1.0: {} yocto-queue@1.0.0: {} + + zod-validation-error@4.0.2(zod@4.2.1): + dependencies: + zod: 4.2.1 + + zod@4.2.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 84f1fafc..c9e19fa1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,7 @@ packages: - - "examples/*" - - "./" + - examples/* + - ./ + +onlyBuiltDependencies: + - core-js + - core-js-pure diff --git a/resources/license_banner.txt b/resources/license_banner.txt deleted file mode 100644 index 903f6f6d..00000000 --- a/resources/license_banner.txt +++ /dev/null @@ -1,2 +0,0 @@ -FingerprintJS Pro React v<%= pkg.version %> - Copyright (c) FingerprintJS, Inc, <%= new Date().getFullYear() %> (https://fingerprint.com) -Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. \ No newline at end of file diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index 6047cffb..00000000 --- a/rollup.config.js +++ /dev/null @@ -1,64 +0,0 @@ -import typescript from '@rollup/plugin-typescript' -import jsonPlugin from '@rollup/plugin-json' -import external from 'rollup-plugin-peer-deps-external' -import { dts } from 'rollup-plugin-dts' -import licensePlugin from 'rollup-plugin-license' -import banner2 from 'rollup-plugin-banner2' -import { join } from 'path' -const { dependencies } = require('./package.json') - -const inputFile = 'src/index.ts' -const outputDirectory = 'dist' - -const commonBanner = licensePlugin({ - banner: { - content: { - file: join(__dirname, 'resources', 'license_banner.txt'), - }, - }, -}) - -const commonInput = { - input: inputFile, - plugins: [jsonPlugin(), typescript(), external(), commonBanner, banner2(() => `'use client';\n`)], -} - -const commonOutput = { - exports: 'named', - sourcemap: true, -} - -const RollupConfig = [ - // NPM bundles. They have all the dependencies excluded for end code size optimization. - { - ...commonInput, - external: Object.keys(dependencies), - output: [ - // CJS for usage with `require()` - { - ...commonOutput, - file: `${outputDirectory}/fp-pro-react.cjs.js`, - format: 'cjs', - }, - - // ESM for usage with `import` - { - ...commonOutput, - file: `${outputDirectory}/fp-pro-react.esm.js`, - format: 'es', - }, - ], - }, - - // TypeScript definition - { - ...commonInput, - plugins: [dts(), commonBanner], - output: { - file: `${outputDirectory}/fp-pro-react.d.ts`, - format: 'es', - }, - }, -] - -export default RollupConfig diff --git a/scripts/detect-env.js b/scripts/detect-env.js index d0469ff8..0be5fe41 100644 --- a/scripts/detect-env.js +++ b/scripts/detect-env.js @@ -32,7 +32,7 @@ function writeDetectedEnv(env, version) { const fullDistPath = path.resolve(__dirname, '../', distPath) const contents = fs.readFileSync(fullDistPath).toString() - const newContents = contents.replace(token, JSON.stringify({ name: env, version })) + const newContents = contents.replace(token, JSON.stringify({ name: env, version }).replace(/"/g, '\\"')) fs.writeFileSync(fullDistPath, newContents) }) diff --git a/src/components/fingerprint-provider.tsx b/src/components/fingerprint-provider.tsx new file mode 100644 index 00000000..d49afe76 --- /dev/null +++ b/src/components/fingerprint-provider.tsx @@ -0,0 +1,137 @@ +import { PropsWithChildren, useCallback, useEffect, useMemo, useRef } from 'react' +import { FingerprintContext } from '../fingerprint-context' +import { Agent, GetOptions, start, StartOptions, default as Loader } from '@fingerprint/agent' +import * as packageInfo from '../../package.json' +import { isSSR } from '../ssr' +import { WithEnvironment } from './with-environment' +import type { EnvDetails } from '../env.types' +import { usePromiseStore } from '../utils/use-promise-store' + +export interface FingerprintProviderOptions extends StartOptions { + /** + * If set to `true`, will force the agent to be rebuilt with the new options. Should be used with caution + * since it can be triggered too often (e.g. on every render) and negatively affect performance of the JS agent. + */ + forceRebuild?: boolean +} + +/** + * @example + * ```jsx + * + * + * + * ``` + * + * Provides the FpContext to its child components. + * + * @privateRemarks + * This is just a wrapper around the actual provider. + * For the implementation, see `ProviderWithEnv` component. + */ +export function FingerprintProvider(props: PropsWithChildren) { + const propsWithEnv = props as PropsWithChildren + + return ( + + + + ) +} + +interface ProviderWithEnvProps extends FingerprintProviderOptions { + /** + * Contains details about the env we're currently running in (e.g. framework, version) + */ + env: EnvDetails + getOptions?: GetOptions +} + +function isLoader(value: unknown): value is Pick { + return typeof value === 'object' && value !== null && 'start' in value && typeof value.start === 'function' +} + +function getCustomLoader(props: Record) { + if ('customAgent' in props && isLoader(props.customAgent)) { + return props.customAgent + } + + return undefined +} + +function ProviderWithEnv({ + children, + forceRebuild, + env, + getOptions, + ...agentOptions +}: PropsWithChildren) { + const createClient = useCallback(() => { + const customLoader = getCustomLoader(agentOptions) + + let integrationInfo = `react-sdk/${packageInfo.version}` + + if (env) { + const envInfo = env.version ? `${env.name}/${env.version}` : env.name + + integrationInfo += `/${envInfo}` + } + + const mergedIntegrationInfo = [...(agentOptions.integrationInfo || []), integrationInfo] + + const startParams = { + ...agentOptions, + integrationInfo: mergedIntegrationInfo, + } + + return customLoader ? customLoader.start(startParams) : start(startParams) + }, [agentOptions, env]) + + const clientRef = useRef() + + const getClient = useCallback(() => { + if (isSSR()) { + throw new Error('FingerprintProvider client cannot be used in SSR') + } + + if (!clientRef.current) { + clientRef.current = createClient() + } + + return clientRef.current + }, [createClient]) + + const { doRequest } = usePromiseStore() + + const getVisitorData = useCallback( + (options?: GetOptions) => { + const client = getClient() + + const mergedOptions = { + ...getOptions, + ...options, + } + + return doRequest(async () => client.get(mergedOptions), mergedOptions) + }, + [doRequest, getClient, getOptions] + ) + + const contextValue = useMemo(() => { + return { + getVisitorData, + } + }, [getVisitorData]) + + useEffect(() => { + // By default, the client is always initialized once during the first render and won't be updated + // if the configuration changes. Use `forceRebuild` flag to disable this behaviour. + if (!clientRef.current || forceRebuild) { + clientRef.current = createClient() + } + }, [forceRebuild, agentOptions, getOptions, createClient]) + + return {children} +} diff --git a/src/components/fpjs-provider.tsx b/src/components/fpjs-provider.tsx deleted file mode 100644 index f13b8b72..00000000 --- a/src/components/fpjs-provider.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import { PropsWithChildren, useCallback, useEffect, useMemo, useRef } from 'react' -import { FpjsContext } from '../fpjs-context' -import { FpjsClient, FpjsClientOptions, FingerprintJSPro } from '@fingerprintjs/fingerprintjs-pro-spa' -import * as packageInfo from '../../package.json' -import { isSSR } from '../ssr' -import { waitUntil } from '../utils/wait-until' -import { WithEnvironment } from './with-environment' -import type { EnvDetails } from '../env.types' - -export interface CustomAgent { - load: (options: FingerprintJSPro.LoadOptions) => Promise -} -export interface FpjsProviderOptions extends FpjsClientOptions { - /** - * If set to `true`, will force FpjsClient to be rebuilt with the new options. Should be used with caution - * since it can be triggered too often (e.g. on every render) and negatively affect performance of the JS agent. - */ - forceRebuild?: boolean - customAgent?: CustomAgent -} - -/** - * @example - * ```jsx - * " - * }} - * cacheTime={60 * 10} - * cacheLocation={CacheLocation.LocalStorage} - * > - * - * - * ``` - * - * Provides the FpjsContext to its child components. - * - * @privateRemarks - * This is just a wrapper around the actual provider. - * For the implementation, see `ProviderWithEnv` component. - */ -export function FpjsProvider(props: PropsWithChildren) { - const propsWithEnv = props as PropsWithChildren - - return ( - - {...propsWithEnv} /> - - ) -} - -interface ProviderWithEnvProps extends FpjsProviderOptions { - /** - * Contains details about the env we're currently running in (e.g. framework, version) - */ - env: EnvDetails -} - -function ProviderWithEnv({ - children, - forceRebuild, - cache, - cacheTimeInSeconds, - cachePrefix, - cacheLocation, - customAgent, - loadOptions, - env, -}: PropsWithChildren) { - const clientRef = useRef() - const clientInitPromiseRef = useRef>() - - const clientOptions = useMemo(() => { - return { - cache, - cacheTimeInSeconds, - cachePrefix, - cacheLocation, - customAgent, - loadOptions, - } - }, [loadOptions, cache, cacheTimeInSeconds, cachePrefix, cacheLocation, customAgent]) - - const createClient = useCallback(() => { - let integrationInfo = `react-sdk/${packageInfo.version}` - - if (env) { - const envInfo = env.version ? `${env.name}/${env.version}` : env.name - - integrationInfo += `/${envInfo}` - } - - const parsedClientOptions = { - ...clientOptions, - loadOptions: { - ...loadOptions, - integrationInfo: [...(loadOptions.integrationInfo || []), integrationInfo], - }, - } - - const createdClient = new FpjsClient(parsedClientOptions) - - clientInitPromiseRef.current = createdClient.init() - - return createdClient - }, [clientOptions, env, loadOptions]) - - const getClient = useCallback(async () => { - if (isSSR()) { - throw new Error('FpjsProvider client cannot be used in SSR') - } - - if (!clientRef.current) { - await waitUntil({ - checkCondition: () => Boolean(clientRef.current), - }).catch(async () => { - /** - * We did timeout waiting for ideal condition to create client (eg: env detection) - * Attempt to create client now, potentially without some additional information that might be useful but are not required. - * */ - createClient() - }) - } - - return clientRef.current! - }, [createClient]) - - const getVisitorData = useCallback( - async (options?: FingerprintJSPro.GetOptions, ignoreCache?: boolean) => { - const client = await getClient() - - await clientInitPromiseRef.current - - return client.getVisitorData(options, ignoreCache) - }, - [getClient] - ) - - const clearCache = useCallback(async () => { - const client = await getClient() - - await client.clearCache() - }, [getClient]) - - const contextValue = useMemo(() => { - return { - clearCache, - getVisitorData, - } - }, [clearCache, getVisitorData]) - - useEffect(() => { - // By default, the client is always initialized once during the first render and won't be updated - // if the configuration changes. Use `forceRebuilt` flag to disable this behaviour. - if (!clientRef.current || forceRebuild) { - clientRef.current = createClient() - } - }, [forceRebuild, clientOptions, createClient]) - - return {children} -} diff --git a/src/env.types.ts b/src/env.types.ts index 62194bb1..95038743 100644 --- a/src/env.types.ts +++ b/src/env.types.ts @@ -9,3 +9,7 @@ export interface EnvDetails { name: Env version?: string } + +export function isEnvDetails(value: unknown): value is EnvDetails { + return typeof value === 'object' && value !== null && 'name' in value +} diff --git a/src/fingerprint-context.ts b/src/fingerprint-context.ts new file mode 100644 index 00000000..642799bc --- /dev/null +++ b/src/fingerprint-context.ts @@ -0,0 +1,22 @@ +import { createContext } from 'react' +import { GetOptions, GetResult } from '@fingerprint/agent' +import { QueryResult } from './query' + +export type VisitorQueryResult = QueryResult + +const stub = (): never => { + throw new Error('You forgot to wrap your component in .') +} + +const initialContext = { + getVisitorData: stub, +} + +/** + * The Fingerprint Context + */ +export interface FingerprintContextInterface { + getVisitorData: (config?: GetOptions) => Promise +} + +export const FingerprintContext = createContext(initialContext) diff --git a/src/fpjs-context.ts b/src/fpjs-context.ts deleted file mode 100644 index 6f83c008..00000000 --- a/src/fpjs-context.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { createContext } from 'react' -import { VisitorData, GetOptions, FingerprintJSPro } from '@fingerprintjs/fingerprintjs-pro-spa' - -export interface QueryResult { - /** - * Stores current query data - * */ - data?: TData - /** - * Is true while query is loading - * */ - isLoading?: boolean - /** - * Stores current query error - * */ - error?: TError -} - -export interface VisitorQueryResult extends QueryResult> { - data?: VisitorData -} - -export interface GetDataOptions extends FingerprintJSPro.GetOptions { - /** - * When set to true, the visitor data will always be fetched from our API. - * */ - ignoreCache?: boolean -} - -export interface VisitorQueryContext extends VisitorQueryResult { - /** - * Performs identification request to server and returns visitors data. - * */ - getData: (getDataOptions?: GetDataOptions) => Promise> -} - -const stub = (): never => { - throw new Error('You forgot to wrap your component in .') -} - -const initialContext = { - getVisitorData: stub, - clearCache: stub, -} - -/** - * The FingerprintJS Context - */ -export interface FpjsContextInterface { - getVisitorData: (config?: GetOptions, ignoreCache?: boolean) => Promise> - clearCache: () => void -} - -export const FpjsContext = createContext>(initialContext) diff --git a/src/get-env.ts b/src/get-env.ts index d99a2669..42359cbb 100644 --- a/src/get-env.ts +++ b/src/get-env.ts @@ -1,13 +1,12 @@ import { env } from './env' -import { EnvDetails } from './env.types' +import { EnvDetails, isEnvDetails } from './env.types' import { detectEnvironment, type DetectEnvParams } from './detect-env' -export function getEnvironment(params: DetectEnvParams) { +export function getEnvironment(params: DetectEnvParams): EnvDetails { try { - const parsedEnv = JSON.parse(env) - - if (typeof parsedEnv === 'object') { - return parsedEnv as EnvDetails + const jsonEnv = JSON.parse(env) + if (isEnvDetails(jsonEnv)) { + return jsonEnv } } catch { // Nothing here... diff --git a/src/index.ts b/src/index.ts index d241df21..9d8a4a5d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,32 +1,10 @@ -export * from './fpjs-context' -export * from './components/fpjs-provider' +import * as Fingerprint from '@fingerprint/agent' + +export * from './fingerprint-context' +export * from './components/fingerprint-provider' export * from './use-visitor-data' -export type { - FpjsContextInterface, - QueryResult, - VisitorQueryResult, - VisitorQueryContext, - GetDataOptions, -} from './fpjs-context' -export { - CacheLocation, - CacheStub, - FpjsClient, - InMemoryCache, - LocalStorageCache, - SessionStorageCache, - defaultEndpoint, - defaultScriptUrlPattern, - defaultTlsEndpoint, - FingerprintJSPro, -} from '@fingerprintjs/fingerprintjs-pro-spa' -export type { - Agent, - Cacheable, - FpjsClientOptions, - GetOptions, - ICache, - LoadOptions, - VisitorData, -} from '@fingerprintjs/fingerprintjs-pro-spa' +export * from './fingerprint-context' +export * from './query' + +export { Fingerprint } diff --git a/src/query.ts b/src/query.ts new file mode 100644 index 00000000..d1ae702a --- /dev/null +++ b/src/query.ts @@ -0,0 +1,29 @@ +export type QueryIdle = { + data: undefined + isLoading: false + isFetched: false + error: undefined +} + +export type QueryLoading = { + data: undefined + isLoading: true + isFetched: false + error: undefined +} + +export type QueryFetched = { + data: TData + isLoading: false + isFetched: true + error: undefined +} + +export type QueryError = { + data: undefined + isLoading: false + isFetched: false + error: TError +} + +export type QueryResult = QueryIdle | QueryLoading | QueryFetched | QueryError diff --git a/src/use-visitor-data.ts b/src/use-visitor-data.ts index 685d3249..cf1d917f 100644 --- a/src/use-visitor-data.ts +++ b/src/use-visitor-data.ts @@ -1,11 +1,25 @@ -import { FpjsContextInterface, FpjsContext, GetDataOptions, QueryResult, VisitorQueryContext } from './fpjs-context' -import { useCallback, useContext, useEffect, useState } from 'react' -import { VisitorData, FingerprintJSPro } from '@fingerprintjs/fingerprintjs-pro-spa' +import { FingerprintContext, FingerprintContextInterface, VisitorQueryResult } from './fingerprint-context' +import { useCallback, useContext, useEffect, useMemo, useState } from 'react' import deepEquals from 'fast-deep-equal' import { toError } from './utils/to-error' import { assertIsTruthy } from './utils/assert-is-truthy' +import { GetOptions, GetResult } from '@fingerprint/agent' -export type UseVisitorDataOptions = GetDataOptions +export interface UseVisitorDataConfig { + /** + * Determines whether the `getData()` method will be called immediately after the hook mounts or not + */ + immediate: boolean +} + +export type UseVisitorDataOptions = GetOptions & UseVisitorDataConfig + +export type UseVisitorDataReturn = VisitorQueryResult & { + /** + * Performs identification request to server and returns visitors data. + * */ + getData: (getDataOptions?: GetOptions) => Promise +} /** * @example @@ -17,59 +31,64 @@ export type UseVisitorDataOptions = GetDataOptions( - getOptions: UseVisitorDataOptions = {}, - config: UseVisitorDataConfig = defaultUseVisitorDataConfig -): VisitorQueryContext { +export function useVisitorData( + { immediate, ...getOptions }: UseVisitorDataOptions = { immediate: true } +): UseVisitorDataReturn { assertIsTruthy(getOptions, 'getOptions') - const { immediate } = config - const { getVisitorData } = useContext>(FpjsContext) + const { getVisitorData } = useContext(FingerprintContext) - const [currentGetOptions, setCurrentGetOptions] = useState>(getOptions) - const [queryState, setQueryState] = useState>>({ + const [currentGetOptions, setCurrentGetOptions] = useState(getOptions) + const [queryState, setQueryState] = useState({ isLoading: immediate, + data: undefined, + isFetched: false, + error: undefined, }) - const getData = useCallback['getData']>( + const getData = useCallback( async (params = {}) => { assertIsTruthy(params, 'getDataParams') - const { ignoreCache, ...getDataPassedOptions } = params - try { - setQueryState((state) => ({ ...state, isLoading: true })) - - const { ignoreCache: defaultIgnoreCache, ...getVisitorDataOptions } = currentGetOptions - - const getDataOptions: FingerprintJSPro.GetOptions = { - ...getVisitorDataOptions, - ...getDataPassedOptions, + setQueryState({ + isLoading: true, + isFetched: false, + data: undefined, + error: undefined, + }) + + const getDataOptions: GetOptions = { + ...currentGetOptions, + ...params, } - const result = await getVisitorData( - getDataOptions, - typeof ignoreCache === 'boolean' ? ignoreCache : defaultIgnoreCache - ) - setQueryState((state) => ({ ...state, data: result, isLoading: false, error: undefined })) + const result = await getVisitorData(getDataOptions) + setQueryState({ + isLoading: false, + isFetched: true, + data: result, + error: undefined, + }) + return result } catch (unknownError) { const error = toError(unknownError) - error.name = 'FPJSAgentError' - - setQueryState((state) => ({ ...state, data: undefined, error })) + setQueryState({ + isLoading: false, + isFetched: false, + data: undefined, + error, + }) throw error - } finally { - setQueryState((state) => (state.isLoading ? { ...state, isLoading: false } : state)) } }, [currentGetOptions, getVisitorData] @@ -87,21 +106,11 @@ export function useVisitorData( setCurrentGetOptions(getOptions) } - const { isLoading, data, error } = queryState - - return { - getData, - isLoading, - data, - error, - } -} - -export interface UseVisitorDataConfig { - /** - * Determines whether the `getData()` method will be called immediately after the hook mounts or not - */ - immediate: boolean + return useMemo( + () => ({ + ...queryState, + getData, + }), + [queryState, getData] + ) } - -const defaultUseVisitorDataConfig = { immediate: true } diff --git a/src/utils/use-const.ts b/src/utils/use-const.ts new file mode 100644 index 00000000..0a6a251a --- /dev/null +++ b/src/utils/use-const.ts @@ -0,0 +1,7 @@ +import { useRef } from 'react' + +export function useConst(initialValue: T | (() => T)): T { + const ref = useRef(typeof initialValue === 'function' ? (initialValue as () => T)() : initialValue) + + return ref.current +} diff --git a/src/utils/use-promise-store.ts b/src/utils/use-promise-store.ts new file mode 100644 index 00000000..b6c9de14 --- /dev/null +++ b/src/utils/use-promise-store.ts @@ -0,0 +1,51 @@ +import { GetOptions, GetResult } from '@fingerprint/agent' +import { useCallback } from 'react' +import { useConst } from './use-const' + +function getCacheKey(options?: GetOptions) { + if (!options) { + return '' + } + + return `${options.tag}-${options.linkedId}-${options.timeout}` +} + +export type UsePromiseStoreReturn = { + /** + * Accepts a callback that returns a promise (`requestCallback`) + * and optional parameters (`options`). Ensures that the same request identified by a cache key is + * only executed once at a time, and returns the stored promise for the request. The promise is + * removed from the store once it is resolved or rejected. + * */ + doRequest: (requestCallback: () => Promise, options?: GetOptions) => Promise +} + +/** + * Manages a store of promises to handle unique asynchronous requests, ensuring that + * requests with the same key are not duplicated while they are still pending. + */ +export function usePromiseStore(): UsePromiseStoreReturn { + const store = useConst(new Map>()) + + const doRequest = useCallback( + (requestCallback: () => Promise, options?: GetOptions) => { + const cacheKey = getCacheKey(options) + let cachedPromise = store.get(cacheKey) + + if (!cachedPromise) { + cachedPromise = requestCallback().finally(() => { + store.delete(cacheKey) + }) + + store.set(cacheKey, cachedPromise) + } + + return cachedPromise + }, + [store] + ) + + return { + doRequest, + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 00000000..4f39591e --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,32 @@ +import { defineConfig } from 'vite' +import dts from 'vite-plugin-dts' +import licensePlugin from 'vite-plugin-banner' +import { dependencies, version } from './package.json' +import banner2 from 'rollup-plugin-banner2' + +const licenseContents = `FingerprintJS Pro React v${version} - Copyright (c) FingerprintJS, Inc, ${new Date().getFullYear()} (https://fingerprint.com) +Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.` + +export default defineConfig({ + build: { + // Bundle source maps for easier debugging + sourcemap: true, + lib: { + entry: 'src/index.ts', + fileName: 'fingerprint-react', + formats: ['cjs', 'es'], + }, + rollupOptions: { + plugins: [banner2(() => `'use client';\n`)], + external: ['react', 'react-dom', 'react/jsx-runtime', ...Object.keys(dependencies)], + }, + }, + plugins: [ + licensePlugin({ + content: licenseContents, + }), + dts({ + rollupTypes: true, + }), + ], +}) diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 00000000..7c369cf4 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + environment: 'jsdom', + include: ['__tests__/**/*'], + passWithNoTests: true, + coverage: { + provider: 'istanbul', + reporter: [['text', { file: 'coverage.txt' }], ['json'], ['json-summary'], ['lcov']], + include: ['src/**/*'], + }, + }, +})