diff --git a/.gitignore b/.gitignore
index fd01edf..d100678 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@
node_modules/
backend/node_modules/
frontend/node_modules/
+**/.ignored_node_modules/
jspm_packages/
bower_components/
web_modules/
diff --git a/frontend/.gitignore b/frontend/.gitignore
index fd3dbb5..b6d3a72 100644
--- a/frontend/.gitignore
+++ b/frontend/.gitignore
@@ -2,6 +2,7 @@
# dependencies
/node_modules
+/.ignored_node_modules
/.pnp
.pnp.js
.yarn/install-state.gz
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/LICENSE b/frontend/.ignored_node_modules/@tanstack/react-query/LICENSE
deleted file mode 100644
index 1869e21..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2021-present Tanner Linsley
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/README.md b/frontend/.ignored_node_modules/@tanstack/react-query/README.md
deleted file mode 100644
index 96bffea..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/README.md
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-Hooks for fetching, caching and updating asynchronous data in React
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Enjoy this library? Try the entire [TanStack](https://tanstack.com)! [TanStack Table](https://github.com/TanStack/table), [TanStack Router](https://github.com/tanstack/router), [TanStack Virtual](https://github.com/tanstack/virtual), [React Charts](https://github.com/TanStack/react-charts), [React Ranger](https://github.com/TanStack/ranger)
-
-## Visit [tanstack.com/query](https://tanstack.com/query) for docs, guides, API and more!
-
-## Quick Features
-
-- Transport/protocol/backend agnostic data fetching (REST, GraphQL, promises, whatever!)
-- Auto Caching + Refetching (stale-while-revalidate, Window Refocus, Polling/Realtime)
-- Parallel + Dependent Queries
-- Mutations + Reactive Query Refetching
-- Multi-layer Cache + Automatic Garbage Collection
-- Paginated + Cursor-based Queries
-- Load-More + Infinite Scroll Queries w/ Scroll Recovery
-- Request Cancellation
-- [React Suspense](https://react.dev/reference/react/Suspense) + Fetch-As-You-Render Query Prefetching
-- Dedicated Devtools
-
-### [Become a Sponsor!](https://github.com/sponsors/tannerlinsley/)
-
-
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/package.json b/frontend/.ignored_node_modules/@tanstack/react-query/package.json
deleted file mode 100644
index fa28334..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/package.json
+++ /dev/null
@@ -1,87 +0,0 @@
-{
- "name": "@tanstack/react-query",
- "version": "5.90.11",
- "description": "Hooks for managing, caching and syncing asynchronous and remote data in React",
- "author": "tannerlinsley",
- "license": "MIT",
- "repository": {
- "type": "git",
- "url": "https://github.com/TanStack/query.git",
- "directory": "packages/react-query"
- },
- "homepage": "https://tanstack.com/query",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
- },
- "type": "module",
- "types": "build/legacy/index.d.ts",
- "main": "build/legacy/index.cjs",
- "module": "build/legacy/index.js",
- "react-native": "src/index.ts",
- "exports": {
- ".": {
- "@tanstack/custom-condition": "./src/index.ts",
- "import": {
- "types": "./build/modern/index.d.ts",
- "default": "./build/modern/index.js"
- },
- "require": {
- "types": "./build/modern/index.d.cts",
- "default": "./build/modern/index.cjs"
- }
- },
- "./package.json": "./package.json"
- },
- "sideEffects": false,
- "files": [
- "build",
- "src",
- "!src/__tests__",
- "!build/codemods/node_modules",
- "!build/codemods/vite.config.ts",
- "!build/codemods/**/__testfixtures__",
- "!build/codemods/**/__tests__"
- ],
- "dependencies": {
- "@tanstack/query-core": "5.90.11"
- },
- "devDependencies": {
- "@testing-library/react": "^16.1.0",
- "@testing-library/react-render-stream": "^2.0.0",
- "@types/react": "^19.0.1",
- "@types/react-dom": "^19.0.2",
- "@vitejs/plugin-react": "^4.3.4",
- "cpy-cli": "^5.0.0",
- "npm-run-all2": "^5.0.0",
- "react": "^19.0.0",
- "react-dom": "^19.0.0",
- "react-error-boundary": "^4.1.2",
- "@tanstack/query-persist-client-core": "5.91.10",
- "@tanstack/query-test-utils": "0.0.0"
- },
- "peerDependencies": {
- "react": "^18 || ^19"
- },
- "scripts": {
- "clean": "premove ./build ./coverage ./dist-ts",
- "compile": "tsc --build",
- "test:eslint": "eslint --concurrency=auto ./src",
- "test:types": "npm-run-all --serial test:types:*",
- "test:types:ts50": "node ../../node_modules/typescript50/lib/tsc.js --build tsconfig.legacy.json",
- "test:types:ts51": "node ../../node_modules/typescript51/lib/tsc.js --build tsconfig.legacy.json",
- "test:types:ts52": "node ../../node_modules/typescript52/lib/tsc.js --build tsconfig.legacy.json",
- "test:types:ts53": "node ../../node_modules/typescript53/lib/tsc.js --build tsconfig.legacy.json",
- "test:types:ts54": "node ../../node_modules/typescript54/lib/tsc.js --build tsconfig.legacy.json",
- "test:types:ts55": "node ../../node_modules/typescript55/lib/tsc.js --build tsconfig.legacy.json",
- "test:types:ts56": "node ../../node_modules/typescript56/lib/tsc.js --build tsconfig.legacy.json",
- "test:types:ts57": "node ../../node_modules/typescript57/lib/tsc.js --build tsconfig.legacy.json",
- "test:types:tscurrent": "tsc --build",
- "test:lib": "vitest",
- "test:lib:dev": "pnpm run test:lib --watch",
- "test:build": "publint --strict && attw --pack",
- "build": "pnpm build:tsup && pnpm build:codemods",
- "build:tsup": "tsup --tsconfig tsconfig.prod.json",
- "build:codemods": "cpy ../query-codemods/* ./build/codemods"
- }
-}
\ No newline at end of file
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/HydrationBoundary.tsx b/frontend/.ignored_node_modules/@tanstack/react-query/src/HydrationBoundary.tsx
deleted file mode 100644
index 901c8e9..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/HydrationBoundary.tsx
+++ /dev/null
@@ -1,111 +0,0 @@
-'use client'
-import * as React from 'react'
-
-import { hydrate } from '@tanstack/query-core'
-import { useQueryClient } from './QueryClientProvider'
-import type {
- DehydratedState,
- HydrateOptions,
- OmitKeyof,
- QueryClient,
-} from '@tanstack/query-core'
-
-export interface HydrationBoundaryProps {
- state: DehydratedState | null | undefined
- options?: OmitKeyof & {
- defaultOptions?: OmitKeyof<
- Exclude,
- 'mutations'
- >
- }
- children?: React.ReactNode
- queryClient?: QueryClient
-}
-
-export const HydrationBoundary = ({
- children,
- options = {},
- state,
- queryClient,
-}: HydrationBoundaryProps) => {
- const client = useQueryClient(queryClient)
-
- const optionsRef = React.useRef(options)
- React.useEffect(() => {
- optionsRef.current = options
- })
-
- // This useMemo is for performance reasons only, everything inside it must
- // be safe to run in every render and code here should be read as "in render".
- //
- // This code needs to happen during the render phase, because after initial
- // SSR, hydration needs to happen _before_ children render. Also, if hydrating
- // during a transition, we want to hydrate as much as is safe in render so
- // we can prerender as much as possible.
- //
- // For any queries that already exist in the cache, we want to hold back on
- // hydrating until _after_ the render phase. The reason for this is that during
- // transitions, we don't want the existing queries and observers to update to
- // the new data on the current page, only _after_ the transition is committed.
- // If the transition is aborted, we will have hydrated any _new_ queries, but
- // we throw away the fresh data for any existing ones to avoid unexpectedly
- // updating the UI.
- const hydrationQueue: DehydratedState['queries'] | undefined =
- React.useMemo(() => {
- if (state) {
- if (typeof state !== 'object') {
- return
- }
-
- const queryCache = client.getQueryCache()
- // State is supplied from the outside and we might as well fail
- // gracefully if it has the wrong shape, so while we type `queries`
- // as required, we still provide a fallback.
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
- const queries = state.queries || []
-
- const newQueries: DehydratedState['queries'] = []
- const existingQueries: DehydratedState['queries'] = []
- for (const dehydratedQuery of queries) {
- const existingQuery = queryCache.get(dehydratedQuery.queryHash)
-
- if (!existingQuery) {
- newQueries.push(dehydratedQuery)
- } else {
- const hydrationIsNewer =
- dehydratedQuery.state.dataUpdatedAt >
- existingQuery.state.dataUpdatedAt ||
- (dehydratedQuery.promise &&
- existingQuery.state.status !== 'pending' &&
- existingQuery.state.fetchStatus !== 'fetching' &&
- dehydratedQuery.dehydratedAt !== undefined &&
- dehydratedQuery.dehydratedAt >
- existingQuery.state.dataUpdatedAt)
-
- if (hydrationIsNewer) {
- existingQueries.push(dehydratedQuery)
- }
- }
- }
-
- if (newQueries.length > 0) {
- // It's actually fine to call this with queries/state that already exists
- // in the cache, or is older. hydrate() is idempotent for queries.
- // eslint-disable-next-line react-hooks/refs
- hydrate(client, { queries: newQueries }, optionsRef.current)
- }
- if (existingQueries.length > 0) {
- return existingQueries
- }
- }
- return undefined
- }, [client, state])
-
- React.useEffect(() => {
- if (hydrationQueue) {
- hydrate(client, { queries: hydrationQueue }, optionsRef.current)
- }
- }, [client, hydrationQueue])
-
- return children as React.ReactElement
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/IsRestoringProvider.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/IsRestoringProvider.ts
deleted file mode 100644
index 7d59c72..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/IsRestoringProvider.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-'use client'
-import * as React from 'react'
-
-const IsRestoringContext = React.createContext(false)
-
-export const useIsRestoring = () => React.useContext(IsRestoringContext)
-export const IsRestoringProvider = IsRestoringContext.Provider
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/QueryClientProvider.tsx b/frontend/.ignored_node_modules/@tanstack/react-query/src/QueryClientProvider.tsx
deleted file mode 100644
index 7fa1df9..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/QueryClientProvider.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-'use client'
-import * as React from 'react'
-
-import type { QueryClient } from '@tanstack/query-core'
-
-export const QueryClientContext = React.createContext(
- undefined,
-)
-
-export const useQueryClient = (queryClient?: QueryClient) => {
- const client = React.useContext(QueryClientContext)
-
- if (queryClient) {
- return queryClient
- }
-
- if (!client) {
- throw new Error('No QueryClient set, use QueryClientProvider to set one')
- }
-
- return client
-}
-
-export type QueryClientProviderProps = {
- client: QueryClient
- children?: React.ReactNode
-}
-
-export const QueryClientProvider = ({
- client,
- children,
-}: QueryClientProviderProps): React.JSX.Element => {
- React.useEffect(() => {
- client.mount()
- return () => {
- client.unmount()
- }
- }, [client])
-
- return (
-
- {children}
-
- )
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/QueryErrorResetBoundary.tsx b/frontend/.ignored_node_modules/@tanstack/react-query/src/QueryErrorResetBoundary.tsx
deleted file mode 100644
index 910215b..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/QueryErrorResetBoundary.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-'use client'
-import * as React from 'react'
-
-// CONTEXT
-export type QueryErrorResetFunction = () => void
-export type QueryErrorIsResetFunction = () => boolean
-export type QueryErrorClearResetFunction = () => void
-
-export interface QueryErrorResetBoundaryValue {
- clearReset: QueryErrorClearResetFunction
- isReset: QueryErrorIsResetFunction
- reset: QueryErrorResetFunction
-}
-
-function createValue(): QueryErrorResetBoundaryValue {
- let isReset = false
- return {
- clearReset: () => {
- isReset = false
- },
- reset: () => {
- isReset = true
- },
- isReset: () => {
- return isReset
- },
- }
-}
-
-const QueryErrorResetBoundaryContext = React.createContext(createValue())
-
-// HOOK
-
-export const useQueryErrorResetBoundary = () =>
- React.useContext(QueryErrorResetBoundaryContext)
-
-// COMPONENT
-
-export type QueryErrorResetBoundaryFunction = (
- value: QueryErrorResetBoundaryValue,
-) => React.ReactNode
-
-export interface QueryErrorResetBoundaryProps {
- children: QueryErrorResetBoundaryFunction | React.ReactNode
-}
-
-export const QueryErrorResetBoundary = ({
- children,
-}: QueryErrorResetBoundaryProps) => {
- const [value] = React.useState(() => createValue())
- return (
-
- {typeof children === 'function' ? children(value) : children}
-
- )
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/errorBoundaryUtils.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/errorBoundaryUtils.ts
deleted file mode 100644
index 28c11c0..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/errorBoundaryUtils.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-'use client'
-import * as React from 'react'
-import { shouldThrowError } from '@tanstack/query-core'
-import type {
- DefaultedQueryObserverOptions,
- Query,
- QueryKey,
- QueryObserverResult,
- ThrowOnError,
-} from '@tanstack/query-core'
-import type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'
-
-export const ensurePreventErrorBoundaryRetry = <
- TQueryFnData,
- TError,
- TData,
- TQueryData,
- TQueryKey extends QueryKey,
->(
- options: DefaultedQueryObserverOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryData,
- TQueryKey
- >,
- errorResetBoundary: QueryErrorResetBoundaryValue,
-) => {
- if (
- options.suspense ||
- options.throwOnError ||
- options.experimental_prefetchInRender
- ) {
- // Prevent retrying failed query if the error boundary has not been reset yet
- if (!errorResetBoundary.isReset()) {
- options.retryOnMount = false
- }
- }
-}
-
-export const useClearResetErrorBoundary = (
- errorResetBoundary: QueryErrorResetBoundaryValue,
-) => {
- React.useEffect(() => {
- errorResetBoundary.clearReset()
- }, [errorResetBoundary])
-}
-
-export const getHasError = <
- TData,
- TError,
- TQueryFnData,
- TQueryData,
- TQueryKey extends QueryKey,
->({
- result,
- errorResetBoundary,
- throwOnError,
- query,
- suspense,
-}: {
- result: QueryObserverResult
- errorResetBoundary: QueryErrorResetBoundaryValue
- throwOnError: ThrowOnError
- query: Query | undefined
- suspense: boolean | undefined
-}) => {
- return (
- result.isError &&
- !errorResetBoundary.isReset() &&
- !result.isFetching &&
- query &&
- ((suspense && result.data === undefined) ||
- shouldThrowError(throwOnError, [result.error, query]))
- )
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/index.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/index.ts
deleted file mode 100644
index 36ea8da..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/index.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-/* istanbul ignore file */
-
-// Re-export core
-export * from '@tanstack/query-core'
-
-// React Query
-export * from './types'
-export { useQueries } from './useQueries'
-export type { QueriesResults, QueriesOptions } from './useQueries'
-export { useQuery } from './useQuery'
-export { useSuspenseQuery } from './useSuspenseQuery'
-export { useSuspenseInfiniteQuery } from './useSuspenseInfiniteQuery'
-export { useSuspenseQueries } from './useSuspenseQueries'
-export type {
- SuspenseQueriesResults,
- SuspenseQueriesOptions,
-} from './useSuspenseQueries'
-export { usePrefetchQuery } from './usePrefetchQuery'
-export { usePrefetchInfiniteQuery } from './usePrefetchInfiniteQuery'
-export { queryOptions } from './queryOptions'
-export type {
- DefinedInitialDataOptions,
- UndefinedInitialDataOptions,
- UnusedSkipTokenOptions,
-} from './queryOptions'
-export { infiniteQueryOptions } from './infiniteQueryOptions'
-export type {
- DefinedInitialDataInfiniteOptions,
- UndefinedInitialDataInfiniteOptions,
- UnusedSkipTokenInfiniteOptions,
-} from './infiniteQueryOptions'
-export {
- QueryClientContext,
- QueryClientProvider,
- useQueryClient,
-} from './QueryClientProvider'
-export type { QueryClientProviderProps } from './QueryClientProvider'
-export type { QueryErrorResetBoundaryProps } from './QueryErrorResetBoundary'
-export { HydrationBoundary } from './HydrationBoundary'
-export type { HydrationBoundaryProps } from './HydrationBoundary'
-export type {
- QueryErrorClearResetFunction,
- QueryErrorIsResetFunction,
- QueryErrorResetBoundaryFunction,
- QueryErrorResetFunction,
-} from './QueryErrorResetBoundary'
-export {
- QueryErrorResetBoundary,
- useQueryErrorResetBoundary,
-} from './QueryErrorResetBoundary'
-export { useIsFetching } from './useIsFetching'
-export { useIsMutating, useMutationState } from './useMutationState'
-export { useMutation } from './useMutation'
-export { mutationOptions } from './mutationOptions'
-export { useInfiniteQuery } from './useInfiniteQuery'
-export { useIsRestoring, IsRestoringProvider } from './IsRestoringProvider'
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/infiniteQueryOptions.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/infiniteQueryOptions.ts
deleted file mode 100644
index 5e8c371..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/infiniteQueryOptions.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-import type {
- DataTag,
- DefaultError,
- InfiniteData,
- InitialDataFunction,
- NonUndefinedGuard,
- OmitKeyof,
- QueryKey,
- SkipToken,
-} from '@tanstack/query-core'
-import type { UseInfiniteQueryOptions } from './types'
-
-export type UndefinedInitialDataInfiniteOptions<
- TQueryFnData,
- TError = DefaultError,
- TData = InfiniteData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
-> = UseInfiniteQueryOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
-> & {
- initialData?:
- | undefined
- | NonUndefinedGuard>
- | InitialDataFunction<
- NonUndefinedGuard>
- >
-}
-
-export type UnusedSkipTokenInfiniteOptions<
- TQueryFnData,
- TError = DefaultError,
- TData = InfiniteData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
-> = OmitKeyof<
- UseInfiniteQueryOptions,
- 'queryFn'
-> & {
- queryFn?: Exclude<
- UseInfiniteQueryOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
- >['queryFn'],
- SkipToken | undefined
- >
-}
-
-export type DefinedInitialDataInfiniteOptions<
- TQueryFnData,
- TError = DefaultError,
- TData = InfiniteData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
-> = UseInfiniteQueryOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
-> & {
- initialData:
- | NonUndefinedGuard>
- | (() => NonUndefinedGuard>)
- | undefined
-}
-
-export function infiniteQueryOptions<
- TQueryFnData,
- TError = DefaultError,
- TData = InfiniteData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
->(
- options: DefinedInitialDataInfiniteOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
- >,
-): DefinedInitialDataInfiniteOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
-> & {
- queryKey: DataTag, TError>
-}
-
-export function infiniteQueryOptions<
- TQueryFnData,
- TError = DefaultError,
- TData = InfiniteData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
->(
- options: UnusedSkipTokenInfiniteOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
- >,
-): UnusedSkipTokenInfiniteOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
-> & {
- queryKey: DataTag, TError>
-}
-
-export function infiniteQueryOptions<
- TQueryFnData,
- TError = DefaultError,
- TData = InfiniteData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
->(
- options: UndefinedInitialDataInfiniteOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
- >,
-): UndefinedInitialDataInfiniteOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
-> & {
- queryKey: DataTag, TError>
-}
-
-export function infiniteQueryOptions(options: unknown) {
- return options
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/mutationOptions.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/mutationOptions.ts
deleted file mode 100644
index 1ee3110..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/mutationOptions.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import type { DefaultError, WithRequired } from '@tanstack/query-core'
-import type { UseMutationOptions } from './types'
-
-export function mutationOptions<
- TData = unknown,
- TError = DefaultError,
- TVariables = void,
- TOnMutateResult = unknown,
->(
- options: WithRequired<
- UseMutationOptions,
- 'mutationKey'
- >,
-): WithRequired<
- UseMutationOptions,
- 'mutationKey'
->
-export function mutationOptions<
- TData = unknown,
- TError = DefaultError,
- TVariables = void,
- TOnMutateResult = unknown,
->(
- options: Omit<
- UseMutationOptions,
- 'mutationKey'
- >,
-): Omit<
- UseMutationOptions,
- 'mutationKey'
->
-export function mutationOptions<
- TData = unknown,
- TError = DefaultError,
- TVariables = void,
- TOnMutateResult = unknown,
->(
- options: UseMutationOptions,
-): UseMutationOptions {
- return options
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/queryOptions.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/queryOptions.ts
deleted file mode 100644
index 644ac26..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/queryOptions.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-import type {
- DataTag,
- DefaultError,
- InitialDataFunction,
- NonUndefinedGuard,
- OmitKeyof,
- QueryFunction,
- QueryKey,
- SkipToken,
-} from '@tanstack/query-core'
-import type { UseQueryOptions } from './types'
-
-export type UndefinedInitialDataOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
-> = UseQueryOptions & {
- initialData?:
- | undefined
- | InitialDataFunction>
- | NonUndefinedGuard
-}
-
-export type UnusedSkipTokenOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
-> = OmitKeyof<
- UseQueryOptions,
- 'queryFn'
-> & {
- queryFn?: Exclude<
- UseQueryOptions['queryFn'],
- SkipToken | undefined
- >
-}
-
-export type DefinedInitialDataOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
-> = Omit, 'queryFn'> & {
- initialData:
- | NonUndefinedGuard
- | (() => NonUndefinedGuard)
- queryFn?: QueryFunction
-}
-
-export function queryOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
->(
- options: DefinedInitialDataOptions,
-): DefinedInitialDataOptions & {
- queryKey: DataTag
-}
-
-export function queryOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
->(
- options: UnusedSkipTokenOptions,
-): UnusedSkipTokenOptions & {
- queryKey: DataTag
-}
-
-export function queryOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
->(
- options: UndefinedInitialDataOptions,
-): UndefinedInitialDataOptions & {
- queryKey: DataTag
-}
-
-export function queryOptions(options: unknown) {
- return options
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/suspense.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/suspense.ts
deleted file mode 100644
index d87569f..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/suspense.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-import type {
- DefaultError,
- DefaultedQueryObserverOptions,
- Query,
- QueryKey,
- QueryObserver,
- QueryObserverResult,
-} from '@tanstack/query-core'
-import type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'
-
-export const defaultThrowOnError = <
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
->(
- _error: TError,
- query: Query,
-) => query.state.data === undefined
-
-export const ensureSuspenseTimers = (
- defaultedOptions: DefaultedQueryObserverOptions,
-) => {
- if (defaultedOptions.suspense) {
- // Handle staleTime to ensure minimum 1000ms in Suspense mode
- // This prevents unnecessary refetching when components remount after suspending
- const MIN_SUSPENSE_TIME_MS = 1000
-
- const clamp = (value: number | 'static' | undefined) =>
- value === 'static'
- ? value
- : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS)
-
- const originalStaleTime = defaultedOptions.staleTime
- defaultedOptions.staleTime =
- typeof originalStaleTime === 'function'
- ? (...args) => clamp(originalStaleTime(...args))
- : clamp(originalStaleTime)
-
- if (typeof defaultedOptions.gcTime === 'number') {
- defaultedOptions.gcTime = Math.max(
- defaultedOptions.gcTime,
- MIN_SUSPENSE_TIME_MS,
- )
- }
- }
-}
-
-export const willFetch = (
- result: QueryObserverResult,
- isRestoring: boolean,
-) => result.isLoading && result.isFetching && !isRestoring
-
-export const shouldSuspend = (
- defaultedOptions:
- | DefaultedQueryObserverOptions
- | undefined,
- result: QueryObserverResult,
-) => defaultedOptions?.suspense && result.isPending
-
-export const fetchOptimistic = <
- TQueryFnData,
- TError,
- TData,
- TQueryData,
- TQueryKey extends QueryKey,
->(
- defaultedOptions: DefaultedQueryObserverOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryData,
- TQueryKey
- >,
- observer: QueryObserver,
- errorResetBoundary: QueryErrorResetBoundaryValue,
-) =>
- observer.fetchOptimistic(defaultedOptions).catch(() => {
- errorResetBoundary.clearReset()
- })
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/types.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/types.ts
deleted file mode 100644
index 2c52ac5..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/types.ts
+++ /dev/null
@@ -1,242 +0,0 @@
-/* istanbul ignore file */
-
-import type {
- DefaultError,
- DefinedInfiniteQueryObserverResult,
- DefinedQueryObserverResult,
- DistributiveOmit,
- FetchQueryOptions,
- InfiniteQueryObserverOptions,
- InfiniteQueryObserverResult,
- MutateFunction,
- MutationObserverOptions,
- MutationObserverResult,
- OmitKeyof,
- Override,
- QueryKey,
- QueryObserverOptions,
- QueryObserverResult,
- SkipToken,
-} from '@tanstack/query-core'
-
-export type AnyUseBaseQueryOptions = UseBaseQueryOptions<
- any,
- any,
- any,
- any,
- any
->
-export interface UseBaseQueryOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
-> extends QueryObserverOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryData,
- TQueryKey
- > {
- /**
- * Set this to `false` to unsubscribe this observer from updates to the query cache.
- * Defaults to `true`.
- */
- subscribed?: boolean
-}
-
-export interface UsePrefetchQueryOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
-> extends OmitKeyof<
- FetchQueryOptions,
- 'queryFn'
- > {
- queryFn?: Exclude<
- FetchQueryOptions['queryFn'],
- SkipToken
- >
-}
-
-export type AnyUseQueryOptions = UseQueryOptions
-export interface UseQueryOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
-> extends OmitKeyof<
- UseBaseQueryOptions,
- 'suspense'
- > {}
-
-export type AnyUseSuspenseQueryOptions = UseSuspenseQueryOptions<
- any,
- any,
- any,
- any
->
-export interface UseSuspenseQueryOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
-> extends OmitKeyof<
- UseQueryOptions,
- 'queryFn' | 'enabled' | 'throwOnError' | 'placeholderData'
- > {
- queryFn?: Exclude<
- UseQueryOptions['queryFn'],
- SkipToken
- >
-}
-
-export type AnyUseInfiniteQueryOptions = UseInfiniteQueryOptions<
- any,
- any,
- any,
- any,
- any
->
-export interface UseInfiniteQueryOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
-> extends OmitKeyof<
- InfiniteQueryObserverOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
- >,
- 'suspense'
- > {
- /**
- * Set this to `false` to unsubscribe this observer from updates to the query cache.
- * Defaults to `true`.
- */
- subscribed?: boolean
-}
-
-export type AnyUseSuspenseInfiniteQueryOptions =
- UseSuspenseInfiniteQueryOptions
-export interface UseSuspenseInfiniteQueryOptions<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
-> extends OmitKeyof<
- UseInfiniteQueryOptions,
- 'queryFn' | 'enabled' | 'throwOnError' | 'placeholderData'
- > {
- queryFn?: Exclude<
- UseInfiniteQueryOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
- >['queryFn'],
- SkipToken
- >
-}
-
-export type UseBaseQueryResult<
- TData = unknown,
- TError = DefaultError,
-> = QueryObserverResult
-
-export type UseQueryResult<
- TData = unknown,
- TError = DefaultError,
-> = UseBaseQueryResult
-
-export type UseSuspenseQueryResult<
- TData = unknown,
- TError = DefaultError,
-> = DistributiveOmit<
- DefinedQueryObserverResult,
- 'isPlaceholderData' | 'promise'
->
-
-export type DefinedUseQueryResult<
- TData = unknown,
- TError = DefaultError,
-> = DefinedQueryObserverResult
-
-export type UseInfiniteQueryResult<
- TData = unknown,
- TError = DefaultError,
-> = InfiniteQueryObserverResult
-
-export type DefinedUseInfiniteQueryResult<
- TData = unknown,
- TError = DefaultError,
-> = DefinedInfiniteQueryObserverResult
-
-export type UseSuspenseInfiniteQueryResult<
- TData = unknown,
- TError = DefaultError,
-> = OmitKeyof<
- DefinedInfiniteQueryObserverResult,
- 'isPlaceholderData' | 'promise'
->
-
-export type AnyUseMutationOptions = UseMutationOptions
-export interface UseMutationOptions<
- TData = unknown,
- TError = DefaultError,
- TVariables = void,
- TOnMutateResult = unknown,
-> extends OmitKeyof<
- MutationObserverOptions,
- '_defaulted'
- > {}
-
-export type UseMutateFunction<
- TData = unknown,
- TError = DefaultError,
- TVariables = void,
- TOnMutateResult = unknown,
-> = (
- ...args: Parameters<
- MutateFunction
- >
-) => void
-
-export type UseMutateAsyncFunction<
- TData = unknown,
- TError = DefaultError,
- TVariables = void,
- TOnMutateResult = unknown,
-> = MutateFunction
-
-export type UseBaseMutationResult<
- TData = unknown,
- TError = DefaultError,
- TVariables = unknown,
- TOnMutateResult = unknown,
-> = Override<
- MutationObserverResult,
- { mutate: UseMutateFunction }
-> & {
- mutateAsync: UseMutateAsyncFunction<
- TData,
- TError,
- TVariables,
- TOnMutateResult
- >
-}
-
-export type UseMutationResult<
- TData = unknown,
- TError = DefaultError,
- TVariables = unknown,
- TOnMutateResult = unknown,
-> = UseBaseMutationResult
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/useBaseQuery.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/useBaseQuery.ts
deleted file mode 100644
index 06690b5..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/useBaseQuery.ts
+++ /dev/null
@@ -1,170 +0,0 @@
-'use client'
-import * as React from 'react'
-
-import { isServer, noop, notifyManager } from '@tanstack/query-core'
-import { useQueryClient } from './QueryClientProvider'
-import { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'
-import {
- ensurePreventErrorBoundaryRetry,
- getHasError,
- useClearResetErrorBoundary,
-} from './errorBoundaryUtils'
-import { useIsRestoring } from './IsRestoringProvider'
-import {
- ensureSuspenseTimers,
- fetchOptimistic,
- shouldSuspend,
- willFetch,
-} from './suspense'
-import type {
- QueryClient,
- QueryKey,
- QueryObserver,
- QueryObserverResult,
-} from '@tanstack/query-core'
-import type { UseBaseQueryOptions } from './types'
-
-export function useBaseQuery<
- TQueryFnData,
- TError,
- TData,
- TQueryData,
- TQueryKey extends QueryKey,
->(
- options: UseBaseQueryOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryData,
- TQueryKey
- >,
- Observer: typeof QueryObserver,
- queryClient?: QueryClient,
-): QueryObserverResult {
- if (process.env.NODE_ENV !== 'production') {
- if (typeof options !== 'object' || Array.isArray(options)) {
- throw new Error(
- 'Bad argument type. Starting with v5, only the "Object" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object',
- )
- }
- }
-
- const isRestoring = useIsRestoring()
- const errorResetBoundary = useQueryErrorResetBoundary()
- const client = useQueryClient(queryClient)
- const defaultedOptions = client.defaultQueryOptions(options)
-
- ;(client.getDefaultOptions().queries as any)?._experimental_beforeQuery?.(
- defaultedOptions,
- )
-
- if (process.env.NODE_ENV !== 'production') {
- if (!defaultedOptions.queryFn) {
- console.error(
- `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`,
- )
- }
- }
-
- // Make sure results are optimistically set in fetching state before subscribing or updating options
- defaultedOptions._optimisticResults = isRestoring
- ? 'isRestoring'
- : 'optimistic'
-
- ensureSuspenseTimers(defaultedOptions)
- ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary)
-
- useClearResetErrorBoundary(errorResetBoundary)
-
- // this needs to be invoked before creating the Observer because that can create a cache entry
- const isNewCacheEntry = !client
- .getQueryCache()
- .get(defaultedOptions.queryHash)
-
- const [observer] = React.useState(
- () =>
- new Observer(
- client,
- defaultedOptions,
- ),
- )
-
- // note: this must be called before useSyncExternalStore
- const result = observer.getOptimisticResult(defaultedOptions)
-
- const shouldSubscribe = !isRestoring && options.subscribed !== false
- React.useSyncExternalStore(
- React.useCallback(
- (onStoreChange) => {
- const unsubscribe = shouldSubscribe
- ? observer.subscribe(notifyManager.batchCalls(onStoreChange))
- : noop
-
- // Update result to make sure we did not miss any query updates
- // between creating the observer and subscribing to it.
- observer.updateResult()
-
- return unsubscribe
- },
- [observer, shouldSubscribe],
- ),
- () => observer.getCurrentResult(),
- () => observer.getCurrentResult(),
- )
-
- React.useEffect(() => {
- observer.setOptions(defaultedOptions)
- }, [defaultedOptions, observer])
-
- // Handle suspense
- if (shouldSuspend(defaultedOptions, result)) {
- throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)
- }
-
- // Handle error boundary
- if (
- getHasError({
- result,
- errorResetBoundary,
- throwOnError: defaultedOptions.throwOnError,
- query: client
- .getQueryCache()
- .get<
- TQueryFnData,
- TError,
- TQueryData,
- TQueryKey
- >(defaultedOptions.queryHash),
- suspense: defaultedOptions.suspense,
- })
- ) {
- throw result.error
- }
-
- ;(client.getDefaultOptions().queries as any)?._experimental_afterQuery?.(
- defaultedOptions,
- result,
- )
-
- if (
- defaultedOptions.experimental_prefetchInRender &&
- !isServer &&
- willFetch(result, isRestoring)
- ) {
- const promise = isNewCacheEntry
- ? // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted
- fetchOptimistic(defaultedOptions, observer, errorResetBoundary)
- : // subscribe to the "cache promise" so that we can finalize the currentThenable once data comes in
- client.getQueryCache().get(defaultedOptions.queryHash)?.promise
-
- promise?.catch(noop).finally(() => {
- // `.updateResult()` will trigger `.#currentThenable` to finalize
- observer.updateResult()
- })
- }
-
- // Handle result property usage tracking
- return !defaultedOptions.notifyOnChangeProps
- ? observer.trackResult(result)
- : result
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/useInfiniteQuery.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/useInfiniteQuery.ts
deleted file mode 100644
index 32ebfb7..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/useInfiniteQuery.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-'use client'
-import { InfiniteQueryObserver } from '@tanstack/query-core'
-import { useBaseQuery } from './useBaseQuery'
-import type {
- DefaultError,
- InfiniteData,
- QueryClient,
- QueryKey,
- QueryObserver,
-} from '@tanstack/query-core'
-import type {
- DefinedUseInfiniteQueryResult,
- UseInfiniteQueryOptions,
- UseInfiniteQueryResult,
-} from './types'
-import type {
- DefinedInitialDataInfiniteOptions,
- UndefinedInitialDataInfiniteOptions,
-} from './infiniteQueryOptions'
-
-export function useInfiniteQuery<
- TQueryFnData,
- TError = DefaultError,
- TData = InfiniteData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
->(
- options: DefinedInitialDataInfiniteOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
- >,
- queryClient?: QueryClient,
-): DefinedUseInfiniteQueryResult
-
-export function useInfiniteQuery<
- TQueryFnData,
- TError = DefaultError,
- TData = InfiniteData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
->(
- options: UndefinedInitialDataInfiniteOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
- >,
- queryClient?: QueryClient,
-): UseInfiniteQueryResult
-
-export function useInfiniteQuery<
- TQueryFnData,
- TError = DefaultError,
- TData = InfiniteData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
->(
- options: UseInfiniteQueryOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
- >,
- queryClient?: QueryClient,
-): UseInfiniteQueryResult
-
-export function useInfiniteQuery(
- options: UseInfiniteQueryOptions,
- queryClient?: QueryClient,
-) {
- return useBaseQuery(
- options,
- InfiniteQueryObserver as typeof QueryObserver,
- queryClient,
- )
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/useIsFetching.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/useIsFetching.ts
deleted file mode 100644
index a625291..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/useIsFetching.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-'use client'
-import * as React from 'react'
-import { notifyManager } from '@tanstack/query-core'
-
-import { useQueryClient } from './QueryClientProvider'
-import type { QueryClient, QueryFilters } from '@tanstack/query-core'
-
-export function useIsFetching(
- filters?: QueryFilters,
- queryClient?: QueryClient,
-): number {
- const client = useQueryClient(queryClient)
- const queryCache = client.getQueryCache()
-
- return React.useSyncExternalStore(
- React.useCallback(
- (onStoreChange) =>
- queryCache.subscribe(notifyManager.batchCalls(onStoreChange)),
- [queryCache],
- ),
- () => client.isFetching(filters),
- () => client.isFetching(filters),
- )
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/useMutation.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/useMutation.ts
deleted file mode 100644
index 2c66eb8..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/useMutation.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-'use client'
-import * as React from 'react'
-import {
- MutationObserver,
- noop,
- notifyManager,
- shouldThrowError,
-} from '@tanstack/query-core'
-import { useQueryClient } from './QueryClientProvider'
-import type {
- UseMutateFunction,
- UseMutationOptions,
- UseMutationResult,
-} from './types'
-import type { DefaultError, QueryClient } from '@tanstack/query-core'
-
-// HOOK
-
-export function useMutation<
- TData = unknown,
- TError = DefaultError,
- TVariables = void,
- TOnMutateResult = unknown,
->(
- options: UseMutationOptions,
- queryClient?: QueryClient,
-): UseMutationResult {
- const client = useQueryClient(queryClient)
-
- const [observer] = React.useState(
- () =>
- new MutationObserver(
- client,
- options,
- ),
- )
-
- React.useEffect(() => {
- observer.setOptions(options)
- }, [observer, options])
-
- const result = React.useSyncExternalStore(
- React.useCallback(
- (onStoreChange) =>
- observer.subscribe(notifyManager.batchCalls(onStoreChange)),
- [observer],
- ),
- () => observer.getCurrentResult(),
- () => observer.getCurrentResult(),
- )
-
- const mutate = React.useCallback<
- UseMutateFunction
- >(
- (variables, mutateOptions) => {
- observer.mutate(variables, mutateOptions).catch(noop)
- },
- [observer],
- )
-
- if (
- result.error &&
- shouldThrowError(observer.options.throwOnError, [result.error])
- ) {
- throw result.error
- }
-
- return { ...result, mutate, mutateAsync: result.mutate }
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/useMutationState.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/useMutationState.ts
deleted file mode 100644
index dfd0c41..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/useMutationState.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-'use client'
-import * as React from 'react'
-
-import { notifyManager, replaceEqualDeep } from '@tanstack/query-core'
-import { useQueryClient } from './QueryClientProvider'
-import type {
- Mutation,
- MutationCache,
- MutationFilters,
- MutationState,
- QueryClient,
-} from '@tanstack/query-core'
-
-export function useIsMutating(
- filters?: MutationFilters,
- queryClient?: QueryClient,
-): number {
- const client = useQueryClient(queryClient)
- return useMutationState(
- { filters: { ...filters, status: 'pending' } },
- client,
- ).length
-}
-
-type MutationStateOptions = {
- filters?: MutationFilters
- select?: (mutation: Mutation) => TResult
-}
-
-function getResult(
- mutationCache: MutationCache,
- options: MutationStateOptions,
-): Array {
- return mutationCache
- .findAll(options.filters)
- .map(
- (mutation): TResult =>
- (options.select ? options.select(mutation) : mutation.state) as TResult,
- )
-}
-
-export function useMutationState(
- options: MutationStateOptions = {},
- queryClient?: QueryClient,
-): Array {
- const mutationCache = useQueryClient(queryClient).getMutationCache()
- const optionsRef = React.useRef(options)
- const result = React.useRef>(null)
- if (result.current === null) {
- result.current = getResult(mutationCache, options)
- }
-
- React.useEffect(() => {
- optionsRef.current = options
- })
-
- return React.useSyncExternalStore(
- React.useCallback(
- (onStoreChange) =>
- mutationCache.subscribe(() => {
- const nextResult = replaceEqualDeep(
- result.current,
- getResult(mutationCache, optionsRef.current),
- )
- if (result.current !== nextResult) {
- result.current = nextResult
- notifyManager.schedule(onStoreChange)
- }
- }),
- [mutationCache],
- ),
- () => result.current,
- () => result.current,
- )!
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/usePrefetchInfiniteQuery.tsx b/frontend/.ignored_node_modules/@tanstack/react-query/src/usePrefetchInfiniteQuery.tsx
deleted file mode 100644
index 08c2fcd..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/usePrefetchInfiniteQuery.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { useQueryClient } from './QueryClientProvider'
-import type {
- DefaultError,
- FetchInfiniteQueryOptions,
- QueryClient,
- QueryKey,
-} from '@tanstack/query-core'
-
-export function usePrefetchInfiniteQuery<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
->(
- options: FetchInfiniteQueryOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
- >,
- queryClient?: QueryClient,
-) {
- const client = useQueryClient(queryClient)
-
- if (!client.getQueryState(options.queryKey)) {
- client.prefetchInfiniteQuery(options)
- }
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/usePrefetchQuery.tsx b/frontend/.ignored_node_modules/@tanstack/react-query/src/usePrefetchQuery.tsx
deleted file mode 100644
index 3f508c3..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/usePrefetchQuery.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { useQueryClient } from './QueryClientProvider'
-import type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core'
-import type { UsePrefetchQueryOptions } from './types'
-
-export function usePrefetchQuery<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
->(
- options: UsePrefetchQueryOptions,
- queryClient?: QueryClient,
-) {
- const client = useQueryClient(queryClient)
-
- if (!client.getQueryState(options.queryKey)) {
- client.prefetchQuery(options)
- }
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/useQueries.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/useQueries.ts
deleted file mode 100644
index a736f5c..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/useQueries.ts
+++ /dev/null
@@ -1,332 +0,0 @@
-'use client'
-import * as React from 'react'
-
-import {
- QueriesObserver,
- QueryObserver,
- noop,
- notifyManager,
-} from '@tanstack/query-core'
-import { useQueryClient } from './QueryClientProvider'
-import { useIsRestoring } from './IsRestoringProvider'
-import { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'
-import {
- ensurePreventErrorBoundaryRetry,
- getHasError,
- useClearResetErrorBoundary,
-} from './errorBoundaryUtils'
-import {
- ensureSuspenseTimers,
- fetchOptimistic,
- shouldSuspend,
- willFetch,
-} from './suspense'
-import type {
- DefinedUseQueryResult,
- UseQueryOptions,
- UseQueryResult,
-} from './types'
-import type {
- DefaultError,
- OmitKeyof,
- QueriesObserverOptions,
- QueriesPlaceholderDataFunction,
- QueryClient,
- QueryFunction,
- QueryKey,
- QueryObserverOptions,
- ThrowOnError,
-} from '@tanstack/query-core'
-
-// This defines the `UseQueryOptions` that are accepted in `QueriesOptions` & `GetOptions`.
-// `placeholderData` function always gets undefined passed
-type UseQueryOptionsForUseQueries<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
-> = OmitKeyof<
- UseQueryOptions,
- 'placeholderData' | 'subscribed'
-> & {
- placeholderData?: TQueryFnData | QueriesPlaceholderDataFunction
-}
-
-// Avoid TS depth-limit error in case of large array literal
-type MAXIMUM_DEPTH = 20
-
-// Widen the type of the symbol to enable type inference even if skipToken is not immutable.
-type SkipTokenForUseQueries = symbol
-
-type GetUseQueryOptionsForUseQueries =
- // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }
- T extends {
- queryFnData: infer TQueryFnData
- error?: infer TError
- data: infer TData
- }
- ? UseQueryOptionsForUseQueries
- : T extends { queryFnData: infer TQueryFnData; error?: infer TError }
- ? UseQueryOptionsForUseQueries
- : T extends { data: infer TData; error?: infer TError }
- ? UseQueryOptionsForUseQueries
- : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]
- T extends [infer TQueryFnData, infer TError, infer TData]
- ? UseQueryOptionsForUseQueries
- : T extends [infer TQueryFnData, infer TError]
- ? UseQueryOptionsForUseQueries
- : T extends [infer TQueryFnData]
- ? UseQueryOptionsForUseQueries
- : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided
- T extends {
- queryFn?:
- | QueryFunction
- | SkipTokenForUseQueries
- select?: (data: any) => infer TData
- throwOnError?: ThrowOnError
- }
- ? UseQueryOptionsForUseQueries<
- TQueryFnData,
- unknown extends TError ? DefaultError : TError,
- unknown extends TData ? TQueryFnData : TData,
- TQueryKey
- >
- : // Fallback
- UseQueryOptionsForUseQueries
-
-// A defined initialData setting should return a DefinedUseQueryResult rather than UseQueryResult
-type GetDefinedOrUndefinedQueryResult = T extends {
- initialData?: infer TInitialData
-}
- ? unknown extends TInitialData
- ? UseQueryResult
- : TInitialData extends TData
- ? DefinedUseQueryResult
- : TInitialData extends () => infer TInitialDataResult
- ? unknown extends TInitialDataResult
- ? UseQueryResult
- : TInitialDataResult extends TData
- ? DefinedUseQueryResult
- : UseQueryResult
- : UseQueryResult
- : UseQueryResult
-
-type GetUseQueryResult =
- // Part 1: responsible for mapping explicit type parameter to function result, if object
- T extends { queryFnData: any; error?: infer TError; data: infer TData }
- ? GetDefinedOrUndefinedQueryResult
- : T extends { queryFnData: infer TQueryFnData; error?: infer TError }
- ? GetDefinedOrUndefinedQueryResult
- : T extends { data: infer TData; error?: infer TError }
- ? GetDefinedOrUndefinedQueryResult
- : // Part 2: responsible for mapping explicit type parameter to function result, if tuple
- T extends [any, infer TError, infer TData]
- ? GetDefinedOrUndefinedQueryResult
- : T extends [infer TQueryFnData, infer TError]
- ? GetDefinedOrUndefinedQueryResult
- : T extends [infer TQueryFnData]
- ? GetDefinedOrUndefinedQueryResult
- : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided
- T extends {
- queryFn?:
- | QueryFunction
- | SkipTokenForUseQueries
- select?: (data: any) => infer TData
- throwOnError?: ThrowOnError
- }
- ? GetDefinedOrUndefinedQueryResult<
- T,
- unknown extends TData ? TQueryFnData : TData,
- unknown extends TError ? DefaultError : TError
- >
- : // Fallback
- UseQueryResult
-
-/**
- * QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
- */
-export type QueriesOptions<
- T extends Array,
- TResults extends Array = [],
- TDepth extends ReadonlyArray = [],
-> = TDepth['length'] extends MAXIMUM_DEPTH
- ? Array
- : T extends []
- ? []
- : T extends [infer Head]
- ? [...TResults, GetUseQueryOptionsForUseQueries]
- : T extends [infer Head, ...infer Tails]
- ? QueriesOptions<
- [...Tails],
- [...TResults, GetUseQueryOptionsForUseQueries],
- [...TDepth, 1]
- >
- : ReadonlyArray extends T
- ? T
- : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!
- // use this to infer the param types in the case of Array.map() argument
- T extends Array<
- UseQueryOptionsForUseQueries<
- infer TQueryFnData,
- infer TError,
- infer TData,
- infer TQueryKey
- >
- >
- ? Array<
- UseQueryOptionsForUseQueries<
- TQueryFnData,
- TError,
- TData,
- TQueryKey
- >
- >
- : // Fallback
- Array
-
-/**
- * QueriesResults reducer recursively maps type param to results
- */
-export type QueriesResults<
- T extends Array,
- TResults extends Array = [],
- TDepth extends ReadonlyArray = [],
-> = TDepth['length'] extends MAXIMUM_DEPTH
- ? Array
- : T extends []
- ? []
- : T extends [infer Head]
- ? [...TResults, GetUseQueryResult]
- : T extends [infer Head, ...infer Tails]
- ? QueriesResults<
- [...Tails],
- [...TResults, GetUseQueryResult],
- [...TDepth, 1]
- >
- : { [K in keyof T]: GetUseQueryResult }
-
-export function useQueries<
- T extends Array,
- TCombinedResult = QueriesResults,
->(
- {
- queries,
- ...options
- }: {
- queries:
- | readonly [...QueriesOptions]
- | readonly [...{ [K in keyof T]: GetUseQueryOptionsForUseQueries }]
- combine?: (result: QueriesResults) => TCombinedResult
- subscribed?: boolean
- },
- queryClient?: QueryClient,
-): TCombinedResult {
- const client = useQueryClient(queryClient)
- const isRestoring = useIsRestoring()
- const errorResetBoundary = useQueryErrorResetBoundary()
-
- const defaultedQueries = React.useMemo(
- () =>
- queries.map((opts) => {
- const defaultedOptions = client.defaultQueryOptions(
- opts as QueryObserverOptions,
- )
-
- // Make sure the results are already in fetching state before subscribing or updating options
- defaultedOptions._optimisticResults = isRestoring
- ? 'isRestoring'
- : 'optimistic'
-
- return defaultedOptions
- }),
- [queries, client, isRestoring],
- )
-
- defaultedQueries.forEach((query) => {
- ensureSuspenseTimers(query)
- ensurePreventErrorBoundaryRetry(query, errorResetBoundary)
- })
-
- useClearResetErrorBoundary(errorResetBoundary)
-
- const [observer] = React.useState(
- () =>
- new QueriesObserver(
- client,
- defaultedQueries,
- options as QueriesObserverOptions,
- ),
- )
-
- // note: this must be called before useSyncExternalStore
- const [optimisticResult, getCombinedResult, trackResult] =
- observer.getOptimisticResult(
- defaultedQueries,
- (options as QueriesObserverOptions).combine,
- )
-
- const shouldSubscribe = !isRestoring && options.subscribed !== false
- React.useSyncExternalStore(
- React.useCallback(
- (onStoreChange) =>
- shouldSubscribe
- ? observer.subscribe(notifyManager.batchCalls(onStoreChange))
- : noop,
- [observer, shouldSubscribe],
- ),
- () => observer.getCurrentResult(),
- () => observer.getCurrentResult(),
- )
-
- React.useEffect(() => {
- observer.setQueries(
- defaultedQueries,
- options as QueriesObserverOptions,
- )
- }, [defaultedQueries, options, observer])
-
- const shouldAtLeastOneSuspend = optimisticResult.some((result, index) =>
- shouldSuspend(defaultedQueries[index], result),
- )
-
- const suspensePromises = shouldAtLeastOneSuspend
- ? optimisticResult.flatMap((result, index) => {
- const opts = defaultedQueries[index]
-
- if (opts) {
- const queryObserver = new QueryObserver(client, opts)
- if (shouldSuspend(opts, result)) {
- return fetchOptimistic(opts, queryObserver, errorResetBoundary)
- } else if (willFetch(result, isRestoring)) {
- void fetchOptimistic(opts, queryObserver, errorResetBoundary)
- }
- }
- return []
- })
- : []
-
- if (suspensePromises.length > 0) {
- throw Promise.all(suspensePromises)
- }
- const firstSingleResultWhichShouldThrow = optimisticResult.find(
- (result, index) => {
- const query = defaultedQueries[index]
- return (
- query &&
- getHasError({
- result,
- errorResetBoundary,
- throwOnError: query.throwOnError,
- query: client.getQueryCache().get(query.queryHash),
- suspense: query.suspense,
- })
- )
- },
- )
-
- if (firstSingleResultWhichShouldThrow?.error) {
- throw firstSingleResultWhichShouldThrow.error
- }
-
- return getCombinedResult(trackResult())
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/useQuery.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/useQuery.ts
deleted file mode 100644
index 52d4795..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/useQuery.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-'use client'
-import { QueryObserver } from '@tanstack/query-core'
-import { useBaseQuery } from './useBaseQuery'
-import type {
- DefaultError,
- NoInfer,
- QueryClient,
- QueryKey,
-} from '@tanstack/query-core'
-import type {
- DefinedUseQueryResult,
- UseQueryOptions,
- UseQueryResult,
-} from './types'
-import type {
- DefinedInitialDataOptions,
- UndefinedInitialDataOptions,
-} from './queryOptions'
-
-export function useQuery<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
->(
- options: DefinedInitialDataOptions,
- queryClient?: QueryClient,
-): DefinedUseQueryResult, TError>
-
-export function useQuery<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
->(
- options: UndefinedInitialDataOptions,
- queryClient?: QueryClient,
-): UseQueryResult, TError>
-
-export function useQuery<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
->(
- options: UseQueryOptions,
- queryClient?: QueryClient,
-): UseQueryResult, TError>
-
-export function useQuery(options: UseQueryOptions, queryClient?: QueryClient) {
- return useBaseQuery(options, QueryObserver, queryClient)
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/useSuspenseInfiniteQuery.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/useSuspenseInfiniteQuery.ts
deleted file mode 100644
index 3c2fdfd..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/useSuspenseInfiniteQuery.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-'use client'
-import { InfiniteQueryObserver, skipToken } from '@tanstack/query-core'
-import { useBaseQuery } from './useBaseQuery'
-import { defaultThrowOnError } from './suspense'
-import type {
- DefaultError,
- InfiniteData,
- InfiniteQueryObserverSuccessResult,
- QueryClient,
- QueryKey,
- QueryObserver,
-} from '@tanstack/query-core'
-import type {
- UseSuspenseInfiniteQueryOptions,
- UseSuspenseInfiniteQueryResult,
-} from './types'
-
-export function useSuspenseInfiniteQuery<
- TQueryFnData,
- TError = DefaultError,
- TData = InfiniteData,
- TQueryKey extends QueryKey = QueryKey,
- TPageParam = unknown,
->(
- options: UseSuspenseInfiniteQueryOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey,
- TPageParam
- >,
- queryClient?: QueryClient,
-): UseSuspenseInfiniteQueryResult {
- if (process.env.NODE_ENV !== 'production') {
- if ((options.queryFn as any) === skipToken) {
- console.error('skipToken is not allowed for useSuspenseInfiniteQuery')
- }
- }
-
- return useBaseQuery(
- {
- ...options,
- enabled: true,
- suspense: true,
- throwOnError: defaultThrowOnError,
- },
- InfiniteQueryObserver as typeof QueryObserver,
- queryClient,
- ) as InfiniteQueryObserverSuccessResult
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/useSuspenseQueries.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/useSuspenseQueries.ts
deleted file mode 100644
index f014095..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/useSuspenseQueries.ts
+++ /dev/null
@@ -1,211 +0,0 @@
-'use client'
-import { skipToken } from '@tanstack/query-core'
-import { useQueries } from './useQueries'
-import { defaultThrowOnError } from './suspense'
-import type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './types'
-import type {
- DefaultError,
- QueryClient,
- QueryFunction,
- ThrowOnError,
-} from '@tanstack/query-core'
-
-// Avoid TS depth-limit error in case of large array literal
-type MAXIMUM_DEPTH = 20
-
-// Widen the type of the symbol to enable type inference even if skipToken is not immutable.
-type SkipTokenForUseQueries = symbol
-
-type GetUseSuspenseQueryOptions =
- // Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }
- T extends {
- queryFnData: infer TQueryFnData
- error?: infer TError
- data: infer TData
- }
- ? UseSuspenseQueryOptions
- : T extends { queryFnData: infer TQueryFnData; error?: infer TError }
- ? UseSuspenseQueryOptions
- : T extends { data: infer TData; error?: infer TError }
- ? UseSuspenseQueryOptions
- : // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]
- T extends [infer TQueryFnData, infer TError, infer TData]
- ? UseSuspenseQueryOptions
- : T extends [infer TQueryFnData, infer TError]
- ? UseSuspenseQueryOptions
- : T extends [infer TQueryFnData]
- ? UseSuspenseQueryOptions
- : // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided
- T extends {
- queryFn?:
- | QueryFunction
- | SkipTokenForUseQueries
- select?: (data: any) => infer TData
- throwOnError?: ThrowOnError
- }
- ? UseSuspenseQueryOptions<
- TQueryFnData,
- TError,
- TData,
- TQueryKey
- >
- : T extends {
- queryFn?:
- | QueryFunction
- | SkipTokenForUseQueries
- throwOnError?: ThrowOnError
- }
- ? UseSuspenseQueryOptions<
- TQueryFnData,
- TError,
- TQueryFnData,
- TQueryKey
- >
- : // Fallback
- UseSuspenseQueryOptions
-
-type GetUseSuspenseQueryResult =
- // Part 1: responsible for mapping explicit type parameter to function result, if object
- T extends { queryFnData: any; error?: infer TError; data: infer TData }
- ? UseSuspenseQueryResult
- : T extends { queryFnData: infer TQueryFnData; error?: infer TError }
- ? UseSuspenseQueryResult
- : T extends { data: infer TData; error?: infer TError }
- ? UseSuspenseQueryResult
- : // Part 2: responsible for mapping explicit type parameter to function result, if tuple
- T extends [any, infer TError, infer TData]
- ? UseSuspenseQueryResult
- : T extends [infer TQueryFnData, infer TError]
- ? UseSuspenseQueryResult
- : T extends [infer TQueryFnData]
- ? UseSuspenseQueryResult
- : // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided
- T extends {
- queryFn?:
- | QueryFunction
- | SkipTokenForUseQueries
- select?: (data: any) => infer TData
- throwOnError?: ThrowOnError
- }
- ? UseSuspenseQueryResult<
- unknown extends TData ? TQueryFnData : TData,
- unknown extends TError ? DefaultError : TError
- >
- : T extends {
- queryFn?:
- | QueryFunction
- | SkipTokenForUseQueries
- throwOnError?: ThrowOnError
- }
- ? UseSuspenseQueryResult<
- TQueryFnData,
- unknown extends TError ? DefaultError : TError
- >
- : // Fallback
- UseSuspenseQueryResult
-
-/**
- * SuspenseQueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
- */
-export type SuspenseQueriesOptions<
- T extends Array,
- TResults extends Array = [],
- TDepth extends ReadonlyArray = [],
-> = TDepth['length'] extends MAXIMUM_DEPTH
- ? Array
- : T extends []
- ? []
- : T extends [infer Head]
- ? [...TResults, GetUseSuspenseQueryOptions]
- : T extends [infer Head, ...infer Tails]
- ? SuspenseQueriesOptions<
- [...Tails],
- [...TResults, GetUseSuspenseQueryOptions],
- [...TDepth, 1]
- >
- : Array extends T
- ? T
- : // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!
- // use this to infer the param types in the case of Array.map() argument
- T extends Array<
- UseSuspenseQueryOptions<
- infer TQueryFnData,
- infer TError,
- infer TData,
- infer TQueryKey
- >
- >
- ? Array<
- UseSuspenseQueryOptions
- >
- : // Fallback
- Array
-
-/**
- * SuspenseQueriesResults reducer recursively maps type param to results
- */
-export type SuspenseQueriesResults<
- T extends Array,
- TResults extends Array = [],
- TDepth extends ReadonlyArray = [],
-> = TDepth['length'] extends MAXIMUM_DEPTH
- ? Array
- : T extends []
- ? []
- : T extends [infer Head]
- ? [...TResults, GetUseSuspenseQueryResult]
- : T extends [infer Head, ...infer Tails]
- ? SuspenseQueriesResults<
- [...Tails],
- [...TResults, GetUseSuspenseQueryResult],
- [...TDepth, 1]
- >
- : { [K in keyof T]: GetUseSuspenseQueryResult }
-
-export function useSuspenseQueries<
- T extends Array,
- TCombinedResult = SuspenseQueriesResults,
->(
- options: {
- queries:
- | readonly [...SuspenseQueriesOptions]
- | readonly [...{ [K in keyof T]: GetUseSuspenseQueryOptions }]
- combine?: (result: SuspenseQueriesResults) => TCombinedResult
- },
- queryClient?: QueryClient,
-): TCombinedResult
-
-export function useSuspenseQueries<
- T extends Array,
- TCombinedResult = SuspenseQueriesResults,
->(
- options: {
- queries: readonly [...SuspenseQueriesOptions]
- combine?: (result: SuspenseQueriesResults) => TCombinedResult
- },
- queryClient?: QueryClient,
-): TCombinedResult
-
-export function useSuspenseQueries(options: any, queryClient?: QueryClient) {
- return useQueries(
- {
- ...options,
- queries: options.queries.map((query: any) => {
- if (process.env.NODE_ENV !== 'production') {
- if (query.queryFn === skipToken) {
- console.error('skipToken is not allowed for useSuspenseQueries')
- }
- }
-
- return {
- ...query,
- suspense: true,
- throwOnError: defaultThrowOnError,
- enabled: true,
- placeholderData: undefined,
- }
- }),
- },
- queryClient,
- )
-}
diff --git a/frontend/.ignored_node_modules/@tanstack/react-query/src/useSuspenseQuery.ts b/frontend/.ignored_node_modules/@tanstack/react-query/src/useSuspenseQuery.ts
deleted file mode 100644
index 7dfdb06..0000000
--- a/frontend/.ignored_node_modules/@tanstack/react-query/src/useSuspenseQuery.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-'use client'
-import { QueryObserver, skipToken } from '@tanstack/query-core'
-import { useBaseQuery } from './useBaseQuery'
-import { defaultThrowOnError } from './suspense'
-import type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './types'
-import type { DefaultError, QueryClient, QueryKey } from '@tanstack/query-core'
-
-export function useSuspenseQuery<
- TQueryFnData = unknown,
- TError = DefaultError,
- TData = TQueryFnData,
- TQueryKey extends QueryKey = QueryKey,
->(
- options: UseSuspenseQueryOptions,
- queryClient?: QueryClient,
-): UseSuspenseQueryResult {
- if (process.env.NODE_ENV !== 'production') {
- if ((options.queryFn as any) === skipToken) {
- console.error('skipToken is not allowed for useSuspenseQuery')
- }
- }
-
- return useBaseQuery(
- {
- ...options,
- enabled: true,
- suspense: true,
- throwOnError: defaultThrowOnError,
- placeholderData: undefined,
- },
- QueryObserver,
- queryClient,
- ) as UseSuspenseQueryResult
-}
diff --git a/frontend/.ignored_node_modules/@types/node/LICENSE b/frontend/.ignored_node_modules/@types/node/LICENSE
deleted file mode 100644
index 9e841e7..0000000
--- a/frontend/.ignored_node_modules/@types/node/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
- MIT License
-
- Copyright (c) Microsoft Corporation.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE
diff --git a/frontend/.ignored_node_modules/@types/node/README.md b/frontend/.ignored_node_modules/@types/node/README.md
deleted file mode 100644
index f8ceba2..0000000
--- a/frontend/.ignored_node_modules/@types/node/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Installation
-> `npm install --save @types/node`
-
-# Summary
-This package contains type definitions for node (https://nodejs.org/).
-
-# Details
-Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node/v20.
-
-### Additional Details
- * Last updated: Tue, 11 Nov 2025 23:33:13 GMT
- * Dependencies: [undici-types](https://npmjs.com/package/undici-types)
-
-# Credits
-These definitions were written by [Microsoft TypeScript](https://github.com/Microsoft), [Alberto Schiabel](https://github.com/jkomyno), [Andrew Makarov](https://github.com/r3nya), [Benjamin Toueg](https://github.com/btoueg), [David Junger](https://github.com/touffy), [Mohsen Azimi](https://github.com/mohsen1), [Nikita Galkin](https://github.com/galkin), [Sebastian Silbermann](https://github.com/eps1lon), [Wilco Bakker](https://github.com/WilcoBakker), [Marcin Kopacz](https://github.com/chyzwar), [Trivikram Kamat](https://github.com/trivikr), [Junxiao Shi](https://github.com/yoursunny), [Ilia Baryshnikov](https://github.com/qwelias), [ExE Boss](https://github.com/ExE-Boss), [Piotr Błażejewicz](https://github.com/peterblazejewicz), [Anna Henningsen](https://github.com/addaleax), [Victor Perin](https://github.com/victorperin), [NodeJS Contributors](https://github.com/NodeJS), [Linus Unnebäck](https://github.com/LinusU), [wafuwafu13](https://github.com/wafuwafu13), [Matteo Collina](https://github.com/mcollina), and [Dmitry Semigradsky](https://github.com/Semigradsky).
diff --git a/frontend/.ignored_node_modules/@types/node/assert.d.ts b/frontend/.ignored_node_modules/@types/node/assert.d.ts
deleted file mode 100644
index c32c903..0000000
--- a/frontend/.ignored_node_modules/@types/node/assert.d.ts
+++ /dev/null
@@ -1,1062 +0,0 @@
-/**
- * The `node:assert` module provides a set of assertion functions for verifying
- * invariants.
- * @see [source](https://github.com/nodejs/node/blob/v20.13.1/lib/assert.js)
- */
-declare module "assert" {
- /**
- * An alias of {@link ok}.
- * @since v0.5.9
- * @param value The input that is checked for being truthy.
- */
- function assert(value: unknown, message?: string | Error): asserts value;
- namespace assert {
- type AssertMethodNames =
- | "deepEqual"
- | "deepStrictEqual"
- | "doesNotMatch"
- | "doesNotReject"
- | "doesNotThrow"
- | "equal"
- | "fail"
- | "ifError"
- | "match"
- | "notDeepEqual"
- | "notDeepStrictEqual"
- | "notEqual"
- | "notStrictEqual"
- | "ok"
- | "rejects"
- | "strictEqual"
- | "throws";
- /**
- * Indicates the failure of an assertion. All errors thrown by the `node:assert` module will be instances of the `AssertionError` class.
- */
- class AssertionError extends Error {
- /**
- * Set to the `actual` argument for methods such as {@link assert.strictEqual()}.
- */
- actual: unknown;
- /**
- * Set to the `expected` argument for methods such as {@link assert.strictEqual()}.
- */
- expected: unknown;
- /**
- * Set to the passed in operator value.
- */
- operator: string;
- /**
- * Indicates if the message was auto-generated (`true`) or not.
- */
- generatedMessage: boolean;
- /**
- * Value is always `ERR_ASSERTION` to show that the error is an assertion error.
- */
- code: "ERR_ASSERTION";
- constructor(options?: {
- /** If provided, the error message is set to this value. */
- message?: string | undefined;
- /** The `actual` property on the error instance. */
- actual?: unknown | undefined;
- /** The `expected` property on the error instance. */
- expected?: unknown | undefined;
- /** The `operator` property on the error instance. */
- operator?: string | undefined;
- /** If provided, the generated stack trace omits frames before this function. */
- // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
- stackStartFn?: Function | undefined;
- });
- }
- /**
- * This feature is deprecated and will be removed in a future version.
- * Please consider using alternatives such as the `mock` helper function.
- * @since v14.2.0, v12.19.0
- * @deprecated Deprecated
- */
- class CallTracker {
- /**
- * The wrapper function is expected to be called exactly `exact` times. If the
- * function has not been called exactly `exact` times when `tracker.verify()` is called, then `tracker.verify()` will throw an
- * error.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * // Creates call tracker.
- * const tracker = new assert.CallTracker();
- *
- * function func() {}
- *
- * // Returns a function that wraps func() that must be called exact times
- * // before tracker.verify().
- * const callsfunc = tracker.calls(func);
- * ```
- * @since v14.2.0, v12.19.0
- * @param [fn='A no-op function']
- * @param [exact=1]
- * @return A function that wraps `fn`.
- */
- calls(exact?: number): () => void;
- calls(fn: undefined, exact?: number): () => void;
- calls any>(fn: Func, exact?: number): Func;
- calls any>(fn?: Func, exact?: number): Func | (() => void);
- /**
- * Example:
- *
- * ```js
- * import assert from 'node:assert';
- *
- * const tracker = new assert.CallTracker();
- *
- * function func() {}
- * const callsfunc = tracker.calls(func);
- * callsfunc(1, 2, 3);
- *
- * assert.deepStrictEqual(tracker.getCalls(callsfunc),
- * [{ thisArg: undefined, arguments: [1, 2, 3] }]);
- * ```
- * @since v18.8.0, v16.18.0
- * @return An array with all the calls to a tracked function.
- */
- getCalls(fn: Function): CallTrackerCall[];
- /**
- * The arrays contains information about the expected and actual number of calls of
- * the functions that have not been called the expected number of times.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * // Creates call tracker.
- * const tracker = new assert.CallTracker();
- *
- * function func() {}
- *
- * // Returns a function that wraps func() that must be called exact times
- * // before tracker.verify().
- * const callsfunc = tracker.calls(func, 2);
- *
- * // Returns an array containing information on callsfunc()
- * console.log(tracker.report());
- * // [
- * // {
- * // message: 'Expected the func function to be executed 2 time(s) but was
- * // executed 0 time(s).',
- * // actual: 0,
- * // expected: 2,
- * // operator: 'func',
- * // stack: stack trace
- * // }
- * // ]
- * ```
- * @since v14.2.0, v12.19.0
- * @return An array of objects containing information about the wrapper functions returned by {@link tracker.calls()}.
- */
- report(): CallTrackerReportInformation[];
- /**
- * Reset calls of the call tracker. If a tracked function is passed as an argument, the calls will be reset for it.
- * If no arguments are passed, all tracked functions will be reset.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * const tracker = new assert.CallTracker();
- *
- * function func() {}
- * const callsfunc = tracker.calls(func);
- *
- * callsfunc();
- * // Tracker was called once
- * assert.strictEqual(tracker.getCalls(callsfunc).length, 1);
- *
- * tracker.reset(callsfunc);
- * assert.strictEqual(tracker.getCalls(callsfunc).length, 0);
- * ```
- * @since v18.8.0, v16.18.0
- * @param fn a tracked function to reset.
- */
- reset(fn?: Function): void;
- /**
- * Iterates through the list of functions passed to {@link tracker.calls()} and will throw an error for functions that
- * have not been called the expected number of times.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * // Creates call tracker.
- * const tracker = new assert.CallTracker();
- *
- * function func() {}
- *
- * // Returns a function that wraps func() that must be called exact times
- * // before tracker.verify().
- * const callsfunc = tracker.calls(func, 2);
- *
- * callsfunc();
- *
- * // Will throw an error since callsfunc() was only called once.
- * tracker.verify();
- * ```
- * @since v14.2.0, v12.19.0
- */
- verify(): void;
- }
- interface CallTrackerCall {
- thisArg: object;
- arguments: unknown[];
- }
- interface CallTrackerReportInformation {
- message: string;
- /** The actual number of times the function was called. */
- actual: number;
- /** The number of times the function was expected to be called. */
- expected: number;
- /** The name of the function that is wrapped. */
- operator: string;
- /** A stack trace of the function. */
- stack: object;
- }
- type AssertPredicate = RegExp | (new() => object) | ((thrown: unknown) => boolean) | object | Error;
- /**
- * Throws an `AssertionError` with the provided error message or a default
- * error message. If the `message` parameter is an instance of an `Error` then
- * it will be thrown instead of the `AssertionError`.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.fail();
- * // AssertionError [ERR_ASSERTION]: Failed
- *
- * assert.fail('boom');
- * // AssertionError [ERR_ASSERTION]: boom
- *
- * assert.fail(new TypeError('need array'));
- * // TypeError: need array
- * ```
- *
- * Using `assert.fail()` with more than two arguments is possible but deprecated.
- * See below for further details.
- * @since v0.1.21
- * @param [message='Failed']
- */
- function fail(message?: string | Error): never;
- /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */
- function fail(
- actual: unknown,
- expected: unknown,
- message?: string | Error,
- operator?: string,
- // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
- stackStartFn?: Function,
- ): never;
- /**
- * Tests if `value` is truthy. It is equivalent to `assert.equal(!!value, true, message)`.
- *
- * If `value` is not truthy, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is `undefined`, a default
- * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
- * If no arguments are passed in at all `message` will be set to the string:`` 'No value argument passed to `assert.ok()`' ``.
- *
- * Be aware that in the `repl` the error message will be different to the one
- * thrown in a file! See below for further details.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.ok(true);
- * // OK
- * assert.ok(1);
- * // OK
- *
- * assert.ok();
- * // AssertionError: No value argument passed to `assert.ok()`
- *
- * assert.ok(false, 'it\'s false');
- * // AssertionError: it's false
- *
- * // In the repl:
- * assert.ok(typeof 123 === 'string');
- * // AssertionError: false == true
- *
- * // In a file (e.g. test.js):
- * assert.ok(typeof 123 === 'string');
- * // AssertionError: The expression evaluated to a falsy value:
- * //
- * // assert.ok(typeof 123 === 'string')
- *
- * assert.ok(false);
- * // AssertionError: The expression evaluated to a falsy value:
- * //
- * // assert.ok(false)
- *
- * assert.ok(0);
- * // AssertionError: The expression evaluated to a falsy value:
- * //
- * // assert.ok(0)
- * ```
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * // Using `assert()` works the same:
- * assert(0);
- * // AssertionError: The expression evaluated to a falsy value:
- * //
- * // assert(0)
- * ```
- * @since v0.1.21
- */
- function ok(value: unknown, message?: string | Error): asserts value;
- /**
- * **Strict assertion mode**
- *
- * An alias of {@link strictEqual}.
- *
- * **Legacy assertion mode**
- *
- * > Stability: 3 - Legacy: Use {@link strictEqual} instead.
- *
- * Tests shallow, coercive equality between the `actual` and `expected` parameters
- * using the [`==` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality). `NaN` is specially handled
- * and treated as being identical if both sides are `NaN`.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * assert.equal(1, 1);
- * // OK, 1 == 1
- * assert.equal(1, '1');
- * // OK, 1 == '1'
- * assert.equal(NaN, NaN);
- * // OK
- *
- * assert.equal(1, 2);
- * // AssertionError: 1 == 2
- * assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
- * // AssertionError: { a: { b: 1 } } == { a: { b: 1 } }
- * ```
- *
- * If the values are not equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default
- * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
- * @since v0.1.21
- */
- function equal(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * **Strict assertion mode**
- *
- * An alias of {@link notStrictEqual}.
- *
- * **Legacy assertion mode**
- *
- * > Stability: 3 - Legacy: Use {@link notStrictEqual} instead.
- *
- * Tests shallow, coercive inequality with the [`!=` operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Inequality). `NaN` is
- * specially handled and treated as being identical if both sides are `NaN`.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * assert.notEqual(1, 2);
- * // OK
- *
- * assert.notEqual(1, 1);
- * // AssertionError: 1 != 1
- *
- * assert.notEqual(1, '1');
- * // AssertionError: 1 != '1'
- * ```
- *
- * If the values are equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default error
- * message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown instead of the `AssertionError`.
- * @since v0.1.21
- */
- function notEqual(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * **Strict assertion mode**
- *
- * An alias of {@link deepStrictEqual}.
- *
- * **Legacy assertion mode**
- *
- * > Stability: 3 - Legacy: Use {@link deepStrictEqual} instead.
- *
- * Tests for deep equality between the `actual` and `expected` parameters. Consider
- * using {@link deepStrictEqual} instead. {@link deepEqual} can have
- * surprising results.
- *
- * _Deep equality_ means that the enumerable "own" properties of child objects
- * are also recursively evaluated by the following rules.
- * @since v0.1.21
- */
- function deepEqual(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * **Strict assertion mode**
- *
- * An alias of {@link notDeepStrictEqual}.
- *
- * **Legacy assertion mode**
- *
- * > Stability: 3 - Legacy: Use {@link notDeepStrictEqual} instead.
- *
- * Tests for any deep inequality. Opposite of {@link deepEqual}.
- *
- * ```js
- * import assert from 'node:assert';
- *
- * const obj1 = {
- * a: {
- * b: 1,
- * },
- * };
- * const obj2 = {
- * a: {
- * b: 2,
- * },
- * };
- * const obj3 = {
- * a: {
- * b: 1,
- * },
- * };
- * const obj4 = { __proto__: obj1 };
- *
- * assert.notDeepEqual(obj1, obj1);
- * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
- *
- * assert.notDeepEqual(obj1, obj2);
- * // OK
- *
- * assert.notDeepEqual(obj1, obj3);
- * // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
- *
- * assert.notDeepEqual(obj1, obj4);
- * // OK
- * ```
- *
- * If the values are deeply equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a default
- * error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
- * instead of the `AssertionError`.
- * @since v0.1.21
- */
- function notDeepEqual(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * Tests strict equality between the `actual` and `expected` parameters as
- * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.strictEqual(1, 2);
- * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
- * //
- * // 1 !== 2
- *
- * assert.strictEqual(1, 1);
- * // OK
- *
- * assert.strictEqual('Hello foobar', 'Hello World!');
- * // AssertionError [ERR_ASSERTION]: Expected inputs to be strictly equal:
- * // + actual - expected
- * //
- * // + 'Hello foobar'
- * // - 'Hello World!'
- * // ^
- *
- * const apples = 1;
- * const oranges = 2;
- * assert.strictEqual(apples, oranges, `apples ${apples} !== oranges ${oranges}`);
- * // AssertionError [ERR_ASSERTION]: apples 1 !== oranges 2
- *
- * assert.strictEqual(1, '1', new TypeError('Inputs are not identical'));
- * // TypeError: Inputs are not identical
- * ```
- *
- * If the values are not strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a
- * default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
- * instead of the `AssertionError`.
- * @since v0.1.21
- */
- function strictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T;
- /**
- * Tests strict inequality between the `actual` and `expected` parameters as
- * determined by [`Object.is()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.notStrictEqual(1, 2);
- * // OK
- *
- * assert.notStrictEqual(1, 1);
- * // AssertionError [ERR_ASSERTION]: Expected "actual" to be strictly unequal to:
- * //
- * // 1
- *
- * assert.notStrictEqual(1, '1');
- * // OK
- * ```
- *
- * If the values are strictly equal, an `AssertionError` is thrown with a `message` property set equal to the value of the `message` parameter. If the `message` parameter is undefined, a
- * default error message is assigned. If the `message` parameter is an instance of an `Error` then it will be thrown
- * instead of the `AssertionError`.
- * @since v0.1.21
- */
- function notStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * Tests for deep equality between the `actual` and `expected` parameters.
- * "Deep" equality means that the enumerable "own" properties of child objects
- * are recursively evaluated also by the following rules.
- * @since v1.2.0
- */
- function deepStrictEqual(actual: unknown, expected: T, message?: string | Error): asserts actual is T;
- /**
- * Tests for deep strict inequality. Opposite of {@link deepStrictEqual}.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.notDeepStrictEqual({ a: 1 }, { a: '1' });
- * // OK
- * ```
- *
- * If the values are deeply and strictly equal, an `AssertionError` is thrown
- * with a `message` property set equal to the value of the `message` parameter. If
- * the `message` parameter is undefined, a default error message is assigned. If
- * the `message` parameter is an instance of an `Error` then it will be thrown
- * instead of the `AssertionError`.
- * @since v1.2.0
- */
- function notDeepStrictEqual(actual: unknown, expected: unknown, message?: string | Error): void;
- /**
- * Expects the function `fn` to throw an error.
- *
- * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
- * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
- * a validation object where each property will be tested for strict deep equality,
- * or an instance of error where each property will be tested for strict deep
- * equality including the non-enumerable `message` and `name` properties. When
- * using an object, it is also possible to use a regular expression, when
- * validating against a string property. See below for examples.
- *
- * If specified, `message` will be appended to the message provided by the `AssertionError` if the `fn` call fails to throw or in case the error validation
- * fails.
- *
- * Custom validation object/error instance:
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * const err = new TypeError('Wrong value');
- * err.code = 404;
- * err.foo = 'bar';
- * err.info = {
- * nested: true,
- * baz: 'text',
- * };
- * err.reg = /abc/i;
- *
- * assert.throws(
- * () => {
- * throw err;
- * },
- * {
- * name: 'TypeError',
- * message: 'Wrong value',
- * info: {
- * nested: true,
- * baz: 'text',
- * },
- * // Only properties on the validation object will be tested for.
- * // Using nested objects requires all properties to be present. Otherwise
- * // the validation is going to fail.
- * },
- * );
- *
- * // Using regular expressions to validate error properties:
- * assert.throws(
- * () => {
- * throw err;
- * },
- * {
- * // The `name` and `message` properties are strings and using regular
- * // expressions on those will match against the string. If they fail, an
- * // error is thrown.
- * name: /^TypeError$/,
- * message: /Wrong/,
- * foo: 'bar',
- * info: {
- * nested: true,
- * // It is not possible to use regular expressions for nested properties!
- * baz: 'text',
- * },
- * // The `reg` property contains a regular expression and only if the
- * // validation object contains an identical regular expression, it is going
- * // to pass.
- * reg: /abc/i,
- * },
- * );
- *
- * // Fails due to the different `message` and `name` properties:
- * assert.throws(
- * () => {
- * const otherErr = new Error('Not found');
- * // Copy all enumerable properties from `err` to `otherErr`.
- * for (const [key, value] of Object.entries(err)) {
- * otherErr[key] = value;
- * }
- * throw otherErr;
- * },
- * // The error's `message` and `name` properties will also be checked when using
- * // an error as validation object.
- * err,
- * );
- * ```
- *
- * Validate instanceof using constructor:
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.throws(
- * () => {
- * throw new Error('Wrong value');
- * },
- * Error,
- * );
- * ```
- *
- * Validate error message using [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions):
- *
- * Using a regular expression runs `.toString` on the error object, and will
- * therefore also include the error name.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.throws(
- * () => {
- * throw new Error('Wrong value');
- * },
- * /^Error: Wrong value$/,
- * );
- * ```
- *
- * Custom error validation:
- *
- * The function must return `true` to indicate all internal validations passed.
- * It will otherwise fail with an `AssertionError`.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.throws(
- * () => {
- * throw new Error('Wrong value');
- * },
- * (err) => {
- * assert(err instanceof Error);
- * assert(/value/.test(err));
- * // Avoid returning anything from validation functions besides `true`.
- * // Otherwise, it's not clear what part of the validation failed. Instead,
- * // throw an error about the specific validation that failed (as done in this
- * // example) and add as much helpful debugging information to that error as
- * // possible.
- * return true;
- * },
- * 'unexpected error',
- * );
- * ```
- *
- * `error` cannot be a string. If a string is provided as the second
- * argument, then `error` is assumed to be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Using the same
- * message as the thrown error message is going to result in an `ERR_AMBIGUOUS_ARGUMENT` error. Please read the example below carefully if using
- * a string as the second argument gets considered:
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * function throwingFirst() {
- * throw new Error('First');
- * }
- *
- * function throwingSecond() {
- * throw new Error('Second');
- * }
- *
- * function notThrowing() {}
- *
- * // The second argument is a string and the input function threw an Error.
- * // The first case will not throw as it does not match for the error message
- * // thrown by the input function!
- * assert.throws(throwingFirst, 'Second');
- * // In the next example the message has no benefit over the message from the
- * // error and since it is not clear if the user intended to actually match
- * // against the error message, Node.js throws an `ERR_AMBIGUOUS_ARGUMENT` error.
- * assert.throws(throwingSecond, 'Second');
- * // TypeError [ERR_AMBIGUOUS_ARGUMENT]
- *
- * // The string is only used (as message) in case the function does not throw:
- * assert.throws(notThrowing, 'Second');
- * // AssertionError [ERR_ASSERTION]: Missing expected exception: Second
- *
- * // If it was intended to match for the error message do this instead:
- * // It does not throw because the error messages match.
- * assert.throws(throwingSecond, /Second$/);
- *
- * // If the error message does not match, an AssertionError is thrown.
- * assert.throws(throwingFirst, /Second$/);
- * // AssertionError [ERR_ASSERTION]
- * ```
- *
- * Due to the confusing error-prone notation, avoid a string as the second
- * argument.
- * @since v0.1.21
- */
- function throws(block: () => unknown, message?: string | Error): void;
- function throws(block: () => unknown, error: AssertPredicate, message?: string | Error): void;
- /**
- * Asserts that the function `fn` does not throw an error.
- *
- * Using `assert.doesNotThrow()` is actually not useful because there
- * is no benefit in catching an error and then rethrowing it. Instead, consider
- * adding a comment next to the specific code path that should not throw and keep
- * error messages as expressive as possible.
- *
- * When `assert.doesNotThrow()` is called, it will immediately call the `fn` function.
- *
- * If an error is thrown and it is the same type as that specified by the `error` parameter, then an `AssertionError` is thrown. If the error is of a
- * different type, or if the `error` parameter is undefined, the error is
- * propagated back to the caller.
- *
- * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
- * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation
- * function. See {@link throws} for more details.
- *
- * The following, for instance, will throw the `TypeError` because there is no
- * matching error type in the assertion:
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.doesNotThrow(
- * () => {
- * throw new TypeError('Wrong value');
- * },
- * SyntaxError,
- * );
- * ```
- *
- * However, the following will result in an `AssertionError` with the message
- * 'Got unwanted exception...':
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.doesNotThrow(
- * () => {
- * throw new TypeError('Wrong value');
- * },
- * TypeError,
- * );
- * ```
- *
- * If an `AssertionError` is thrown and a value is provided for the `message` parameter, the value of `message` will be appended to the `AssertionError` message:
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.doesNotThrow(
- * () => {
- * throw new TypeError('Wrong value');
- * },
- * /Wrong value/,
- * 'Whoops',
- * );
- * // Throws: AssertionError: Got unwanted exception: Whoops
- * ```
- * @since v0.1.21
- */
- function doesNotThrow(block: () => unknown, message?: string | Error): void;
- function doesNotThrow(block: () => unknown, error: AssertPredicate, message?: string | Error): void;
- /**
- * Throws `value` if `value` is not `undefined` or `null`. This is useful when
- * testing the `error` argument in callbacks. The stack trace contains all frames
- * from the error passed to `ifError()` including the potential new frames for `ifError()` itself.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.ifError(null);
- * // OK
- * assert.ifError(0);
- * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0
- * assert.ifError('error');
- * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 'error'
- * assert.ifError(new Error());
- * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: Error
- *
- * // Create some random error frames.
- * let err;
- * (function errorFrame() {
- * err = new Error('test error');
- * })();
- *
- * (function ifErrorFrame() {
- * assert.ifError(err);
- * })();
- * // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: test error
- * // at ifErrorFrame
- * // at errorFrame
- * ```
- * @since v0.1.97
- */
- function ifError(value: unknown): asserts value is null | undefined;
- /**
- * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately
- * calls the function and awaits the returned promise to complete. It will then
- * check that the promise is rejected.
- *
- * If `asyncFn` is a function and it throws an error synchronously, `assert.rejects()` will return a rejected `Promise` with that error. If the
- * function does not return a promise, `assert.rejects()` will return a rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v20.x/api/errors.html#err_invalid_return_value)
- * error. In both cases the error handler is skipped.
- *
- * Besides the async nature to await the completion behaves identically to {@link throws}.
- *
- * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
- * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), a validation function,
- * an object where each property will be tested for, or an instance of error where
- * each property will be tested for including the non-enumerable `message` and `name` properties.
- *
- * If specified, `message` will be the message provided by the `{@link AssertionError}` if the `asyncFn` fails to reject.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * await assert.rejects(
- * async () => {
- * throw new TypeError('Wrong value');
- * },
- * {
- * name: 'TypeError',
- * message: 'Wrong value',
- * },
- * );
- * ```
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * await assert.rejects(
- * async () => {
- * throw new TypeError('Wrong value');
- * },
- * (err) => {
- * assert.strictEqual(err.name, 'TypeError');
- * assert.strictEqual(err.message, 'Wrong value');
- * return true;
- * },
- * );
- * ```
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.rejects(
- * Promise.reject(new Error('Wrong value')),
- * Error,
- * ).then(() => {
- * // ...
- * });
- * ```
- *
- * `error` cannot be a string. If a string is provided as the second argument, then `error` is assumed to
- * be omitted and the string will be used for `message` instead. This can lead to easy-to-miss mistakes. Please read the
- * example in {@link throws} carefully if using a string as the second argument gets considered.
- * @since v10.0.0
- */
- function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise;
- function rejects(
- block: (() => Promise) | Promise,
- error: AssertPredicate,
- message?: string | Error,
- ): Promise;
- /**
- * Awaits the `asyncFn` promise or, if `asyncFn` is a function, immediately
- * calls the function and awaits the returned promise to complete. It will then
- * check that the promise is not rejected.
- *
- * If `asyncFn` is a function and it throws an error synchronously, `assert.doesNotReject()` will return a rejected `Promise` with that error. If
- * the function does not return a promise, `assert.doesNotReject()` will return a
- * rejected `Promise` with an [ERR_INVALID_RETURN_VALUE](https://nodejs.org/docs/latest-v20.x/api/errors.html#err_invalid_return_value) error. In both cases
- * the error handler is skipped.
- *
- * Using `assert.doesNotReject()` is actually not useful because there is little
- * benefit in catching a rejection and then rejecting it again. Instead, consider
- * adding a comment next to the specific code path that should not reject and keep
- * error messages as expressive as possible.
- *
- * If specified, `error` can be a [`Class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes),
- * [`RegExp`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), or a validation
- * function. See {@link throws} for more details.
- *
- * Besides the async nature to await the completion behaves identically to {@link doesNotThrow}.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * await assert.doesNotReject(
- * async () => {
- * throw new TypeError('Wrong value');
- * },
- * SyntaxError,
- * );
- * ```
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.doesNotReject(Promise.reject(new TypeError('Wrong value')))
- * .then(() => {
- * // ...
- * });
- * ```
- * @since v10.0.0
- */
- function doesNotReject(
- block: (() => Promise) | Promise,
- message?: string | Error,
- ): Promise;
- function doesNotReject(
- block: (() => Promise) | Promise,
- error: AssertPredicate,
- message?: string | Error,
- ): Promise;
- /**
- * Expects the `string` input to match the regular expression.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.match('I will fail', /pass/);
- * // AssertionError [ERR_ASSERTION]: The input did not match the regular ...
- *
- * assert.match(123, /pass/);
- * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
- *
- * assert.match('I will pass', /pass/);
- * // OK
- * ```
- *
- * If the values do not match, or if the `string` argument is of another type than `string`, an `{@link AssertionError}` is thrown with a `message` property set equal
- * to the value of the `message` parameter. If the `message` parameter is
- * undefined, a default error message is assigned. If the `message` parameter is an
- * instance of an [Error](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) then it will be thrown instead of the `{@link AssertionError}`.
- * @since v13.6.0, v12.16.0
- */
- function match(value: string, regExp: RegExp, message?: string | Error): void;
- /**
- * Expects the `string` input not to match the regular expression.
- *
- * ```js
- * import assert from 'node:assert/strict';
- *
- * assert.doesNotMatch('I will fail', /fail/);
- * // AssertionError [ERR_ASSERTION]: The input was expected to not match the ...
- *
- * assert.doesNotMatch(123, /pass/);
- * // AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
- *
- * assert.doesNotMatch('I will pass', /different/);
- * // OK
- * ```
- *
- * If the values do match, or if the `string` argument is of another type than `string`, an `{@link AssertionError}` is thrown with a `message` property set equal
- * to the value of the `message` parameter. If the `message` parameter is
- * undefined, a default error message is assigned. If the `message` parameter is an
- * instance of an [Error](https://nodejs.org/docs/latest-v20.x/api/errors.html#class-error) then it will be thrown instead of the `{@link AssertionError}`.
- * @since v13.6.0, v12.16.0
- */
- function doesNotMatch(value: string, regExp: RegExp, message?: string | Error): void;
- /**
- * In strict assertion mode, non-strict methods behave like their corresponding strict methods. For example,
- * {@link deepEqual} will behave like {@link deepStrictEqual}.
- *
- * In strict assertion mode, error messages for objects display a diff. In legacy assertion mode, error
- * messages for objects display the objects, often truncated.
- *
- * To use strict assertion mode:
- *
- * ```js
- * import { strict as assert } from 'node:assert';COPY
- * import assert from 'node:assert/strict';
- * ```
- *
- * Example error diff:
- *
- * ```js
- * import { strict as assert } from 'node:assert';
- *
- * assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5]);
- * // AssertionError: Expected inputs to be strictly deep-equal:
- * // + actual - expected ... Lines skipped
- * //
- * // [
- * // [
- * // ...
- * // 2,
- * // + 3
- * // - '3'
- * // ],
- * // ...
- * // 5
- * // ]
- * ```
- *
- * To deactivate the colors, use the `NO_COLOR` or `NODE_DISABLE_COLORS` environment variables. This will also
- * deactivate the colors in the REPL. For more on color support in terminal environments, read the tty
- * `getColorDepth()` documentation.
- *
- * @since v15.0.0, v13.9.0, v12.16.2, v9.9.0
- */
- namespace strict {
- type AssertionError = assert.AssertionError;
- type AssertPredicate = assert.AssertPredicate;
- type CallTrackerCall = assert.CallTrackerCall;
- type CallTrackerReportInformation = assert.CallTrackerReportInformation;
- }
- const strict:
- & Omit<
- typeof assert,
- | "equal"
- | "notEqual"
- | "deepEqual"
- | "notDeepEqual"
- | "ok"
- | "strictEqual"
- | "deepStrictEqual"
- | "ifError"
- | "strict"
- | "AssertionError"
- >
- & {
- (value: unknown, message?: string | Error): asserts value;
- equal: typeof strictEqual;
- notEqual: typeof notStrictEqual;
- deepEqual: typeof deepStrictEqual;
- notDeepEqual: typeof notDeepStrictEqual;
- // Mapped types and assertion functions are incompatible?
- // TS2775: Assertions require every name in the call target
- // to be declared with an explicit type annotation.
- ok: typeof ok;
- strictEqual: typeof strictEqual;
- deepStrictEqual: typeof deepStrictEqual;
- ifError: typeof ifError;
- strict: typeof strict;
- AssertionError: typeof AssertionError;
- };
- }
- export = assert;
-}
-declare module "node:assert" {
- import assert = require("assert");
- export = assert;
-}
diff --git a/frontend/.ignored_node_modules/@types/node/assert/strict.d.ts b/frontend/.ignored_node_modules/@types/node/assert/strict.d.ts
deleted file mode 100644
index f333913..0000000
--- a/frontend/.ignored_node_modules/@types/node/assert/strict.d.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-declare module "assert/strict" {
- import { strict } from "node:assert";
- export = strict;
-}
-declare module "node:assert/strict" {
- import { strict } from "node:assert";
- export = strict;
-}
diff --git a/frontend/.ignored_node_modules/@types/node/async_hooks.d.ts b/frontend/.ignored_node_modules/@types/node/async_hooks.d.ts
deleted file mode 100644
index fd9d2aa..0000000
--- a/frontend/.ignored_node_modules/@types/node/async_hooks.d.ts
+++ /dev/null
@@ -1,605 +0,0 @@
-/**
- * We strongly discourage the use of the `async_hooks` API.
- * Other APIs that can cover most of its use cases include:
- *
- * * [`AsyncLocalStorage`](https://nodejs.org/docs/latest-v20.x/api/async_context.html#class-asynclocalstorage) tracks async context
- * * [`process.getActiveResourcesInfo()`](https://nodejs.org/docs/latest-v20.x/api/process.html#processgetactiveresourcesinfo) tracks active resources
- *
- * The `node:async_hooks` module provides an API to track asynchronous resources.
- * It can be accessed using:
- *
- * ```js
- * import async_hooks from 'node:async_hooks';
- * ```
- * @experimental
- * @see [source](https://github.com/nodejs/node/blob/v20.13.1/lib/async_hooks.js)
- */
-declare module "async_hooks" {
- /**
- * ```js
- * import { executionAsyncId } from 'node:async_hooks';
- * import fs from 'node:fs';
- *
- * console.log(executionAsyncId()); // 1 - bootstrap
- * const path = '.';
- * fs.open(path, 'r', (err, fd) => {
- * console.log(executionAsyncId()); // 6 - open()
- * });
- * ```
- *
- * The ID returned from `executionAsyncId()` is related to execution timing, not
- * causality (which is covered by `triggerAsyncId()`):
- *
- * ```js
- * const server = net.createServer((conn) => {
- * // Returns the ID of the server, not of the new connection, because the
- * // callback runs in the execution scope of the server's MakeCallback().
- * async_hooks.executionAsyncId();
- *
- * }).listen(port, () => {
- * // Returns the ID of a TickObject (process.nextTick()) because all
- * // callbacks passed to .listen() are wrapped in a nextTick().
- * async_hooks.executionAsyncId();
- * });
- * ```
- *
- * Promise contexts may not get precise `executionAsyncIds` by default.
- * See the section on [promise execution tracking](https://nodejs.org/docs/latest-v20.x/api/async_hooks.html#promise-execution-tracking).
- * @since v8.1.0
- * @return The `asyncId` of the current execution context. Useful to track when something calls.
- */
- function executionAsyncId(): number;
- /**
- * Resource objects returned by `executionAsyncResource()` are most often internal
- * Node.js handle objects with undocumented APIs. Using any functions or properties
- * on the object is likely to crash your application and should be avoided.
- *
- * Using `executionAsyncResource()` in the top-level execution context will
- * return an empty object as there is no handle or request object to use,
- * but having an object representing the top-level can be helpful.
- *
- * ```js
- * import { open } from 'node:fs';
- * import { executionAsyncId, executionAsyncResource } from 'node:async_hooks';
- *
- * console.log(executionAsyncId(), executionAsyncResource()); // 1 {}
- * open(new URL(import.meta.url), 'r', (err, fd) => {
- * console.log(executionAsyncId(), executionAsyncResource()); // 7 FSReqWrap
- * });
- * ```
- *
- * This can be used to implement continuation local storage without the
- * use of a tracking `Map` to store the metadata:
- *
- * ```js
- * import { createServer } from 'node:http';
- * import {
- * executionAsyncId,
- * executionAsyncResource,
- * createHook,
- * } from 'async_hooks';
- * const sym = Symbol('state'); // Private symbol to avoid pollution
- *
- * createHook({
- * init(asyncId, type, triggerAsyncId, resource) {
- * const cr = executionAsyncResource();
- * if (cr) {
- * resource[sym] = cr[sym];
- * }
- * },
- * }).enable();
- *
- * const server = createServer((req, res) => {
- * executionAsyncResource()[sym] = { state: req.url };
- * setTimeout(function() {
- * res.end(JSON.stringify(executionAsyncResource()[sym]));
- * }, 100);
- * }).listen(3000);
- * ```
- * @since v13.9.0, v12.17.0
- * @return The resource representing the current execution. Useful to store data within the resource.
- */
- function executionAsyncResource(): object;
- /**
- * ```js
- * const server = net.createServer((conn) => {
- * // The resource that caused (or triggered) this callback to be called
- * // was that of the new connection. Thus the return value of triggerAsyncId()
- * // is the asyncId of "conn".
- * async_hooks.triggerAsyncId();
- *
- * }).listen(port, () => {
- * // Even though all callbacks passed to .listen() are wrapped in a nextTick()
- * // the callback itself exists because the call to the server's .listen()
- * // was made. So the return value would be the ID of the server.
- * async_hooks.triggerAsyncId();
- * });
- * ```
- *
- * Promise contexts may not get valid `triggerAsyncId`s by default. See
- * the section on [promise execution tracking](https://nodejs.org/docs/latest-v20.x/api/async_hooks.html#promise-execution-tracking).
- * @return The ID of the resource responsible for calling the callback that is currently being executed.
- */
- function triggerAsyncId(): number;
- interface HookCallbacks {
- /**
- * Called when a class is constructed that has the possibility to emit an asynchronous event.
- * @param asyncId A unique ID for the async resource
- * @param type The type of the async resource
- * @param triggerAsyncId The unique ID of the async resource in whose execution context this async resource was created
- * @param resource Reference to the resource representing the async operation, needs to be released during destroy
- */
- init?(asyncId: number, type: string, triggerAsyncId: number, resource: object): void;
- /**
- * When an asynchronous operation is initiated or completes a callback is called to notify the user.
- * The before callback is called just before said callback is executed.
- * @param asyncId the unique identifier assigned to the resource about to execute the callback.
- */
- before?(asyncId: number): void;
- /**
- * Called immediately after the callback specified in `before` is completed.
- *
- * If an uncaught exception occurs during execution of the callback, then `after` will run after the `'uncaughtException'` event is emitted or a `domain`'s handler runs.
- * @param asyncId the unique identifier assigned to the resource which has executed the callback.
- */
- after?(asyncId: number): void;
- /**
- * Called when a promise has resolve() called. This may not be in the same execution id
- * as the promise itself.
- * @param asyncId the unique id for the promise that was resolve()d.
- */
- promiseResolve?(asyncId: number): void;
- /**
- * Called after the resource corresponding to asyncId is destroyed
- * @param asyncId a unique ID for the async resource
- */
- destroy?(asyncId: number): void;
- }
- interface AsyncHook {
- /**
- * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
- */
- enable(): this;
- /**
- * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled.
- */
- disable(): this;
- }
- /**
- * Registers functions to be called for different lifetime events of each async
- * operation.
- *
- * The callbacks `init()`/`before()`/`after()`/`destroy()` are called for the
- * respective asynchronous event during a resource's lifetime.
- *
- * All callbacks are optional. For example, if only resource cleanup needs to
- * be tracked, then only the `destroy` callback needs to be passed. The
- * specifics of all functions that can be passed to `callbacks` is in the `Hook Callbacks` section.
- *
- * ```js
- * import { createHook } from 'node:async_hooks';
- *
- * const asyncHook = createHook({
- * init(asyncId, type, triggerAsyncId, resource) { },
- * destroy(asyncId) { },
- * });
- * ```
- *
- * The callbacks will be inherited via the prototype chain:
- *
- * ```js
- * class MyAsyncCallbacks {
- * init(asyncId, type, triggerAsyncId, resource) { }
- * destroy(asyncId) {}
- * }
- *
- * class MyAddedCallbacks extends MyAsyncCallbacks {
- * before(asyncId) { }
- * after(asyncId) { }
- * }
- *
- * const asyncHook = async_hooks.createHook(new MyAddedCallbacks());
- * ```
- *
- * Because promises are asynchronous resources whose lifecycle is tracked
- * via the async hooks mechanism, the `init()`, `before()`, `after()`, and`destroy()` callbacks _must not_ be async functions that return promises.
- * @since v8.1.0
- * @param callbacks The `Hook Callbacks` to register
- * @return Instance used for disabling and enabling hooks
- */
- function createHook(callbacks: HookCallbacks): AsyncHook;
- interface AsyncResourceOptions {
- /**
- * The ID of the execution context that created this async event.
- * @default executionAsyncId()
- */
- triggerAsyncId?: number | undefined;
- /**
- * Disables automatic `emitDestroy` when the object is garbage collected.
- * This usually does not need to be set (even if `emitDestroy` is called
- * manually), unless the resource's `asyncId` is retrieved and the
- * sensitive API's `emitDestroy` is called with it.
- * @default false
- */
- requireManualDestroy?: boolean | undefined;
- }
- /**
- * The class `AsyncResource` is designed to be extended by the embedder's async
- * resources. Using this, users can easily trigger the lifetime events of their
- * own resources.
- *
- * The `init` hook will trigger when an `AsyncResource` is instantiated.
- *
- * The following is an overview of the `AsyncResource` API.
- *
- * ```js
- * import { AsyncResource, executionAsyncId } from 'node:async_hooks';
- *
- * // AsyncResource() is meant to be extended. Instantiating a
- * // new AsyncResource() also triggers init. If triggerAsyncId is omitted then
- * // async_hook.executionAsyncId() is used.
- * const asyncResource = new AsyncResource(
- * type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false },
- * );
- *
- * // Run a function in the execution context of the resource. This will
- * // * establish the context of the resource
- * // * trigger the AsyncHooks before callbacks
- * // * call the provided function `fn` with the supplied arguments
- * // * trigger the AsyncHooks after callbacks
- * // * restore the original execution context
- * asyncResource.runInAsyncScope(fn, thisArg, ...args);
- *
- * // Call AsyncHooks destroy callbacks.
- * asyncResource.emitDestroy();
- *
- * // Return the unique ID assigned to the AsyncResource instance.
- * asyncResource.asyncId();
- *
- * // Return the trigger ID for the AsyncResource instance.
- * asyncResource.triggerAsyncId();
- * ```
- */
- class AsyncResource {
- /**
- * AsyncResource() is meant to be extended. Instantiating a
- * new AsyncResource() also triggers init. If triggerAsyncId is omitted then
- * async_hook.executionAsyncId() is used.
- * @param type The type of async event.
- * @param triggerAsyncId The ID of the execution context that created
- * this async event (default: `executionAsyncId()`), or an
- * AsyncResourceOptions object (since v9.3.0)
- */
- constructor(type: string, triggerAsyncId?: number | AsyncResourceOptions);
- /**
- * Binds the given function to the current execution context.
- * @since v14.8.0, v12.19.0
- * @param fn The function to bind to the current execution context.
- * @param type An optional name to associate with the underlying `AsyncResource`.
- */
- static bind any, ThisArg>(
- fn: Func,
- type?: string,
- thisArg?: ThisArg,
- ): Func;
- /**
- * Binds the given function to execute to this `AsyncResource`'s scope.
- * @since v14.8.0, v12.19.0
- * @param fn The function to bind to the current `AsyncResource`.
- */
- bind any>(fn: Func): Func;
- /**
- * Call the provided function with the provided arguments in the execution context
- * of the async resource. This will establish the context, trigger the AsyncHooks
- * before callbacks, call the function, trigger the AsyncHooks after callbacks, and
- * then restore the original execution context.
- * @since v9.6.0
- * @param fn The function to call in the execution context of this async resource.
- * @param thisArg The receiver to be used for the function call.
- * @param args Optional arguments to pass to the function.
- */
- runInAsyncScope(
- fn: (this: This, ...args: any[]) => Result,
- thisArg?: This,
- ...args: any[]
- ): Result;
- /**
- * Call all `destroy` hooks. This should only ever be called once. An error will
- * be thrown if it is called more than once. This **must** be manually called. If
- * the resource is left to be collected by the GC then the `destroy` hooks will
- * never be called.
- * @return A reference to `asyncResource`.
- */
- emitDestroy(): this;
- /**
- * @return The unique `asyncId` assigned to the resource.
- */
- asyncId(): number;
- /**
- * @return The same `triggerAsyncId` that is passed to the `AsyncResource` constructor.
- */
- triggerAsyncId(): number;
- }
- /**
- * This class creates stores that stay coherent through asynchronous operations.
- *
- * While you can create your own implementation on top of the `node:async_hooks` module, `AsyncLocalStorage` should be preferred as it is a performant and memory
- * safe implementation that involves significant optimizations that are non-obvious
- * to implement.
- *
- * The following example uses `AsyncLocalStorage` to build a simple logger
- * that assigns IDs to incoming HTTP requests and includes them in messages
- * logged within each request.
- *
- * ```js
- * import http from 'node:http';
- * import { AsyncLocalStorage } from 'node:async_hooks';
- *
- * const asyncLocalStorage = new AsyncLocalStorage();
- *
- * function logWithId(msg) {
- * const id = asyncLocalStorage.getStore();
- * console.log(`${id !== undefined ? id : '-'}:`, msg);
- * }
- *
- * let idSeq = 0;
- * http.createServer((req, res) => {
- * asyncLocalStorage.run(idSeq++, () => {
- * logWithId('start');
- * // Imagine any chain of async operations here
- * setImmediate(() => {
- * logWithId('finish');
- * res.end();
- * });
- * });
- * }).listen(8080);
- *
- * http.get('http://localhost:8080');
- * http.get('http://localhost:8080');
- * // Prints:
- * // 0: start
- * // 1: start
- * // 0: finish
- * // 1: finish
- * ```
- *
- * Each instance of `AsyncLocalStorage` maintains an independent storage context.
- * Multiple instances can safely exist simultaneously without risk of interfering
- * with each other's data.
- * @since v13.10.0, v12.17.0
- */
- class AsyncLocalStorage {
- /**
- * Binds the given function to the current execution context.
- * @since v19.8.0
- * @experimental
- * @param fn The function to bind to the current execution context.
- * @return A new function that calls `fn` within the captured execution context.
- */
- static bind any>(fn: Func): Func;
- /**
- * Captures the current execution context and returns a function that accepts a
- * function as an argument. Whenever the returned function is called, it
- * calls the function passed to it within the captured context.
- *
- * ```js
- * const asyncLocalStorage = new AsyncLocalStorage();
- * const runInAsyncScope = asyncLocalStorage.run(123, () => AsyncLocalStorage.snapshot());
- * const result = asyncLocalStorage.run(321, () => runInAsyncScope(() => asyncLocalStorage.getStore()));
- * console.log(result); // returns 123
- * ```
- *
- * AsyncLocalStorage.snapshot() can replace the use of AsyncResource for simple
- * async context tracking purposes, for example:
- *
- * ```js
- * class Foo {
- * #runInAsyncScope = AsyncLocalStorage.snapshot();
- *
- * get() { return this.#runInAsyncScope(() => asyncLocalStorage.getStore()); }
- * }
- *
- * const foo = asyncLocalStorage.run(123, () => new Foo());
- * console.log(asyncLocalStorage.run(321, () => foo.get())); // returns 123
- * ```
- * @since v19.8.0
- * @experimental
- * @return A new function with the signature `(fn: (...args) : R, ...args) : R`.
- */
- static snapshot(): (fn: (...args: TArgs) => R, ...args: TArgs) => R;
- /**
- * Disables the instance of `AsyncLocalStorage`. All subsequent calls
- * to `asyncLocalStorage.getStore()` will return `undefined` until `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()` is called again.
- *
- * When calling `asyncLocalStorage.disable()`, all current contexts linked to the
- * instance will be exited.
- *
- * Calling `asyncLocalStorage.disable()` is required before the `asyncLocalStorage` can be garbage collected. This does not apply to stores
- * provided by the `asyncLocalStorage`, as those objects are garbage collected
- * along with the corresponding async resources.
- *
- * Use this method when the `asyncLocalStorage` is not in use anymore
- * in the current process.
- * @since v13.10.0, v12.17.0
- * @experimental
- */
- disable(): void;
- /**
- * Returns the current store.
- * If called outside of an asynchronous context initialized by
- * calling `asyncLocalStorage.run()` or `asyncLocalStorage.enterWith()`, it
- * returns `undefined`.
- * @since v13.10.0, v12.17.0
- */
- getStore(): T | undefined;
- /**
- * Runs a function synchronously within a context and returns its
- * return value. The store is not accessible outside of the callback function.
- * The store is accessible to any asynchronous operations created within the
- * callback.
- *
- * The optional `args` are passed to the callback function.
- *
- * If the callback function throws an error, the error is thrown by `run()` too.
- * The stacktrace is not impacted by this call and the context is exited.
- *
- * Example:
- *
- * ```js
- * const store = { id: 2 };
- * try {
- * asyncLocalStorage.run(store, () => {
- * asyncLocalStorage.getStore(); // Returns the store object
- * setTimeout(() => {
- * asyncLocalStorage.getStore(); // Returns the store object
- * }, 200);
- * throw new Error();
- * });
- * } catch (e) {
- * asyncLocalStorage.getStore(); // Returns undefined
- * // The error will be caught here
- * }
- * ```
- * @since v13.10.0, v12.17.0
- */
- run(store: T, callback: () => R): R;
- run(store: T, callback: (...args: TArgs) => R, ...args: TArgs): R;
- /**
- * Runs a function synchronously outside of a context and returns its
- * return value. The store is not accessible within the callback function or
- * the asynchronous operations created within the callback. Any `getStore()` call done within the callback function will always return `undefined`.
- *
- * The optional `args` are passed to the callback function.
- *
- * If the callback function throws an error, the error is thrown by `exit()` too.
- * The stacktrace is not impacted by this call and the context is re-entered.
- *
- * Example:
- *
- * ```js
- * // Within a call to run
- * try {
- * asyncLocalStorage.getStore(); // Returns the store object or value
- * asyncLocalStorage.exit(() => {
- * asyncLocalStorage.getStore(); // Returns undefined
- * throw new Error();
- * });
- * } catch (e) {
- * asyncLocalStorage.getStore(); // Returns the same object or value
- * // The error will be caught here
- * }
- * ```
- * @since v13.10.0, v12.17.0
- * @experimental
- */
- exit(callback: (...args: TArgs) => R, ...args: TArgs): R;
- /**
- * Transitions into the context for the remainder of the current
- * synchronous execution and then persists the store through any following
- * asynchronous calls.
- *
- * Example:
- *
- * ```js
- * const store = { id: 1 };
- * // Replaces previous store with the given store object
- * asyncLocalStorage.enterWith(store);
- * asyncLocalStorage.getStore(); // Returns the store object
- * someAsyncOperation(() => {
- * asyncLocalStorage.getStore(); // Returns the same object
- * });
- * ```
- *
- * This transition will continue for the _entire_ synchronous execution.
- * This means that if, for example, the context is entered within an event
- * handler subsequent event handlers will also run within that context unless
- * specifically bound to another context with an `AsyncResource`. That is why `run()` should be preferred over `enterWith()` unless there are strong reasons
- * to use the latter method.
- *
- * ```js
- * const store = { id: 1 };
- *
- * emitter.on('my-event', () => {
- * asyncLocalStorage.enterWith(store);
- * });
- * emitter.on('my-event', () => {
- * asyncLocalStorage.getStore(); // Returns the same object
- * });
- *
- * asyncLocalStorage.getStore(); // Returns undefined
- * emitter.emit('my-event');
- * asyncLocalStorage.getStore(); // Returns the same object
- * ```
- * @since v13.11.0, v12.17.0
- * @experimental
- */
- enterWith(store: T): void;
- }
- /**
- * @since v17.2.0, v16.14.0
- * @return A map of provider types to the corresponding numeric id.
- * This map contains all the event types that might be emitted by the `async_hooks.init()` event.
- */
- namespace asyncWrapProviders {
- const NONE: number;
- const DIRHANDLE: number;
- const DNSCHANNEL: number;
- const ELDHISTOGRAM: number;
- const FILEHANDLE: number;
- const FILEHANDLECLOSEREQ: number;
- const FIXEDSIZEBLOBCOPY: number;
- const FSEVENTWRAP: number;
- const FSREQCALLBACK: number;
- const FSREQPROMISE: number;
- const GETADDRINFOREQWRAP: number;
- const GETNAMEINFOREQWRAP: number;
- const HEAPSNAPSHOT: number;
- const HTTP2SESSION: number;
- const HTTP2STREAM: number;
- const HTTP2PING: number;
- const HTTP2SETTINGS: number;
- const HTTPINCOMINGMESSAGE: number;
- const HTTPCLIENTREQUEST: number;
- const JSSTREAM: number;
- const JSUDPWRAP: number;
- const MESSAGEPORT: number;
- const PIPECONNECTWRAP: number;
- const PIPESERVERWRAP: number;
- const PIPEWRAP: number;
- const PROCESSWRAP: number;
- const PROMISE: number;
- const QUERYWRAP: number;
- const SHUTDOWNWRAP: number;
- const SIGNALWRAP: number;
- const STATWATCHER: number;
- const STREAMPIPE: number;
- const TCPCONNECTWRAP: number;
- const TCPSERVERWRAP: number;
- const TCPWRAP: number;
- const TTYWRAP: number;
- const UDPSENDWRAP: number;
- const UDPWRAP: number;
- const SIGINTWATCHDOG: number;
- const WORKER: number;
- const WORKERHEAPSNAPSHOT: number;
- const WRITEWRAP: number;
- const ZLIB: number;
- const CHECKPRIMEREQUEST: number;
- const PBKDF2REQUEST: number;
- const KEYPAIRGENREQUEST: number;
- const KEYGENREQUEST: number;
- const KEYEXPORTREQUEST: number;
- const CIPHERREQUEST: number;
- const DERIVEBITSREQUEST: number;
- const HASHREQUEST: number;
- const RANDOMBYTESREQUEST: number;
- const RANDOMPRIMEREQUEST: number;
- const SCRYPTREQUEST: number;
- const SIGNREQUEST: number;
- const TLSWRAP: number;
- const VERIFYREQUEST: number;
- }
-}
-declare module "node:async_hooks" {
- export * from "async_hooks";
-}
diff --git a/frontend/.ignored_node_modules/@types/node/buffer.buffer.d.ts b/frontend/.ignored_node_modules/@types/node/buffer.buffer.d.ts
deleted file mode 100644
index 023bb0f..0000000
--- a/frontend/.ignored_node_modules/@types/node/buffer.buffer.d.ts
+++ /dev/null
@@ -1,471 +0,0 @@
-declare module "buffer" {
- type ImplicitArrayBuffer> = T extends
- { valueOf(): infer V extends ArrayBufferLike } ? V : T;
- global {
- interface BufferConstructor {
- // see buffer.d.ts for implementation shared with all TypeScript versions
-
- /**
- * Allocates a new buffer containing the given {str}.
- *
- * @param str String to store in buffer.
- * @param encoding encoding to use, optional. Default is 'utf8'
- * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead.
- */
- new(str: string, encoding?: BufferEncoding): Buffer;
- /**
- * Allocates a new buffer of {size} octets.
- *
- * @param size count of octets to allocate.
- * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`).
- */
- new(size: number): Buffer;
- /**
- * Allocates a new buffer containing the given {array} of octets.
- *
- * @param array The octets to store.
- * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead.
- */
- new(array: ArrayLike): Buffer;
- /**
- * Produces a Buffer backed by the same allocated memory as
- * the given {ArrayBuffer}/{SharedArrayBuffer}.
- *
- * @param arrayBuffer The ArrayBuffer with which to share memory.
- * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead.
- */
- new(arrayBuffer: TArrayBuffer): Buffer;
- /**
- * Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`.
- * Array entries outside that range will be truncated to fit into it.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.
- * const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
- * ```
- *
- * If `array` is an `Array`-like object (that is, one with a `length` property of
- * type `number`), it is treated as if it is an array, unless it is a `Buffer` or
- * a `Uint8Array`. This means all other `TypedArray` variants get treated as an
- * `Array`. To create a `Buffer` from the bytes backing a `TypedArray`, use
- * `Buffer.copyBytesFrom()`.
- *
- * A `TypeError` will be thrown if `array` is not an `Array` or another type
- * appropriate for `Buffer.from()` variants.
- *
- * `Buffer.from(array)` and `Buffer.from(string)` may also use the internal
- * `Buffer` pool like `Buffer.allocUnsafe()` does.
- * @since v5.10.0
- */
- from(array: WithImplicitCoercion>): Buffer;
- /**
- * This creates a view of the `ArrayBuffer` without copying the underlying
- * memory. For example, when passed a reference to the `.buffer` property of a
- * `TypedArray` instance, the newly created `Buffer` will share the same
- * allocated memory as the `TypedArray`'s underlying `ArrayBuffer`.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * const arr = new Uint16Array(2);
- *
- * arr[0] = 5000;
- * arr[1] = 4000;
- *
- * // Shares memory with `arr`.
- * const buf = Buffer.from(arr.buffer);
- *
- * console.log(buf);
- * // Prints:
- *
- * // Changing the original Uint16Array changes the Buffer also.
- * arr[1] = 6000;
- *
- * console.log(buf);
- * // Prints:
- * ```
- *
- * The optional `byteOffset` and `length` arguments specify a memory range within
- * the `arrayBuffer` that will be shared by the `Buffer`.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * const ab = new ArrayBuffer(10);
- * const buf = Buffer.from(ab, 0, 2);
- *
- * console.log(buf.length);
- * // Prints: 2
- * ```
- *
- * A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer` or a
- * `SharedArrayBuffer` or another type appropriate for `Buffer.from()`
- * variants.
- *
- * It is important to remember that a backing `ArrayBuffer` can cover a range
- * of memory that extends beyond the bounds of a `TypedArray` view. A new
- * `Buffer` created using the `buffer` property of a `TypedArray` may extend
- * beyond the range of the `TypedArray`:
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 elements
- * const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 elements
- * console.log(arrA.buffer === arrB.buffer); // true
- *
- * const buf = Buffer.from(arrB.buffer);
- * console.log(buf);
- * // Prints:
- * ```
- * @since v5.10.0
- * @param arrayBuffer An `ArrayBuffer`, `SharedArrayBuffer`, for example the
- * `.buffer` property of a `TypedArray`.
- * @param byteOffset Index of first byte to expose. **Default:** `0`.
- * @param length Number of bytes to expose. **Default:**
- * `arrayBuffer.byteLength - byteOffset`.
- */
- from>(
- arrayBuffer: TArrayBuffer,
- byteOffset?: number,
- length?: number,
- ): Buffer>;
- /**
- * Creates a new `Buffer` containing `string`. The `encoding` parameter identifies
- * the character encoding to be used when converting `string` into bytes.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * const buf1 = Buffer.from('this is a tést');
- * const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
- *
- * console.log(buf1.toString());
- * // Prints: this is a tést
- * console.log(buf2.toString());
- * // Prints: this is a tést
- * console.log(buf1.toString('latin1'));
- * // Prints: this is a tést
- * ```
- *
- * A `TypeError` will be thrown if `string` is not a string or another type
- * appropriate for `Buffer.from()` variants.
- *
- * `Buffer.from(string)` may also use the internal `Buffer` pool like
- * `Buffer.allocUnsafe()` does.
- * @since v5.10.0
- * @param string A string to encode.
- * @param encoding The encoding of `string`. **Default:** `'utf8'`.
- */
- from(string: WithImplicitCoercion, encoding?: BufferEncoding): Buffer;
- from(arrayOrString: WithImplicitCoercion | string>): Buffer;
- /**
- * Creates a new Buffer using the passed {data}
- * @param values to create a new Buffer
- */
- of(...items: number[]): Buffer;
- /**
- * Returns a new `Buffer` which is the result of concatenating all the `Buffer` instances in the `list` together.
- *
- * If the list has no items, or if the `totalLength` is 0, then a new zero-length `Buffer` is returned.
- *
- * If `totalLength` is not provided, it is calculated from the `Buffer` instances
- * in `list` by adding their lengths.
- *
- * If `totalLength` is provided, it is coerced to an unsigned integer. If the
- * combined length of the `Buffer`s in `list` exceeds `totalLength`, the result is
- * truncated to `totalLength`.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * // Create a single `Buffer` from a list of three `Buffer` instances.
- *
- * const buf1 = Buffer.alloc(10);
- * const buf2 = Buffer.alloc(14);
- * const buf3 = Buffer.alloc(18);
- * const totalLength = buf1.length + buf2.length + buf3.length;
- *
- * console.log(totalLength);
- * // Prints: 42
- *
- * const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);
- *
- * console.log(bufA);
- * // Prints:
- * console.log(bufA.length);
- * // Prints: 42
- * ```
- *
- * `Buffer.concat()` may also use the internal `Buffer` pool like `Buffer.allocUnsafe()` does.
- * @since v0.7.11
- * @param list List of `Buffer` or {@link Uint8Array} instances to concatenate.
- * @param totalLength Total length of the `Buffer` instances in `list` when concatenated.
- */
- concat(list: readonly Uint8Array[], totalLength?: number): Buffer;
- /**
- * Copies the underlying memory of `view` into a new `Buffer`.
- *
- * ```js
- * const u16 = new Uint16Array([0, 0xffff]);
- * const buf = Buffer.copyBytesFrom(u16, 1, 1);
- * u16[1] = 0;
- * console.log(buf.length); // 2
- * console.log(buf[0]); // 255
- * console.log(buf[1]); // 255
- * ```
- * @since v19.8.0
- * @param view The {TypedArray} to copy.
- * @param [offset=0] The starting offset within `view`.
- * @param [length=view.length - offset] The number of elements from `view` to copy.
- */
- copyBytesFrom(view: NodeJS.TypedArray, offset?: number, length?: number): Buffer;
- /**
- * Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the`Buffer` will be zero-filled.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * const buf = Buffer.alloc(5);
- *
- * console.log(buf);
- * // Prints:
- * ```
- *
- * If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown.
- *
- * If `fill` is specified, the allocated `Buffer` will be initialized by calling `buf.fill(fill)`.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * const buf = Buffer.alloc(5, 'a');
- *
- * console.log(buf);
- * // Prints:
- * ```
- *
- * If both `fill` and `encoding` are specified, the allocated `Buffer` will be
- * initialized by calling `buf.fill(fill, encoding)`.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
- *
- * console.log(buf);
- * // Prints:
- * ```
- *
- * Calling `Buffer.alloc()` can be measurably slower than the alternative `Buffer.allocUnsafe()` but ensures that the newly created `Buffer` instance
- * contents will never contain sensitive data from previous allocations, including
- * data that might not have been allocated for `Buffer`s.
- *
- * A `TypeError` will be thrown if `size` is not a number.
- * @since v5.10.0
- * @param size The desired length of the new `Buffer`.
- * @param [fill=0] A value to pre-fill the new `Buffer` with.
- * @param [encoding='utf8'] If `fill` is a string, this is its encoding.
- */
- alloc(size: number, fill?: string | Uint8Array | number, encoding?: BufferEncoding): Buffer;
- /**
- * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown.
- *
- * The underlying memory for `Buffer` instances created in this way is _not_
- * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `Buffer.alloc()` instead to initialize`Buffer` instances with zeroes.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * const buf = Buffer.allocUnsafe(10);
- *
- * console.log(buf);
- * // Prints (contents may vary):
- *
- * buf.fill(0);
- *
- * console.log(buf);
- * // Prints:
- * ```
- *
- * A `TypeError` will be thrown if `size` is not a number.
- *
- * The `Buffer` module pre-allocates an internal `Buffer` instance of
- * size `Buffer.poolSize` that is used as a pool for the fast allocation of new `Buffer` instances created using `Buffer.allocUnsafe()`, `Buffer.from(array)`,
- * and `Buffer.concat()` only when `size` is less than `Buffer.poolSize >>> 1` (floor of `Buffer.poolSize` divided by two).
- *
- * Use of this pre-allocated internal memory pool is a key difference between
- * calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`.
- * Specifically, `Buffer.alloc(size, fill)` will _never_ use the internal `Buffer`pool, while `Buffer.allocUnsafe(size).fill(fill)`_will_ use the internal`Buffer` pool if `size` is less
- * than or equal to half `Buffer.poolSize`. The
- * difference is subtle but can be important when an application requires the
- * additional performance that `Buffer.allocUnsafe()` provides.
- * @since v5.10.0
- * @param size The desired length of the new `Buffer`.
- */
- allocUnsafe(size: number): Buffer;
- /**
- * Allocates a new `Buffer` of `size` bytes. If `size` is larger than {@link constants.MAX_LENGTH} or smaller than 0, `ERR_OUT_OF_RANGE` is thrown. A zero-length `Buffer` is created if
- * `size` is 0.
- *
- * The underlying memory for `Buffer` instances created in this way is _not_
- * _initialized_. The contents of the newly created `Buffer` are unknown and _may contain sensitive data_. Use `buf.fill(0)` to initialize
- * such `Buffer` instances with zeroes.
- *
- * When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances,
- * allocations under 4 KiB are sliced from a single pre-allocated `Buffer`. This
- * allows applications to avoid the garbage collection overhead of creating many
- * individually allocated `Buffer` instances. This approach improves both
- * performance and memory usage by eliminating the need to track and clean up as
- * many individual `ArrayBuffer` objects.
- *
- * However, in the case where a developer may need to retain a small chunk of
- * memory from a pool for an indeterminate amount of time, it may be appropriate
- * to create an un-pooled `Buffer` instance using `Buffer.allocUnsafeSlow()` and
- * then copying out the relevant bits.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * // Need to keep around a few small chunks of memory.
- * const store = [];
- *
- * socket.on('readable', () => {
- * let data;
- * while (null !== (data = readable.read())) {
- * // Allocate for retained data.
- * const sb = Buffer.allocUnsafeSlow(10);
- *
- * // Copy the data into the new allocation.
- * data.copy(sb, 0, 0, 10);
- *
- * store.push(sb);
- * }
- * });
- * ```
- *
- * A `TypeError` will be thrown if `size` is not a number.
- * @since v5.12.0
- * @param size The desired length of the new `Buffer`.
- */
- allocUnsafeSlow(size: number): Buffer;
- }
- interface Buffer extends Uint8Array {
- // see buffer.d.ts for implementation shared with all TypeScript versions
-
- /**
- * Returns a new `Buffer` that references the same memory as the original, but
- * offset and cropped by the `start` and `end` indices.
- *
- * This method is not compatible with the `Uint8Array.prototype.slice()`,
- * which is a superclass of `Buffer`. To copy the slice, use`Uint8Array.prototype.slice()`.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * const buf = Buffer.from('buffer');
- *
- * const copiedBuf = Uint8Array.prototype.slice.call(buf);
- * copiedBuf[0]++;
- * console.log(copiedBuf.toString());
- * // Prints: cuffer
- *
- * console.log(buf.toString());
- * // Prints: buffer
- *
- * // With buf.slice(), the original buffer is modified.
- * const notReallyCopiedBuf = buf.slice();
- * notReallyCopiedBuf[0]++;
- * console.log(notReallyCopiedBuf.toString());
- * // Prints: cuffer
- * console.log(buf.toString());
- * // Also prints: cuffer (!)
- * ```
- * @since v0.3.0
- * @deprecated Use `subarray` instead.
- * @param [start=0] Where the new `Buffer` will start.
- * @param [end=buf.length] Where the new `Buffer` will end (not inclusive).
- */
- slice(start?: number, end?: number): Buffer;
- /**
- * Returns a new `Buffer` that references the same memory as the original, but
- * offset and cropped by the `start` and `end` indices.
- *
- * Specifying `end` greater than `buf.length` will return the same result as
- * that of `end` equal to `buf.length`.
- *
- * This method is inherited from [`TypedArray.prototype.subarray()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray).
- *
- * Modifying the new `Buffer` slice will modify the memory in the original `Buffer`because the allocated memory of the two objects overlap.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * // Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte
- * // from the original `Buffer`.
- *
- * const buf1 = Buffer.allocUnsafe(26);
- *
- * for (let i = 0; i < 26; i++) {
- * // 97 is the decimal ASCII value for 'a'.
- * buf1[i] = i + 97;
- * }
- *
- * const buf2 = buf1.subarray(0, 3);
- *
- * console.log(buf2.toString('ascii', 0, buf2.length));
- * // Prints: abc
- *
- * buf1[0] = 33;
- *
- * console.log(buf2.toString('ascii', 0, buf2.length));
- * // Prints: !bc
- * ```
- *
- * Specifying negative indexes causes the slice to be generated relative to the
- * end of `buf` rather than the beginning.
- *
- * ```js
- * import { Buffer } from 'node:buffer';
- *
- * const buf = Buffer.from('buffer');
- *
- * console.log(buf.subarray(-6, -1).toString());
- * // Prints: buffe
- * // (Equivalent to buf.subarray(0, 5).)
- *
- * console.log(buf.subarray(-6, -2).toString());
- * // Prints: buff
- * // (Equivalent to buf.subarray(0, 4).)
- *
- * console.log(buf.subarray(-5, -2).toString());
- * // Prints: uff
- * // (Equivalent to buf.subarray(1, 4).)
- * ```
- * @since v3.0.0
- * @param [start=0] Where the new `Buffer` will start.
- * @param [end=buf.length] Where the new `Buffer` will end (not inclusive).
- */
- subarray(start?: number, end?: number): Buffer