From d6a591fe06a4babea6ac765916613fcd4e0bf54e Mon Sep 17 00:00:00 2001 From: Ryan-Zayne Date: Mon, 30 Dec 2024 18:50:21 +0100 Subject: [PATCH] =?UTF-8?q?feat(interceptors)!:=20=E2=9C=A8=20add=20array-?= =?UTF-8?q?based=20hook=20preservation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 🔒 feat: prevent base interceptors from being overridden when defined as arrays - ♻️ refactor: change hook execution from Set to Array for better predictability - 🔄 refactor: improve duplicate request error messages - 📦 chore(deps): update Next.js to 15.1.3 and other dependencies - 📝 docs: improve landing page description copy --- dev/src/client.ts | 5 +- docs/app/(home)/page.tsx | 4 +- docs/package.json | 10 +- packages/callapi-legacy/package.json | 2 +- .../callapi-legacy/src/createFetchClient.ts | 26 +- packages/callapi-legacy/src/index.ts | 3 + packages/callapi-legacy/src/plugins.ts | 67 +- packages/callapi-legacy/src/types.ts | 94 +- packages/callapi-legacy/src/utils/common.ts | 41 +- .../callapi-legacy/src/utils/type-guards.ts | 8 +- packages/callapi/package.json | 2 +- packages/callapi/src/createFetchClient.ts | 26 +- packages/callapi/src/index.ts | 3 + .../options/createFetchClientWithOptions.ts | 22 +- packages/callapi/src/plugins.ts | 67 +- packages/callapi/src/types.ts | 94 +- packages/callapi/src/utils/common.ts | 41 +- packages/callapi/src/utils/type-guards.ts | 8 +- pnpm-lock.yaml | 1075 ++++++++--------- pnpm-workspace.yaml | 2 +- 20 files changed, 870 insertions(+), 730 deletions(-) diff --git a/dev/src/client.ts b/dev/src/client.ts index fda638b..8ff05b5 100644 --- a/dev/src/client.ts +++ b/dev/src/client.ts @@ -1,5 +1,4 @@ import { createFetchClient, defineCallApiPlugin } from "@zayne-labs/callapi"; -// import { createFetchClient, defineCallApiPlugin } from "./src"; const plugin = defineCallApiPlugin({ hooks: { @@ -10,7 +9,8 @@ const plugin = defineCallApiPlugin({ }); const callApi = createFetchClient({ - dedupeStrategy: "none", + dedupeStrategy: "cancel", + onRequest: [() => console.info("OnBaseRequest")], plugins: [plugin], }); @@ -46,6 +46,7 @@ const [foo1, foo2, foo3, foo4] = await Promise.all([ }), callApi("https://dummyjson.com/products/:id", { method: "GET", + onRequest: () => console.info("OnRequest"), params: [1], }), ]); diff --git a/docs/app/(home)/page.tsx b/docs/app/(home)/page.tsx index fc7e3ee..4f4ac3d 100644 --- a/docs/app/(home)/page.tsx +++ b/docs/app/(home)/page.tsx @@ -16,8 +16,8 @@ export default function HomePage() {

CallApi

- A minimal Fetch API wrapper with dozens of convenience features Built for developers who - want a lightweight (like fetch()) but capable HTTP client. + A minimal Fetch API wrapper with dozens of convenience features. Built for developers who + want a lightweight but convenient interface for making HTTP requests.

diff --git a/docs/package.json b/docs/package.json index 263e130..a486a6e 100644 --- a/docs/package.json +++ b/docs/package.json @@ -13,15 +13,15 @@ "@iconify-json/lucide": "^1.2.20", "@iconify/react": "^5.1.0", "@iconify/utils": "^2.2.1", - "@zayne-labs/toolkit": "^0.8.10", + "@zayne-labs/toolkit": "^0.8.20", "clsx": "^2.1.1", - "fumadocs-core": "14.6.2", + "fumadocs-core": "14.6.8", "fumadocs-docgen": "^1.3.3", - "fumadocs-mdx": "11.1.2", - "fumadocs-ui": "14.6.2", + "fumadocs-mdx": "11.2.1", + "fumadocs-ui": "14.6.8", "geist": "^1.3.1", "motion": "^11.15.0", - "next": "15.1.2", + "next": "15.1.3", "react": "19.0.0", "react-dom": "19.0.0", "tailwind-merge": "^2.5.5", diff --git a/packages/callapi-legacy/package.json b/packages/callapi-legacy/package.json index a8e2631..5086eb9 100644 --- a/packages/callapi-legacy/package.json +++ b/packages/callapi-legacy/package.json @@ -1,7 +1,7 @@ { "name": "@zayne-labs/callapi-legacy", "type": "module", - "version": "1.0.0-rc.46", + "version": "1.0.0-rc.68", "description": "A lightweight wrapper over fetch with quality of life improvements like built-in request cancellation, retries, interceptors and more", "author": "Ryan Zayne", "license": "MIT", diff --git a/packages/callapi-legacy/src/createFetchClient.ts b/packages/callapi-legacy/src/createFetchClient.ts index bbba7b9..64c9d50 100644 --- a/packages/callapi-legacy/src/createFetchClient.ts +++ b/packages/callapi-legacy/src/createFetchClient.ts @@ -13,7 +13,8 @@ import type { import { mergeUrlWithParamsAndQuery } from "./url"; import { HTTPError, - executeInterceptors, + executeHooks, + flattenHooks, generateRequestKey, getFetchImpl, getResponseData, @@ -57,11 +58,11 @@ export const createFetchClient = < >( ...parameters: CallApiParameters ): Promise> => { - const [initURL, config = {}] = parameters; + const [initURL, config] = parameters; type CallApiResult = never; - const [fetchConfig, extraOptions] = splitConfig(config); + const [fetchConfig, extraOptions] = splitConfig(config ?? {}); const { body = baseBody, headers, signal = baseSignal, ...restOfFetchConfig } = fetchConfig; @@ -82,6 +83,13 @@ export const createFetchClient = < ...baseExtraOptions, ...extraOptions, + + onError: flattenHooks(baseExtraOptions.onError, extraOptions.onError), + onRequest: flattenHooks(baseExtraOptions.onRequest, extraOptions.onRequest), + onRequestError: flattenHooks(baseExtraOptions.onRequestError, extraOptions.onRequestError), + onResponse: flattenHooks(baseExtraOptions.onResponse, extraOptions.onResponse), + onResponseError: flattenHooks(baseExtraOptions.onResponseError, extraOptions.onResponseError), + onSuccess: flattenHooks(baseExtraOptions.onSuccess, extraOptions.onSuccess), } satisfies CombinedCallApiExtraOptions; const { interceptors, resolvedOptions, resolvedRequestOptions, url } = await initializePlugins({ @@ -125,8 +133,8 @@ export const createFetchClient = < if (prevRequestInfo && options.dedupeStrategy === "cancel") { const message = options.requestKey - ? `Request aborted as another request with the same request key: '${requestKey}' was initiated while the current request was in progress.` - : `Request aborted as another request to the endpoint: '${fullURL}', with the same request options was initiated while the current request was in progress.`; + ? `Duplicate request detected - Aborting previous request with key '${requestKey}' as a new request was initiated` + : `Duplicate request detected - Aborting previous request to '${fullURL}' as a new request with identical options was initiated`; const reason = new DOMException(message, "AbortError"); @@ -148,7 +156,7 @@ export const createFetchClient = < const fetch = getFetchImpl(options.customFetchImpl); try { - await executeInterceptors(options.onRequest({ options, request })); + await executeHooks(options.onRequest({ options, request })); // == Apply determined headers request.headers = mergeAndResolveHeaders({ @@ -211,7 +219,7 @@ export const createFetchClient = < options.responseValidator ); - await executeInterceptors( + await executeHooks( options.onSuccess({ data: successData, options, @@ -264,7 +272,7 @@ export const createFetchClient = < const possibleHttpError = (generalErrorResult as { error: PossibleHTTPError }) .error; - await executeInterceptors( + await executeHooks( options.onResponseError({ error: possibleHttpError, options, @@ -315,7 +323,7 @@ export const createFetchClient = < const possibleJavascriptError = (generalErrorResult as { error: PossibleJavaScriptError }).error; - await executeInterceptors( + await executeHooks( // == At this point only the request errors exist, so the request error interceptor is called options.onRequestError({ error: possibleJavascriptError, diff --git a/packages/callapi-legacy/src/index.ts b/packages/callapi-legacy/src/index.ts index 4c291b8..2e0f4fa 100644 --- a/packages/callapi-legacy/src/index.ts +++ b/packages/callapi-legacy/src/index.ts @@ -4,6 +4,8 @@ export { defineCallApiPlugin } from "./plugins"; export type { CallApiPlugin, PluginInitContext } from "./plugins"; export type { + BaseCallApiConfig, + BaseCallApiExtraOptions, CallApiConfig, CallApiExtraOptions, CallApiParameters, @@ -12,6 +14,7 @@ export type { CallApiResultErrorVariant, CallApiResultModeUnion, CallApiResultSuccessVariant, + CombinedCallApiExtraOptions, ErrorContext, Register, RequestContext, diff --git a/packages/callapi-legacy/src/plugins.ts b/packages/callapi-legacy/src/plugins.ts index ec7a770..8c5c8df 100644 --- a/packages/callapi-legacy/src/plugins.ts +++ b/packages/callapi-legacy/src/plugins.ts @@ -1,4 +1,9 @@ -import type { CallApiRequestOptionsForHooks, CombinedCallApiExtraOptions, Interceptors } from "./types"; +import type { + CallApiRequestOptionsForHooks, + CombinedCallApiExtraOptions, + Interceptors, + InterceptorsArray, +} from "./types"; import { isFunction, isPlainObject, isString } from "./utils/type-guards"; import type { AnyFunction, Awaitable } from "./utils/type-helpers"; @@ -58,7 +63,7 @@ export const defineCallApiPlugin = < }; const createMergedInterceptor = ( - interceptors: Set> | undefined>, + interceptors: Array> | undefined>, mergedInterceptorsExecutionMode: CombinedCallApiExtraOptions["mergedInterceptorsExecutionMode"] ) => { return async (ctx: Record) => { @@ -80,7 +85,9 @@ const createMergedInterceptor = ( }; type PluginHooks = { - [Key in keyof Interceptors]: Set[Key]>; + [Key in keyof Interceptors]: Array< + Interceptors[Key] | InterceptorsArray[Key] + >; }; export const initializePlugins = async ( @@ -89,30 +96,30 @@ export const initializePlugins = async ( const { initURL, options, request } = context; const hookRegistry = { - onError: new Set([]), - onRequest: new Set([]), - onRequestError: new Set([]), - onResponse: new Set([]), - onResponseError: new Set([]), - onSuccess: new Set([]), + onError: [], + onRequest: [], + onRequestError: [], + onResponse: [], + onResponseError: [], + onSuccess: [], } satisfies PluginHooks as Required>; const addMainInterceptors = () => { - hookRegistry.onRequest.add(options.onRequest); - hookRegistry.onRequestError.add(options.onRequestError); - hookRegistry.onResponse.add(options.onResponse); - hookRegistry.onResponseError.add(options.onResponseError); - hookRegistry.onSuccess.add(options.onSuccess); - hookRegistry.onError.add(options.onError); + hookRegistry.onRequest.push(options.onRequest); + hookRegistry.onRequestError.push(options.onRequestError); + hookRegistry.onResponse.push(options.onResponse); + hookRegistry.onResponseError.push(options.onResponseError); + hookRegistry.onSuccess.push(options.onSuccess); + hookRegistry.onError.push(options.onError); }; const addPluginInterceptors = (pluginHooks: Interceptors) => { - hookRegistry.onRequest.add(pluginHooks.onRequest); - hookRegistry.onRequestError.add(pluginHooks.onRequestError); - hookRegistry.onResponse.add(pluginHooks.onResponse); - hookRegistry.onResponseError.add(pluginHooks.onResponseError); - hookRegistry.onSuccess.add(pluginHooks.onSuccess); - hookRegistry.onError.add(pluginHooks.onError); + hookRegistry.onRequest.push(pluginHooks.onRequest); + hookRegistry.onRequestError.push(pluginHooks.onRequestError); + hookRegistry.onResponse.push(pluginHooks.onResponse); + hookRegistry.onResponseError.push(pluginHooks.onResponseError); + hookRegistry.onSuccess.push(pluginHooks.onSuccess); + hookRegistry.onError.push(pluginHooks.onError); }; if (options.mergedInterceptorsExecutionOrder === "mainInterceptorFirst") { @@ -120,8 +127,8 @@ export const initializePlugins = async ( } const resolvedPlugins = isFunction(options.plugins) - ? [...options.plugins({ initURL, options, request }), ...(options.extend?.plugins ?? [])] - : [...(options.plugins ?? []), ...(options.extend?.plugins ?? [])]; + ? [options.plugins({ initURL, options, request }), options.extend?.plugins ?? []].flat() + : [options.plugins ?? [], options.extend?.plugins ?? []].flat(); let resolvedUrl = initURL; let resolvedOptions = options; @@ -163,7 +170,7 @@ export const initializePlugins = async ( addMainInterceptors(); } - const handleInterceptorsMerge = (interceptors: Set> | undefined>) => { + const handleInterceptorsMerge = (interceptors: Array> | undefined>) => { const mergedInterceptor = createMergedInterceptor( interceptors, options.mergedInterceptorsExecutionMode @@ -173,12 +180,12 @@ export const initializePlugins = async ( }; const interceptors = { - onError: handleInterceptorsMerge(hookRegistry.onError), - onRequest: handleInterceptorsMerge(hookRegistry.onRequest), - onRequestError: handleInterceptorsMerge(hookRegistry.onRequestError), - onResponse: handleInterceptorsMerge(hookRegistry.onResponse), - onResponseError: handleInterceptorsMerge(hookRegistry.onResponseError), - onSuccess: handleInterceptorsMerge(hookRegistry.onSuccess), + onError: handleInterceptorsMerge(hookRegistry.onError.flat()), + onRequest: handleInterceptorsMerge(hookRegistry.onRequest.flat()), + onRequestError: handleInterceptorsMerge(hookRegistry.onRequestError.flat()), + onResponse: handleInterceptorsMerge(hookRegistry.onResponse.flat()), + onResponseError: handleInterceptorsMerge(hookRegistry.onResponseError.flat()), + onSuccess: handleInterceptorsMerge(hookRegistry.onSuccess.flat()), } satisfies Interceptors; return { diff --git a/packages/callapi-legacy/src/types.ts b/packages/callapi-legacy/src/types.ts index 00df4d0..b86debe 100644 --- a/packages/callapi-legacy/src/types.ts +++ b/packages/callapi-legacy/src/types.ts @@ -88,6 +88,39 @@ export interface Interceptors { onSuccess?: (context: SuccessContext) => Awaitable; } +export interface InterceptorsArray { + /** + * @description Interceptor to be called when any error occurs within the request/response lifecyle, regardless of whether the error is from the api or not. + * It is basically a combination of `onRequestError` and `onResponseError` interceptors + */ + onError?: Array["onError"]>; + + /** + * @description Interceptor to be called just before the request is made, allowing for modifications or additional operations. + */ + onRequest?: Array["onRequest"]>; + + /** + * @description Interceptor to be called when an error occurs during the fetch request. + */ + onRequestError?: Array["onRequestError"]>; + + /** + * @description Interceptor to be called when any response is received from the api, whether successful or not + */ + onResponse?: Array["onResponse"]>; + + /** + * @description Interceptor to be called when an error response is received from the api. + */ + onResponseError?: Array["onResponseError"]>; + + /** + * @description Interceptor to be called when a successful response is received from the api. + */ + onSuccess?: Array["onSuccess"]>; +} + type FetchImpl = UnmaskType<(input: string | Request | URL, init?: RequestInit) => Promise>; type CallApiPluginArray = Array>; @@ -96,11 +129,12 @@ type CallApiPluginFn = ( context: PluginInitContext ) => Array>; -export interface ExtraOptions< +export type ExtraOptions< TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, -> extends Interceptors { + // eslint-disable-next-line perfectionist/sort-intersection-types -- I want the first one to be first +> = (Interceptors | InterceptorsArray) & { /** * @description Authorization header value. */ @@ -291,43 +325,49 @@ export interface ExtraOptions< * @description URL to be used in the request. */ readonly url?: string; +}; + +export const optionsEnumToOmitFromBase = defineEnum(["extend", "override", "requestKey"]); + +// prettier-ignore +export interface BaseCallApiExtraOptions< + TBaseData = unknown, + TBaseErrorData = unknown, + TBaseResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, +> extends Omit, typeof optionsEnumToOmitFromBase[number]> { + /** + * @description An array of CallApi plugins. It allows you to extend the behavior of the library. + */ + plugins?: CallApiPluginArray | CallApiPluginFn; } -export const optionsToOmitFromInstance = defineEnum(["plugins"]); +export const optionsEnumToOmitFromInstance = defineEnum(["plugins"]); export interface CallApiExtraOptions< TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, -> extends Omit, (typeof optionsToOmitFromInstance)[number]> { +> extends Omit< + ExtraOptions, + (typeof optionsEnumToOmitFromInstance)[number] + > { /** * @description Options that should extend the base options. */ - extend?: Pick, (typeof optionsToOmitFromInstance)[number]>; + extend?: Pick< + ExtraOptions, + (typeof optionsEnumToOmitFromInstance)[number] + >; /** * @description Options that should override the base options. */ override?: Pick< ExtraOptions, - (typeof optionsToOmitFromInstance)[number] + (typeof optionsEnumToOmitFromInstance)[number] >; } -export const optionsToOmitFromBase = defineEnum(["extend", "override", "requestKey"]); - -// prettier-ignore -export interface BaseCallApiExtraOptions< - TBaseData = unknown, - TBaseErrorData = unknown, - TBaseResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, -> extends Omit, typeof optionsToOmitFromBase[number]> { - /** - * @description An array of CallApi plugins. It allows you to extend the behavior of the library. - */ - plugins?: CallApiPluginArray | CallApiPluginFn; -} - // prettier-ignore export interface CombinedCallApiExtraOptions< TData = unknown, @@ -335,13 +375,6 @@ export interface CombinedCallApiExtraOptions< TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, > extends BaseCallApiExtraOptions, CallApiExtraOptions { } -// prettier-ignore -export interface CallApiConfig< - TData = unknown, - TErrorData = unknown, - TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, -> extends CallApiRequestOptions, CallApiExtraOptions { } - // prettier-ignore export interface BaseCallApiConfig< TBaseData = unknown, @@ -349,6 +382,13 @@ export interface BaseCallApiConfig< TBaseResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, > extends CallApiRequestOptions, BaseCallApiExtraOptions { } +// prettier-ignore +export interface CallApiConfig< + TData = unknown, + TErrorData = unknown, + TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, +> extends CallApiRequestOptions, CallApiExtraOptions { } + export type CallApiParameters< TData = unknown, TErrorData = unknown, diff --git a/packages/callapi-legacy/src/utils/common.ts b/packages/callapi-legacy/src/utils/common.ts index 5cf6a77..1438f79 100644 --- a/packages/callapi-legacy/src/utils/common.ts +++ b/packages/callapi-legacy/src/utils/common.ts @@ -7,12 +7,12 @@ import { type ErrorObjectUnion, type PossibleHTTPError, type PossibleJavascriptErrorNames, - optionsToOmitFromBase, - optionsToOmitFromInstance, + optionsEnumToOmitFromBase, + optionsEnumToOmitFromInstance, } from "../types"; import { fetchSpecificKeys } from "./constants"; -import { isFunction, isPlainObject, isQueryString, isString } from "./type-guards"; -import type { Awaitable } from "./type-helpers"; +import { isArray, isFunction, isPlainObject, isQueryString, isString } from "./type-guards"; +import type { AnyFunction, Awaitable } from "./type-helpers"; const omitKeys = , const TOmitArray extends Array>( initialObject: TObject, @@ -54,15 +54,15 @@ export const splitBaseConfig = (baseConfig: Record) => pickKeys(baseConfig, fetchSpecificKeys) as CallApiRequestOptions, omitKeys(baseConfig, [ ...fetchSpecificKeys, - ...optionsToOmitFromBase, - ]) satisfies BaseCallApiExtraOptions, + ...optionsEnumToOmitFromBase, + ]) as BaseCallApiExtraOptions, ] as const; // eslint-disable-next-line ts-eslint/no-explicit-any -- Any is required here so that one can pass custom function type without type errors export const splitConfig = (config: Record) => [ pickKeys(config, fetchSpecificKeys) as CallApiRequestOptions, - omitKeys(config, [...fetchSpecificKeys, ...optionsToOmitFromInstance]) as CallApiExtraOptions, + omitKeys(config, [...fetchSpecificKeys, ...optionsEnumToOmitFromInstance]) as CallApiExtraOptions, ] as const; export const objectifyHeaders = (headers: RequestInit["headers"]): Record | undefined => { @@ -99,6 +99,8 @@ export const toQueryString: ToQueryStringFn = (params) => { return new URLSearchParams(params as Record).toString(); }; +// export mergeAndResolve + export const mergeAndResolveHeaders = (options: { auth: CallApiConfig["auth"]; baseHeaders: CallApiConfig["headers"]; @@ -142,6 +144,24 @@ export const mergeAndResolveHeaders = (options: { return headersObject; }; +export const flattenHooks = < + TBaseInterceptor extends + | AnyFunction> + | Array> | undefined>, + TInterceptor extends + | AnyFunction> + | Array> | undefined>, +>( + baseInterceptor: TBaseInterceptor | undefined, + interceptor: TInterceptor | undefined +) => { + if (isArray(baseInterceptor)) { + return [baseInterceptor, interceptor].flat() as TInterceptor; + } + + return interceptor ?? baseInterceptor; +}; + export const getFetchImpl = (customFetchImpl: CallApiExtraOptions["customFetchImpl"]) => { if (customFetchImpl) { return customFetchImpl; @@ -173,9 +193,8 @@ export const getResponseType = ( text: () => response.text() as Promise, }); -export const executeInterceptors = >( - ...interceptors: TInterceptor[] -) => Promise.all(interceptors); +export const executeHooks = >(...interceptors: TInterceptor[]) => + Promise.all(interceptors); export const getResponseData = async ( response: Response, @@ -323,7 +342,7 @@ export const isHTTPErrorInstance = ( ): error is HTTPError => { return ( // prettier-ignore - error instanceof HTTPError || (isPlainObject(error, HTTPError) && error.name === "HTTPError" && error.isHTTPError === true) + error instanceof HTTPError|| (isPlainObject(error) && error.name === "HTTPError" && error.isHTTPError === true) ); }; diff --git a/packages/callapi-legacy/src/utils/type-guards.ts b/packages/callapi-legacy/src/utils/type-guards.ts index eb567fb..eceed04 100644 --- a/packages/callapi-legacy/src/utils/type-guards.ts +++ b/packages/callapi-legacy/src/utils/type-guards.ts @@ -5,18 +5,12 @@ export const isArray = (value: unknown): value is TArrayItem[] => Ar export const isObject = (value: unknown) => typeof value === "object" && value !== null; export const isPlainObject = >( - value: unknown, - // eslint-disable-next-line ts-eslint/no-unsafe-function-type -- This is the only generic way to type a class - Class?: Function + value: unknown ): value is TPlainObject => { if (!isObject(value)) { return false; } - if (Class && value instanceof Class) { - return true; - } - const prototype = Object.getPrototypeOf(value) as unknown; // Check if it's a plain object diff --git a/packages/callapi/package.json b/packages/callapi/package.json index e2cbe5b..5a28b3a 100644 --- a/packages/callapi/package.json +++ b/packages/callapi/package.json @@ -1,7 +1,7 @@ { "name": "@zayne-labs/callapi", "type": "module", - "version": "1.0.0-rc.66", + "version": "1.0.0-rc.68", "description": "A lightweight wrapper over fetch with quality of life improvements like built-in request cancellation, retries, interceptors and more", "author": "Ryan Zayne", "license": "MIT", diff --git a/packages/callapi/src/createFetchClient.ts b/packages/callapi/src/createFetchClient.ts index bbba7b9..64c9d50 100644 --- a/packages/callapi/src/createFetchClient.ts +++ b/packages/callapi/src/createFetchClient.ts @@ -13,7 +13,8 @@ import type { import { mergeUrlWithParamsAndQuery } from "./url"; import { HTTPError, - executeInterceptors, + executeHooks, + flattenHooks, generateRequestKey, getFetchImpl, getResponseData, @@ -57,11 +58,11 @@ export const createFetchClient = < >( ...parameters: CallApiParameters ): Promise> => { - const [initURL, config = {}] = parameters; + const [initURL, config] = parameters; type CallApiResult = never; - const [fetchConfig, extraOptions] = splitConfig(config); + const [fetchConfig, extraOptions] = splitConfig(config ?? {}); const { body = baseBody, headers, signal = baseSignal, ...restOfFetchConfig } = fetchConfig; @@ -82,6 +83,13 @@ export const createFetchClient = < ...baseExtraOptions, ...extraOptions, + + onError: flattenHooks(baseExtraOptions.onError, extraOptions.onError), + onRequest: flattenHooks(baseExtraOptions.onRequest, extraOptions.onRequest), + onRequestError: flattenHooks(baseExtraOptions.onRequestError, extraOptions.onRequestError), + onResponse: flattenHooks(baseExtraOptions.onResponse, extraOptions.onResponse), + onResponseError: flattenHooks(baseExtraOptions.onResponseError, extraOptions.onResponseError), + onSuccess: flattenHooks(baseExtraOptions.onSuccess, extraOptions.onSuccess), } satisfies CombinedCallApiExtraOptions; const { interceptors, resolvedOptions, resolvedRequestOptions, url } = await initializePlugins({ @@ -125,8 +133,8 @@ export const createFetchClient = < if (prevRequestInfo && options.dedupeStrategy === "cancel") { const message = options.requestKey - ? `Request aborted as another request with the same request key: '${requestKey}' was initiated while the current request was in progress.` - : `Request aborted as another request to the endpoint: '${fullURL}', with the same request options was initiated while the current request was in progress.`; + ? `Duplicate request detected - Aborting previous request with key '${requestKey}' as a new request was initiated` + : `Duplicate request detected - Aborting previous request to '${fullURL}' as a new request with identical options was initiated`; const reason = new DOMException(message, "AbortError"); @@ -148,7 +156,7 @@ export const createFetchClient = < const fetch = getFetchImpl(options.customFetchImpl); try { - await executeInterceptors(options.onRequest({ options, request })); + await executeHooks(options.onRequest({ options, request })); // == Apply determined headers request.headers = mergeAndResolveHeaders({ @@ -211,7 +219,7 @@ export const createFetchClient = < options.responseValidator ); - await executeInterceptors( + await executeHooks( options.onSuccess({ data: successData, options, @@ -264,7 +272,7 @@ export const createFetchClient = < const possibleHttpError = (generalErrorResult as { error: PossibleHTTPError }) .error; - await executeInterceptors( + await executeHooks( options.onResponseError({ error: possibleHttpError, options, @@ -315,7 +323,7 @@ export const createFetchClient = < const possibleJavascriptError = (generalErrorResult as { error: PossibleJavaScriptError }).error; - await executeInterceptors( + await executeHooks( // == At this point only the request errors exist, so the request error interceptor is called options.onRequestError({ error: possibleJavascriptError, diff --git a/packages/callapi/src/index.ts b/packages/callapi/src/index.ts index ce15fff..fa014c5 100644 --- a/packages/callapi/src/index.ts +++ b/packages/callapi/src/index.ts @@ -4,6 +4,8 @@ export { defineCallApiPlugin } from "./plugins"; export type { CallApiPlugin, PluginInitContext } from "./plugins"; export type { + BaseCallApiConfig, + BaseCallApiExtraOptions, CallApiConfig, CallApiExtraOptions, CallApiParameters, @@ -12,6 +14,7 @@ export type { CallApiResultErrorVariant, CallApiResultModeUnion, CallApiResultSuccessVariant, + CombinedCallApiExtraOptions, ErrorContext, Register, RequestContext, diff --git a/packages/callapi/src/options/createFetchClientWithOptions.ts b/packages/callapi/src/options/createFetchClientWithOptions.ts index e2c1c70..bbf49d3 100644 --- a/packages/callapi/src/options/createFetchClientWithOptions.ts +++ b/packages/callapi/src/options/createFetchClientWithOptions.ts @@ -13,7 +13,8 @@ import type { import { mergeUrlWithParamsAndQuery } from "@/url"; import { HTTPError, - executeInterceptors, + executeHooks, + flattenHooks, generateRequestKey, getFetchImpl, getResponseData, @@ -83,6 +84,13 @@ export const createFetchClientWithOptions = < ...baseExtraOptions, ...extraOptions, + + onError: flattenHooks(baseExtraOptions.onError, extraOptions.onError), + onRequest: flattenHooks(baseExtraOptions.onRequest, extraOptions.onRequest), + onRequestError: flattenHooks(baseExtraOptions.onRequestError, extraOptions.onRequestError), + onResponse: flattenHooks(baseExtraOptions.onResponse, extraOptions.onResponse), + onResponseError: flattenHooks(baseExtraOptions.onResponseError, extraOptions.onResponseError), + onSuccess: flattenHooks(baseExtraOptions.onSuccess, extraOptions.onSuccess), } satisfies CombinedCallApiExtraOptions; const { interceptors, resolvedOptions, resolvedRequestOptions, url } = await initializePlugins({ @@ -126,8 +134,8 @@ export const createFetchClientWithOptions = < if (prevRequestInfo && options.dedupeStrategy === "cancel") { const message = options.requestKey - ? `Request aborted as another request with the same request key: '${requestKey}' was initiated while the current request was in progress.` - : `Request aborted as another request to the endpoint: '${fullURL}', with the same request options was initiated while the current request was in progress.`; + ? `Duplicate request detected - Aborting previous request with key '${requestKey}' as a new request was initiated` + : `Duplicate request detected - Aborting previous request to '${fullURL}' as a new request with identical options was initiated`; const reason = new DOMException(message, "AbortError"); @@ -149,7 +157,7 @@ export const createFetchClientWithOptions = < const fetch = getFetchImpl(options.customFetchImpl); try { - await executeInterceptors(options.onRequest({ options, request })); + await executeHooks(options.onRequest({ options, request })); // == Apply determined headers request.headers = mergeAndResolveHeaders({ @@ -212,7 +220,7 @@ export const createFetchClientWithOptions = < options.responseValidator ); - await executeInterceptors( + await executeHooks( options.onSuccess({ data: successData, options, @@ -265,7 +273,7 @@ export const createFetchClientWithOptions = < const possibleHttpError = (generalErrorResult as { error: PossibleHTTPError }) .error; - await executeInterceptors( + await executeHooks( options.onResponseError({ error: possibleHttpError, options, @@ -316,7 +324,7 @@ export const createFetchClientWithOptions = < const possibleJavascriptError = (generalErrorResult as { error: PossibleJavaScriptError }).error; - await executeInterceptors( + await executeHooks( // == At this point only the request errors exist, so the request error interceptor is called options.onRequestError({ error: possibleJavascriptError, diff --git a/packages/callapi/src/plugins.ts b/packages/callapi/src/plugins.ts index ec7a770..8c5c8df 100644 --- a/packages/callapi/src/plugins.ts +++ b/packages/callapi/src/plugins.ts @@ -1,4 +1,9 @@ -import type { CallApiRequestOptionsForHooks, CombinedCallApiExtraOptions, Interceptors } from "./types"; +import type { + CallApiRequestOptionsForHooks, + CombinedCallApiExtraOptions, + Interceptors, + InterceptorsArray, +} from "./types"; import { isFunction, isPlainObject, isString } from "./utils/type-guards"; import type { AnyFunction, Awaitable } from "./utils/type-helpers"; @@ -58,7 +63,7 @@ export const defineCallApiPlugin = < }; const createMergedInterceptor = ( - interceptors: Set> | undefined>, + interceptors: Array> | undefined>, mergedInterceptorsExecutionMode: CombinedCallApiExtraOptions["mergedInterceptorsExecutionMode"] ) => { return async (ctx: Record) => { @@ -80,7 +85,9 @@ const createMergedInterceptor = ( }; type PluginHooks = { - [Key in keyof Interceptors]: Set[Key]>; + [Key in keyof Interceptors]: Array< + Interceptors[Key] | InterceptorsArray[Key] + >; }; export const initializePlugins = async ( @@ -89,30 +96,30 @@ export const initializePlugins = async ( const { initURL, options, request } = context; const hookRegistry = { - onError: new Set([]), - onRequest: new Set([]), - onRequestError: new Set([]), - onResponse: new Set([]), - onResponseError: new Set([]), - onSuccess: new Set([]), + onError: [], + onRequest: [], + onRequestError: [], + onResponse: [], + onResponseError: [], + onSuccess: [], } satisfies PluginHooks as Required>; const addMainInterceptors = () => { - hookRegistry.onRequest.add(options.onRequest); - hookRegistry.onRequestError.add(options.onRequestError); - hookRegistry.onResponse.add(options.onResponse); - hookRegistry.onResponseError.add(options.onResponseError); - hookRegistry.onSuccess.add(options.onSuccess); - hookRegistry.onError.add(options.onError); + hookRegistry.onRequest.push(options.onRequest); + hookRegistry.onRequestError.push(options.onRequestError); + hookRegistry.onResponse.push(options.onResponse); + hookRegistry.onResponseError.push(options.onResponseError); + hookRegistry.onSuccess.push(options.onSuccess); + hookRegistry.onError.push(options.onError); }; const addPluginInterceptors = (pluginHooks: Interceptors) => { - hookRegistry.onRequest.add(pluginHooks.onRequest); - hookRegistry.onRequestError.add(pluginHooks.onRequestError); - hookRegistry.onResponse.add(pluginHooks.onResponse); - hookRegistry.onResponseError.add(pluginHooks.onResponseError); - hookRegistry.onSuccess.add(pluginHooks.onSuccess); - hookRegistry.onError.add(pluginHooks.onError); + hookRegistry.onRequest.push(pluginHooks.onRequest); + hookRegistry.onRequestError.push(pluginHooks.onRequestError); + hookRegistry.onResponse.push(pluginHooks.onResponse); + hookRegistry.onResponseError.push(pluginHooks.onResponseError); + hookRegistry.onSuccess.push(pluginHooks.onSuccess); + hookRegistry.onError.push(pluginHooks.onError); }; if (options.mergedInterceptorsExecutionOrder === "mainInterceptorFirst") { @@ -120,8 +127,8 @@ export const initializePlugins = async ( } const resolvedPlugins = isFunction(options.plugins) - ? [...options.plugins({ initURL, options, request }), ...(options.extend?.plugins ?? [])] - : [...(options.plugins ?? []), ...(options.extend?.plugins ?? [])]; + ? [options.plugins({ initURL, options, request }), options.extend?.plugins ?? []].flat() + : [options.plugins ?? [], options.extend?.plugins ?? []].flat(); let resolvedUrl = initURL; let resolvedOptions = options; @@ -163,7 +170,7 @@ export const initializePlugins = async ( addMainInterceptors(); } - const handleInterceptorsMerge = (interceptors: Set> | undefined>) => { + const handleInterceptorsMerge = (interceptors: Array> | undefined>) => { const mergedInterceptor = createMergedInterceptor( interceptors, options.mergedInterceptorsExecutionMode @@ -173,12 +180,12 @@ export const initializePlugins = async ( }; const interceptors = { - onError: handleInterceptorsMerge(hookRegistry.onError), - onRequest: handleInterceptorsMerge(hookRegistry.onRequest), - onRequestError: handleInterceptorsMerge(hookRegistry.onRequestError), - onResponse: handleInterceptorsMerge(hookRegistry.onResponse), - onResponseError: handleInterceptorsMerge(hookRegistry.onResponseError), - onSuccess: handleInterceptorsMerge(hookRegistry.onSuccess), + onError: handleInterceptorsMerge(hookRegistry.onError.flat()), + onRequest: handleInterceptorsMerge(hookRegistry.onRequest.flat()), + onRequestError: handleInterceptorsMerge(hookRegistry.onRequestError.flat()), + onResponse: handleInterceptorsMerge(hookRegistry.onResponse.flat()), + onResponseError: handleInterceptorsMerge(hookRegistry.onResponseError.flat()), + onSuccess: handleInterceptorsMerge(hookRegistry.onSuccess.flat()), } satisfies Interceptors; return { diff --git a/packages/callapi/src/types.ts b/packages/callapi/src/types.ts index 00df4d0..b86debe 100644 --- a/packages/callapi/src/types.ts +++ b/packages/callapi/src/types.ts @@ -88,6 +88,39 @@ export interface Interceptors { onSuccess?: (context: SuccessContext) => Awaitable; } +export interface InterceptorsArray { + /** + * @description Interceptor to be called when any error occurs within the request/response lifecyle, regardless of whether the error is from the api or not. + * It is basically a combination of `onRequestError` and `onResponseError` interceptors + */ + onError?: Array["onError"]>; + + /** + * @description Interceptor to be called just before the request is made, allowing for modifications or additional operations. + */ + onRequest?: Array["onRequest"]>; + + /** + * @description Interceptor to be called when an error occurs during the fetch request. + */ + onRequestError?: Array["onRequestError"]>; + + /** + * @description Interceptor to be called when any response is received from the api, whether successful or not + */ + onResponse?: Array["onResponse"]>; + + /** + * @description Interceptor to be called when an error response is received from the api. + */ + onResponseError?: Array["onResponseError"]>; + + /** + * @description Interceptor to be called when a successful response is received from the api. + */ + onSuccess?: Array["onSuccess"]>; +} + type FetchImpl = UnmaskType<(input: string | Request | URL, init?: RequestInit) => Promise>; type CallApiPluginArray = Array>; @@ -96,11 +129,12 @@ type CallApiPluginFn = ( context: PluginInitContext ) => Array>; -export interface ExtraOptions< +export type ExtraOptions< TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, -> extends Interceptors { + // eslint-disable-next-line perfectionist/sort-intersection-types -- I want the first one to be first +> = (Interceptors | InterceptorsArray) & { /** * @description Authorization header value. */ @@ -291,43 +325,49 @@ export interface ExtraOptions< * @description URL to be used in the request. */ readonly url?: string; +}; + +export const optionsEnumToOmitFromBase = defineEnum(["extend", "override", "requestKey"]); + +// prettier-ignore +export interface BaseCallApiExtraOptions< + TBaseData = unknown, + TBaseErrorData = unknown, + TBaseResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, +> extends Omit, typeof optionsEnumToOmitFromBase[number]> { + /** + * @description An array of CallApi plugins. It allows you to extend the behavior of the library. + */ + plugins?: CallApiPluginArray | CallApiPluginFn; } -export const optionsToOmitFromInstance = defineEnum(["plugins"]); +export const optionsEnumToOmitFromInstance = defineEnum(["plugins"]); export interface CallApiExtraOptions< TData = unknown, TErrorData = unknown, TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, -> extends Omit, (typeof optionsToOmitFromInstance)[number]> { +> extends Omit< + ExtraOptions, + (typeof optionsEnumToOmitFromInstance)[number] + > { /** * @description Options that should extend the base options. */ - extend?: Pick, (typeof optionsToOmitFromInstance)[number]>; + extend?: Pick< + ExtraOptions, + (typeof optionsEnumToOmitFromInstance)[number] + >; /** * @description Options that should override the base options. */ override?: Pick< ExtraOptions, - (typeof optionsToOmitFromInstance)[number] + (typeof optionsEnumToOmitFromInstance)[number] >; } -export const optionsToOmitFromBase = defineEnum(["extend", "override", "requestKey"]); - -// prettier-ignore -export interface BaseCallApiExtraOptions< - TBaseData = unknown, - TBaseErrorData = unknown, - TBaseResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, -> extends Omit, typeof optionsToOmitFromBase[number]> { - /** - * @description An array of CallApi plugins. It allows you to extend the behavior of the library. - */ - plugins?: CallApiPluginArray | CallApiPluginFn; -} - // prettier-ignore export interface CombinedCallApiExtraOptions< TData = unknown, @@ -335,13 +375,6 @@ export interface CombinedCallApiExtraOptions< TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, > extends BaseCallApiExtraOptions, CallApiExtraOptions { } -// prettier-ignore -export interface CallApiConfig< - TData = unknown, - TErrorData = unknown, - TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, -> extends CallApiRequestOptions, CallApiExtraOptions { } - // prettier-ignore export interface BaseCallApiConfig< TBaseData = unknown, @@ -349,6 +382,13 @@ export interface BaseCallApiConfig< TBaseResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, > extends CallApiRequestOptions, BaseCallApiExtraOptions { } +// prettier-ignore +export interface CallApiConfig< + TData = unknown, + TErrorData = unknown, + TResultMode extends CallApiResultModeUnion = CallApiResultModeUnion, +> extends CallApiRequestOptions, CallApiExtraOptions { } + export type CallApiParameters< TData = unknown, TErrorData = unknown, diff --git a/packages/callapi/src/utils/common.ts b/packages/callapi/src/utils/common.ts index 5cf6a77..1438f79 100644 --- a/packages/callapi/src/utils/common.ts +++ b/packages/callapi/src/utils/common.ts @@ -7,12 +7,12 @@ import { type ErrorObjectUnion, type PossibleHTTPError, type PossibleJavascriptErrorNames, - optionsToOmitFromBase, - optionsToOmitFromInstance, + optionsEnumToOmitFromBase, + optionsEnumToOmitFromInstance, } from "../types"; import { fetchSpecificKeys } from "./constants"; -import { isFunction, isPlainObject, isQueryString, isString } from "./type-guards"; -import type { Awaitable } from "./type-helpers"; +import { isArray, isFunction, isPlainObject, isQueryString, isString } from "./type-guards"; +import type { AnyFunction, Awaitable } from "./type-helpers"; const omitKeys = , const TOmitArray extends Array>( initialObject: TObject, @@ -54,15 +54,15 @@ export const splitBaseConfig = (baseConfig: Record) => pickKeys(baseConfig, fetchSpecificKeys) as CallApiRequestOptions, omitKeys(baseConfig, [ ...fetchSpecificKeys, - ...optionsToOmitFromBase, - ]) satisfies BaseCallApiExtraOptions, + ...optionsEnumToOmitFromBase, + ]) as BaseCallApiExtraOptions, ] as const; // eslint-disable-next-line ts-eslint/no-explicit-any -- Any is required here so that one can pass custom function type without type errors export const splitConfig = (config: Record) => [ pickKeys(config, fetchSpecificKeys) as CallApiRequestOptions, - omitKeys(config, [...fetchSpecificKeys, ...optionsToOmitFromInstance]) as CallApiExtraOptions, + omitKeys(config, [...fetchSpecificKeys, ...optionsEnumToOmitFromInstance]) as CallApiExtraOptions, ] as const; export const objectifyHeaders = (headers: RequestInit["headers"]): Record | undefined => { @@ -99,6 +99,8 @@ export const toQueryString: ToQueryStringFn = (params) => { return new URLSearchParams(params as Record).toString(); }; +// export mergeAndResolve + export const mergeAndResolveHeaders = (options: { auth: CallApiConfig["auth"]; baseHeaders: CallApiConfig["headers"]; @@ -142,6 +144,24 @@ export const mergeAndResolveHeaders = (options: { return headersObject; }; +export const flattenHooks = < + TBaseInterceptor extends + | AnyFunction> + | Array> | undefined>, + TInterceptor extends + | AnyFunction> + | Array> | undefined>, +>( + baseInterceptor: TBaseInterceptor | undefined, + interceptor: TInterceptor | undefined +) => { + if (isArray(baseInterceptor)) { + return [baseInterceptor, interceptor].flat() as TInterceptor; + } + + return interceptor ?? baseInterceptor; +}; + export const getFetchImpl = (customFetchImpl: CallApiExtraOptions["customFetchImpl"]) => { if (customFetchImpl) { return customFetchImpl; @@ -173,9 +193,8 @@ export const getResponseType = ( text: () => response.text() as Promise, }); -export const executeInterceptors = >( - ...interceptors: TInterceptor[] -) => Promise.all(interceptors); +export const executeHooks = >(...interceptors: TInterceptor[]) => + Promise.all(interceptors); export const getResponseData = async ( response: Response, @@ -323,7 +342,7 @@ export const isHTTPErrorInstance = ( ): error is HTTPError => { return ( // prettier-ignore - error instanceof HTTPError || (isPlainObject(error, HTTPError) && error.name === "HTTPError" && error.isHTTPError === true) + error instanceof HTTPError|| (isPlainObject(error) && error.name === "HTTPError" && error.isHTTPError === true) ); }; diff --git a/packages/callapi/src/utils/type-guards.ts b/packages/callapi/src/utils/type-guards.ts index eb567fb..eceed04 100644 --- a/packages/callapi/src/utils/type-guards.ts +++ b/packages/callapi/src/utils/type-guards.ts @@ -5,18 +5,12 @@ export const isArray = (value: unknown): value is TArrayItem[] => Ar export const isObject = (value: unknown) => typeof value === "object" && value !== null; export const isPlainObject = >( - value: unknown, - // eslint-disable-next-line ts-eslint/no-unsafe-function-type -- This is the only generic way to type a class - Class?: Function + value: unknown ): value is TPlainObject => { if (!isObject(value)) { return false; } - if (Class && value instanceof Class) { - return true; - } - const prototype = Object.getPrototypeOf(value) as unknown; // Check if it's a plain object diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a866a7d..1746a7e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,8 +10,8 @@ catalogs: specifier: 0.2.1 version: 0.2.1 typescript: - specifier: ^5.7.2 - version: 5.6.3 + specifier: latest + version: 5.7.2 importers: @@ -22,7 +22,7 @@ importers: version: 2.27.11 '@eslint-react/eslint-plugin': specifier: ^1.22.1 - version: 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + version: 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@next/eslint-plugin-next': specifier: ^15.1.3 version: 15.1.3 @@ -31,16 +31,16 @@ importers: version: 22.10.2 '@zayne-labs/eslint-config': specifier: 0.4.2 - version: 0.4.2(@eslint-react/eslint-plugin@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2))(@next/eslint-plugin-next@15.1.3)(eslint-plugin-react-hooks@5.1.0(eslint@9.17.0(jiti@2.4.0)))(eslint-plugin-react-refresh@0.4.16(eslint@9.17.0(jiti@2.4.0)))(eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.17))(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + version: 0.4.2(@eslint-react/eslint-plugin@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(@next/eslint-plugin-next@15.1.3)(eslint-plugin-react-hooks@5.1.0(eslint@9.17.0(jiti@2.4.2)))(eslint-plugin-react-refresh@0.4.16(eslint@9.17.0(jiti@2.4.2)))(eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.17))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint: specifier: 9.17.0 - version: 9.17.0(jiti@2.4.0) + version: 9.17.0(jiti@2.4.2) eslint-plugin-react-hooks: specifier: ^5.1.0 - version: 5.1.0(eslint@9.17.0(jiti@2.4.0)) + version: 5.1.0(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-react-refresh: specifier: ^0.4.16 - version: 0.4.16(eslint@9.17.0(jiti@2.4.0)) + version: 0.4.16(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-tailwindcss: specifier: ^3.17.5 version: 3.17.5(tailwindcss@3.4.17) @@ -77,10 +77,10 @@ importers: version: 4.19.2 typescript: specifier: 'catalog:' - version: 5.6.3 + version: 5.7.2 vite: specifier: ^6.0.1 - version: 6.0.6(@types/node@22.10.2)(jiti@2.4.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) + version: 6.0.6(@types/node@22.10.2)(jiti@2.4.2)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1) docs: dependencies: @@ -94,32 +94,32 @@ importers: specifier: ^2.2.1 version: 2.2.1 '@zayne-labs/toolkit': - specifier: ^0.8.10 - version: 0.8.18(@iconify/react@5.1.0(react@19.0.0))(clsx@2.1.1)(react-dom@19.0.0(react@19.0.0))(react-hook-form@7.54.0(react@19.0.0))(react@19.0.0)(tailwind-merge@2.6.0) + specifier: ^0.8.20 + version: 0.8.21(@iconify/react@5.1.0(react@19.0.0))(clsx@2.1.1)(react-dom@19.0.0(react@19.0.0))(react-hook-form@7.54.2(react@19.0.0))(react@19.0.0)(tailwind-merge@2.6.0) clsx: specifier: ^2.1.1 version: 2.1.1 fumadocs-core: - specifier: 14.6.2 - version: 14.6.2(@types/react@19.0.2)(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 14.6.8 + version: 14.6.8(@types/react@19.0.2)(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) fumadocs-docgen: specifier: ^1.3.3 - version: 1.3.4(typescript@5.6.3) + version: 1.3.4(typescript@5.7.2) fumadocs-mdx: - specifier: 11.1.2 - version: 11.1.2(acorn@8.14.0)(fumadocs-core@14.6.2(@types/react@19.0.2)(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) + specifier: 11.2.1 + version: 11.2.1(acorn@8.14.0)(fumadocs-core@14.6.8(@types/react@19.0.2)(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) fumadocs-ui: - specifier: 14.6.2 - version: 14.6.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.17) + specifier: 14.6.8 + version: 14.6.8(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.17) geist: specifier: ^1.3.1 - version: 1.3.1(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) + version: 1.3.1(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) motion: specifier: ^11.15.0 version: 11.15.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) next: - specifier: 15.1.2 - version: 15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: 15.1.3 + version: 15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: 19.0.0 version: 19.0.0 @@ -171,7 +171,7 @@ importers: version: 3.4.17 typescript: specifier: 'catalog:' - version: 5.6.3 + version: 5.7.2 packages/callapi: devDependencies: @@ -207,10 +207,10 @@ importers: version: 5.36.0 tsup: specifier: 8.3.5 - version: 8.3.5(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.1) + version: 8.3.5(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' - version: 5.6.3 + version: 5.7.2 packages/callapi-legacy: devDependencies: @@ -246,10 +246,10 @@ importers: version: 5.36.0 tsup: specifier: 8.3.5 - version: 8.3.5(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.1) + version: 8.3.5(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1) typescript: specifier: 'catalog:' - version: 5.6.3 + version: 5.7.2 packages: @@ -672,17 +672,20 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-react/ast@1.22.1': - resolution: {integrity: sha512-uk44JH5RB9JytQqiHSPu89MAFlyvJ0AaSZIfQBJijjh08lswwvHOAiWLbl0iPzm7prrV4Lo3pjC3RwbVSZd+CA==} + '@eslint-react/ast@1.22.2': + resolution: {integrity: sha512-s8lNqvQS96sj8ev7m6dcJHgnW9w1WGQVixIn6TmsVqzO4ZAQhpYpfEoACKM0VOZYYWDe05hqh2Ns2iWJFoVwvw==} + engines: {bun: '>=1.0.15', node: '>=18.18.0'} - '@eslint-react/core@1.22.1': - resolution: {integrity: sha512-mzivc7X+uk19AKg+vy3EsyJoFGrhFjSCRPq1bgFDsovw67OxWP9qHNa265VIiqmRjk0iviaRmcar5tQBWhX41A==} + '@eslint-react/core@1.22.2': + resolution: {integrity: sha512-UYlY+Jij6/ZYPQ1BhH0qYjaLtu5SHMRLxfaTAmYyelzJwqyhQZvYuKbmNLo8on12ylbi9xRKxKueYQStOFfMlQ==} + engines: {bun: '>=1.0.15', node: '>=18.18.0'} - '@eslint-react/eff@1.22.1': - resolution: {integrity: sha512-aUu5vvw9m/mv0SToTLkObdY7h6S53q673bdXiUBjwNPgIOPrfl7VBnv2dXnqd4cdVvk5e077yPKI/mwl9Vsllg==} + '@eslint-react/eff@1.22.2': + resolution: {integrity: sha512-pQV2rVl8j70Sc4RGmTjYOLRmyXb7JOFh7ovyIB26bYoOc+vpA7ZhTEgkIp7ZiSPYSJWXlpMLcV/RvHcE+vWTig==} + engines: {bun: '>=1.0.15', node: '>=18.18.0'} - '@eslint-react/eslint-plugin@1.22.1': - resolution: {integrity: sha512-/+9crS1VpZk00S/oXrJG2h8BYxSB5PwGcPi8OgAXHU6TEICC/9EVqOgeRfNz+cyOLxN+Oq31+dlZA3YSN2rKsg==} + '@eslint-react/eslint-plugin@1.22.2': + resolution: {integrity: sha512-ZorXXp3rYfoHYfo75dVdlfZtuWRVHS82onzexGoeSGRaM0aFRzT2dUPZ4P08a+dE9gBQ/CN4M1RocVfjor1gcw==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -691,17 +694,21 @@ packages: typescript: optional: true - '@eslint-react/jsx@1.22.1': - resolution: {integrity: sha512-da49BHH28yAc1l5Nnf30v0G/crJN2ovz0afRfMl2dAxkZTQmp5VeiddojEbKA3lPgnaIrfrvG4UA43EITXX5ow==} + '@eslint-react/jsx@1.22.2': + resolution: {integrity: sha512-QU/xSoxnR3K26015oFxF/h2woYYfC0/3+RSgDgWpHkmOJgVambb2ZFsRLrzSoYs/v8i5na3Ne9QAS8Z4ukmzcw==} + engines: {bun: '>=1.0.15', node: '>=18.18.0'} - '@eslint-react/shared@1.22.1': - resolution: {integrity: sha512-nRzgOk0+fMHb1C02p4ue9Sfijkx5AVU8WL0w0V5Mk9+d4fUpxHJu12eahbwgTaLGaX5TP3KWzIfA1q1HNigPUg==} + '@eslint-react/shared@1.22.2': + resolution: {integrity: sha512-c79YU5oKI6fQZyD1k9fxDJ2fW7OIJoEL4CvX/uMun4iLiUqfF9rnmLmULA11k/uQ04jewf625kKfMesAicIwjQ==} + engines: {bun: '>=1.0.15', node: '>=18.18.0'} - '@eslint-react/types@1.22.1': - resolution: {integrity: sha512-uLl4aDLDYzR7XTqFyUooZDocmX3Dy/3ANQDiyLVXFy055MyRhti9QjdbI+wAlkmynZiOE7oVoRtwR9JgSus/uw==} + '@eslint-react/types@1.22.2': + resolution: {integrity: sha512-e1F3MNZyWVcNqcolLystEmMgXpJ/nUcXtcSEGxYM9CbBRuKMKYy2EJuXNtNfxr7hs5I+eohKp1g34MZIGVemuA==} + engines: {bun: '>=1.0.15', node: '>=18.18.0'} - '@eslint-react/var@1.22.1': - resolution: {integrity: sha512-QzkS1c6XrKq8Dl6llObmIBL5KKAJZUOsugFogXwLBav1a9tf76Fc/ozqEutP4hwoOWtTWhlQR3guhwVrMHTBcA==} + '@eslint-react/var@1.22.2': + resolution: {integrity: sha512-OXWXDHBEmLMZDeSkhy1MKI8jh5N5+FEJjS75dfE1w2lHX5QuhiSdm9+W5a88lEE2syv1iLtjdroi2jgCtL0J2w==} + engines: {bun: '>=1.0.15', node: '>=18.18.0'} '@eslint/compat@1.2.4': resolution: {integrity: sha512-S8ZdQj/N69YAtuqFt7653jwcvuUj131+6qGLUyDqfDg1OIoBQ66OCuXC473YQfO2AaxITTutiRQiDwoo7ZLYyg==} @@ -931,56 +938,56 @@ packages: '@mdx-js/mdx@3.1.0': resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} - '@next/env@15.1.2': - resolution: {integrity: sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==} + '@next/env@15.1.3': + resolution: {integrity: sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==} '@next/eslint-plugin-next@15.1.3': resolution: {integrity: sha512-oeP1vnc5Cq9UoOb8SYHAEPbCXMzOgG70l+Zfd+Ie00R25FOm+CCVNrcIubJvB1tvBgakXE37MmqSycksXVPRqg==} - '@next/swc-darwin-arm64@15.1.2': - resolution: {integrity: sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==} + '@next/swc-darwin-arm64@15.1.3': + resolution: {integrity: sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.1.2': - resolution: {integrity: sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==} + '@next/swc-darwin-x64@15.1.3': + resolution: {integrity: sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.1.2': - resolution: {integrity: sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==} + '@next/swc-linux-arm64-gnu@15.1.3': + resolution: {integrity: sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.1.2': - resolution: {integrity: sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==} + '@next/swc-linux-arm64-musl@15.1.3': + resolution: {integrity: sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.1.2': - resolution: {integrity: sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==} + '@next/swc-linux-x64-gnu@15.1.3': + resolution: {integrity: sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.1.2': - resolution: {integrity: sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==} + '@next/swc-linux-x64-musl@15.1.3': + resolution: {integrity: sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.1.2': - resolution: {integrity: sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==} + '@next/swc-win32-arm64-msvc@15.1.3': + resolution: {integrity: sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.1.2': - resolution: {integrity: sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==} + '@next/swc-win32-x64-msvc@15.1.3': + resolution: {integrity: sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1456,110 +1463,115 @@ packages: '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} - '@rollup/rollup-android-arm-eabi@4.28.0': - resolution: {integrity: sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==} + '@rollup/rollup-android-arm-eabi@4.29.1': + resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.28.0': - resolution: {integrity: sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==} + '@rollup/rollup-android-arm64@4.29.1': + resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.28.0': - resolution: {integrity: sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==} + '@rollup/rollup-darwin-arm64@4.29.1': + resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.28.0': - resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==} + '@rollup/rollup-darwin-x64@4.29.1': + resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.28.0': - resolution: {integrity: sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==} + '@rollup/rollup-freebsd-arm64@4.29.1': + resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.28.0': - resolution: {integrity: sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==} + '@rollup/rollup-freebsd-x64@4.29.1': + resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.28.0': - resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==} + '@rollup/rollup-linux-arm-gnueabihf@4.29.1': + resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.28.0': - resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==} + '@rollup/rollup-linux-arm-musleabihf@4.29.1': + resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.28.0': - resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==} + '@rollup/rollup-linux-arm64-gnu@4.29.1': + resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.28.0': - resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==} + '@rollup/rollup-linux-arm64-musl@4.29.1': + resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': - resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==} + '@rollup/rollup-linux-loongarch64-gnu@4.29.1': + resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': + resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.28.0': - resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==} + '@rollup/rollup-linux-riscv64-gnu@4.29.1': + resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.28.0': - resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==} + '@rollup/rollup-linux-s390x-gnu@4.29.1': + resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.28.0': - resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==} + '@rollup/rollup-linux-x64-gnu@4.29.1': + resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.28.0': - resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==} + '@rollup/rollup-linux-x64-musl@4.29.1': + resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.28.0': - resolution: {integrity: sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==} + '@rollup/rollup-win32-arm64-msvc@4.29.1': + resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.28.0': - resolution: {integrity: sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==} + '@rollup/rollup-win32-ia32-msvc@4.29.1': + resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.28.0': - resolution: {integrity: sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==} + '@rollup/rollup-win32-x64-msvc@4.29.1': + resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} cpu: [x64] os: [win32] - '@shikijs/core@1.24.3': - resolution: {integrity: sha512-VRcf4GYUIkxIchGM9DrapRcxtgojg4IWKUtX5EtW+4PJiGzF2xQqZSv27PJt+WLc18KT3CNLpNWow9JYV5n+Rg==} + '@shikijs/core@1.24.4': + resolution: {integrity: sha512-jjLsld+xEEGYlxAXDyGwWsKJ1sw5Pc1pnp4ai2ORpjx2UX08YYTC0NNqQYO1PaghYaR+PvgMOGuvzw2he9sk0Q==} - '@shikijs/engine-javascript@1.24.3': - resolution: {integrity: sha512-De8tNLvYjeK6V0Gb47jIH2M+OKkw+lWnSV1j3HVDFMlNIglmVcTMG2fASc29W0zuFbfEEwKjO8Fe4KYSO6Ce3w==} + '@shikijs/engine-javascript@1.24.4': + resolution: {integrity: sha512-TClaQOLvo9WEMJv6GoUsykQ6QdynuKszuORFWCke8qvi6PeLm7FcD9+7y45UenysxEWYpDL5KJaVXTngTE+2BA==} - '@shikijs/engine-oniguruma@1.24.3': - resolution: {integrity: sha512-iNnx950gs/5Nk+zrp1LuF+S+L7SKEhn8k9eXgFYPGhVshKppsYwRmW8tpmAMvILIMSDfrgqZ0w+3xWVQB//1Xw==} + '@shikijs/engine-oniguruma@1.24.4': + resolution: {integrity: sha512-Do2ry6flp2HWdvpj2XOwwa0ljZBRy15HKZITzPcNIBOGSeprnA8gOooA/bLsSPuy8aJBa+Q/r34dMmC3KNL/zw==} - '@shikijs/rehype@1.24.3': - resolution: {integrity: sha512-H9PHKSjk0xY+ZGoqmWxjU6f6N6fT8YPchfdnV+8UVKKGbK/c4QZ/gr8X32q5mBx2GemGBZFF7z+VD5DA05UM5w==} + '@shikijs/rehype@1.24.4': + resolution: {integrity: sha512-NbGOGGB0+j/cdv7TKQXNCbuqSjiwmbb2bqjaCD6jPhjAtVo/9KEtpIR7QQQP0ZvcDNuHQHtntrfQnysa6kJ41Q==} - '@shikijs/types@1.24.3': - resolution: {integrity: sha512-FPMrJ69MNxhRtldRk69CghvaGlbbN3pKRuvko0zvbfa2dXp4pAngByToqS5OY5jvN8D7LKR4RJE8UvzlCOuViw==} + '@shikijs/types@1.24.4': + resolution: {integrity: sha512-0r0XU7Eaow0PuDxuWC1bVqmWCgm3XqizIaT7SM42K03vc69LGooT0U8ccSR44xP/hGlNx4FKhtYpV+BU6aaKAA==} '@shikijs/vscode-textmate@9.3.1': resolution: {integrity: sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==} @@ -1712,8 +1724,8 @@ packages: resolution: {integrity: sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@ungap/structured-clone@1.2.1': + resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} '@zayne-labs/eslint-config@0.4.2': resolution: {integrity: sha512-m5Va9Ek5axtAQuwThu7co8g7ibj5dWLaspmi6uJQBXHruVpfg43dvPcnpkPDrESbWeYtsJ2XlfQeDOJAJZmF0A==} @@ -1758,8 +1770,8 @@ packages: vue-eslint-parser: optional: true - '@zayne-labs/toolkit@0.8.18': - resolution: {integrity: sha512-1+WsBnYw1q7AHaAs8Zj4/LHjMkS4Fk8FaEH/OwBPXnhwg8xHZHmVKanli4G8L9c88DrHw08ibTy+z6F45BtKeg==} + '@zayne-labs/toolkit@0.8.21': + resolution: {integrity: sha512-FNwGLy8Az9ARK/rTqUAfTngMctQZw9qCPEbrDBZKSd5on2lpauZr6rUsBYaYoOOnkoxVXQeipGX2Q249R99fhQ==} engines: {node: '>=18.x'} peerDependencies: '@iconify/react': '>=5.0.2' @@ -1879,9 +1891,6 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - birecord@0.1.1: - resolution: {integrity: sha512-VUpsf/qykW0heRlC8LooCq28Kxn3mAqKohhDG/49rrsQ1dT1CXyj/pgXS+5BSRzFTR/3DyIBOqQOrGyZOh71Aw==} - brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -1908,8 +1917,8 @@ packages: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} - bundle-require@5.0.0: - resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.18' @@ -2089,8 +2098,8 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - consola@3.2.3: - resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + consola@3.3.3: + resolution: {integrity: sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==} engines: {node: ^14.18.0 || >=16.10.0} core-js-compat@3.39.0: @@ -2198,8 +2207,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.75: - resolution: {integrity: sha512-Lf3++DumRE/QmweGjU+ZcKqQ+3bKkU/qjaKYhIJKEOhgIO9Xs6IiAQFkfFoj+RhgDk4LUeNsLo6plExHqSyu6Q==} + electron-to-chromium@1.5.76: + resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==} emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -2359,8 +2368,8 @@ packages: peerDependencies: eslint: '>=8.0.0' - eslint-plugin-react-debug@1.22.1: - resolution: {integrity: sha512-dtXr9UTiWWSVkwNkaYkA04khR6xebqLeX3O8/ZJfIeFaA+58DRhwWGqzywLDjjLIM7s0V7UmuuvAGff8CVS9fA==} + eslint-plugin-react-debug@1.22.2: + resolution: {integrity: sha512-N9er8nPcia+7IreR+0wkXSBpeQ85k/x5inWHQgm9j+KZtMjeeLp1YL183y2Ys0yRFhn7OWYNl3PrjF8fVbSNkQ==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2369,8 +2378,8 @@ packages: typescript: optional: true - eslint-plugin-react-dom@1.22.1: - resolution: {integrity: sha512-uQg81POQCR1rDlOfvzRZQ0KoJeLkSmpsmGLU0r5unsCNJFF6hCEcqhYHapmn7oLV/6MebLF2exptsXjNc+L7rQ==} + eslint-plugin-react-dom@1.22.2: + resolution: {integrity: sha512-ZzJ4+XSa0LBQnOorw+DhyqPxpioh8dhdKXOeKxPC9nQjWHoc9vhE9B2uhC4p9imZdiqEdoKFVA4iKZucNSaJVg==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2379,8 +2388,8 @@ packages: typescript: optional: true - eslint-plugin-react-hooks-extra@1.22.1: - resolution: {integrity: sha512-9g+Cxf76nne6n9cPOzQpj4S6f8XgSqRwkDO/XbHzuU6xgaxc2Y/9lD9YX1N9Tm3d86XtdLHkWfDFBD4SigSC2Q==} + eslint-plugin-react-hooks-extra@1.22.2: + resolution: {integrity: sha512-FofmOAxMnKQMjbmB4xnS+tlYlmJ07p+KbftIwaHAKAB1/C1E7CZ7zMskvMI2IjEmPMEFDsk+6OHnmUPyv1YOHQ==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2395,8 +2404,8 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-naming-convention@1.22.1: - resolution: {integrity: sha512-KXsHYBk9x9+UYoXfLHbKrc1ntXu+TYIB5nmwEUP5PrjcmUO4GuFNFDzWSqUVileQbJPAXWBUwEBGfwCePGwJrg==} + eslint-plugin-react-naming-convention@1.22.2: + resolution: {integrity: sha512-2uFg2dHqCnylHObuPGDcKvADSfwtw3c78C2/Pn4ufJJM2i++V9xdo/FAG5gbB4wzDyldU+phoM03KoNSL7ef8Q==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2410,8 +2419,8 @@ packages: peerDependencies: eslint: '>=8.40' - eslint-plugin-react-web-api@1.22.1: - resolution: {integrity: sha512-g/m8c61PWqVmF2P5P9nrL7jobTCbBRdChTfL1fSMXmI9Ax3Ggl+7dWLhIFSRffEUIOOE6aAHrMT3EBWXM25uYQ==} + eslint-plugin-react-web-api@1.22.2: + resolution: {integrity: sha512-H9Nc1T76za1TlC7LyKZQVnCvHzWD9poAhJFSvrlrLyfXsCOpAuCGBS4MmFVZf6Hi9BWHm9HeKmfEJPa+KRnIfQ==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2420,8 +2429,8 @@ packages: typescript: optional: true - eslint-plugin-react-x@1.22.1: - resolution: {integrity: sha512-+YoMnr/JLoXIhviecNYsY7kcjHaOQBOyT7wQjyaxxNrqGeTKPJI6rtk+Sb7ZGXDXVg3L8S+gyzS2VQTt9KS9gQ==} + eslint-plugin-react-x@1.22.2: + resolution: {integrity: sha512-9W2+lP/s/nK3ys9NVsx3CQ/gTk4RdFZoZ79qfhgWHCtD7c0t5ZtB7T0Cwh85hbKRULSf1GHl6+hhA3f51TcYrQ==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2657,8 +2666,8 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - fumadocs-core@14.6.2: - resolution: {integrity: sha512-RAsnqmudt9FR4pCaHjjAWEHXLbTjKF2xgcZ4geD1WmilPp7J3WnPMXjqn+4WVqra5Vyi2Ruz+fuB+vDhGzuekA==} + fumadocs-core@14.6.8: + resolution: {integrity: sha512-ajoJbeUwHTkRmxavqUpHfRuj49ABB86m/iMslrS6Dl8o4EpSjvX0ZRM3B1MIjA4nZstbolYVCGhWSH4qD89gZw==} peerDependencies: '@oramacloud/client': 1.x.x || 2.x.x algoliasearch: 4.24.0 @@ -2680,8 +2689,8 @@ packages: fumadocs-docgen@1.3.4: resolution: {integrity: sha512-NL/ZXxckbAE4J6rXP4gGQTUQtX3P+rv0dM+XUAhWgWItuL9Z3fzVsY3e4wWpYnp0TpHRySYnNg3RcbSmovrFyQ==} - fumadocs-mdx@11.1.2: - resolution: {integrity: sha512-FvZKXCk8c9YPXSfeC9mcvbls1Zy/bzZ+nGgnibeujUJ+x6k24cUZrBqKABsLb6yNrNrB8yGiCC3asuwlppHn/g==} + fumadocs-mdx@11.2.1: + resolution: {integrity: sha512-w7Eo0+xSbOvs7/MXngHx4M6DEIIkiU3Zl+9FBQK4Af8eIUldJ8+el4rZcWjUnL35adakztYmfhEOZcOGFaUrfg==} hasBin: true peerDependencies: fumadocs-core: ^14.0.0 @@ -2692,8 +2701,8 @@ packages: peerDependencies: typescript: '*' - fumadocs-ui@14.6.2: - resolution: {integrity: sha512-gX/gOb0dMVc/RQICZjOfKdhjeFqll7Kl/A7ROSv1phUIv3i8y5kJ2BEZfg2eOVjNZHjM8/jvWpTT4l53UQkSfw==} + fumadocs-ui@14.6.8: + resolution: {integrity: sha512-z/yKhjl8FWPaFM64dEaJhKUsp8co4PJJmd++s3MYAT/jXbXSXYTIGgz5IsIzqjwoVfU5e766E3GfyzYx4hitAQ==} peerDependencies: next: 14.x.x || 15.x.x react: 18.x.x || 19.x.x @@ -2828,8 +2837,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - image-size@1.1.1: - resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} + image-size@1.2.0: + resolution: {integrity: sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==} engines: {node: '>=16.x'} hasBin: true @@ -2978,8 +2987,8 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - jiti@2.4.0: - resolution: {integrity: sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true joycon@3.1.1: @@ -3097,10 +3106,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lucide-react@0.468.0: - resolution: {integrity: sha512-6koYRhnM2N0GGZIdXzSeiNwguv1gt/FAjZOiPl76roBi3xKEXa4WmfpxgQwTTL4KipXjefrnf3oV4IsYhi4JFA==} + lucide-react@0.469.0: + resolution: {integrity: sha512-28vvUnnKQ/dBwiCQtwJw7QauYnE7yd2Cyp4tTTJpvglX4EMpbflcdBgrgToX2j71B3YvugK/NH3BGUk+E/p/Fw==} peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} @@ -3247,11 +3256,11 @@ packages: micromark-util-combine-extensions@2.0.1: resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - micromark-util-decode-numeric-character-reference@2.0.1: - resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - micromark-util-decode-string@2.0.0: - resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} micromark-util-encode@2.0.1: resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} @@ -3280,8 +3289,8 @@ packages: micromark-util-types@2.0.1: resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} - micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + micromark@4.0.1: + resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==} micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} @@ -3361,8 +3370,8 @@ packages: engines: {node: ^18 || >=20} hasBin: true - nanospinner@1.2.0: - resolution: {integrity: sha512-dGxYcEj8YhuxjVO3PYmnj1nBhtwUkvuwYbLl/MduBPmQUPy3xBtG/ScJgqZgntQkX44UQaCSlFeW4rS5fUR/Sw==} + nanospinner@1.2.2: + resolution: {integrity: sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==} natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -3381,8 +3390,8 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next@15.1.2: - resolution: {integrity: sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==} + next@15.1.3: + resolution: {integrity: sha512-5igmb8N8AEhWDYzogcJvtcRDU6n4cMGtBklxKD4biYv4LXN8+awc/bbQ2IM2NQHdVPgJ6XumYXfo3hBtErg1DA==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -3437,8 +3446,8 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - npm-to-yarn@3.0.0: - resolution: {integrity: sha512-76YnmsbfrYp0tMsWxM0RNX0Vs+x8JxpJGu6B/jDn4lW8+laiTcKmKi9MeMh4UikO4RkJ1oqURoDy9bXJmMXS6A==} + npm-to-yarn@3.0.1: + resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} object-assign@4.1.1: @@ -3460,8 +3469,8 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-to-es@0.8.0: - resolution: {integrity: sha512-rY+/a6b+uCgoYIL9itjY0x99UUDHXmGaw7Jjk5ZvM/3cxDJifyxFr/Zm4tTmF6Tre18gAakJo7AzhKUeMNLgHA==} + oniguruma-to-es@0.8.1: + resolution: {integrity: sha512-dekySTEvCxCj0IgKcA2uUCO/e4ArsqpucDPcX26w9ajx+DvMWLc5eZeJaRQkd7oC/+rwif5gnT900tA34uN9Zw==} open@10.1.0: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} @@ -3801,14 +3810,14 @@ packages: peerDependencies: react: ^19.0.0 - react-hook-form@7.54.0: - resolution: {integrity: sha512-PS05+UQy/IdSbJNojBypxAo9wllhHgGmyr8/dyGQcPoiMf3e7Dfb9PWYVRco55bLbxH9S+1yDDJeTdlYCSxO3A==} + react-hook-form@7.54.2: + resolution: {integrity: sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 - react-medium-image-zoom@5.2.12: - resolution: {integrity: sha512-BbQ9jLBFxu6z+viH5tzQzAGqHOJQoYUM7iT1KUkamWKOO6vR1pC33os7LGLrHvOcyySMw74rUdoUCXFdeglwCQ==} + react-medium-image-zoom@5.2.13: + resolution: {integrity: sha512-KcBL4OsoUQJgIFh6vQgt/6sRGqDy6bQBcsbhGD2tsy4B5Pw3dWrboocVOyIm76RRALEZ6Qwp3EDvIvfEv0m5sg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3885,14 +3894,14 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regex-recursion@5.0.0: - resolution: {integrity: sha512-UwyOqeobrCCqTXPcsSqH4gDhOjD5cI/b8kjngWgSZbxYh5yVjAwTjO5+hAuPRNiuR70+5RlWSs+U9PVcVcW9Lw==} + regex-recursion@5.1.1: + resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} regex-utilities@2.3.0: resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - regex@5.0.2: - resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==} + regex@5.1.1: + resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} @@ -3954,8 +3963,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.28.0: - resolution: {integrity: sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==} + rollup@4.29.1: + resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4014,8 +4023,8 @@ packages: resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} engines: {node: '>= 0.4'} - shiki@1.24.3: - resolution: {integrity: sha512-eMeX/ehE2IDKVs71kB4zVcDHjutNcOtm+yIRuR4sA6ThBbdFI0DffGJiyoKCodj0xRGxIoWC3pk/Anmm5mzHmA==} + shiki@1.24.4: + resolution: {integrity: sha512-aVGSFAOAr1v26Hh/+GBIsRVDWJ583XYV7CuNURKRWh9gpGv4OdbisZGq96B9arMYTZhTQkmRF5BrShOSTvNqhw==} short-unique-id@5.2.0: resolution: {integrity: sha512-cMGfwNyfDZ/nzJ2k2M+ClthBIh//GlZl1JEf47Uoa9XR11bz8Pa2T2wQO4bVrRdH48LrIDWJahQziKo3MjhsWg==} @@ -4234,11 +4243,6 @@ packages: engines: {node: '>=10'} hasBin: true - terser@5.37.0: - resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} - engines: {node: '>=10'} - hasBin: true - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -4359,11 +4363,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.7.2: resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} @@ -4948,27 +4947,26 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.17.0(jiti@2.4.0))': + '@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.17.0(jiti@2.4.2))': dependencies: escape-string-regexp: 4.0.0 - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) ignore: 5.3.2 - '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@2.4.0))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@2.4.2))': dependencies: - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint-react/ast@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@eslint-react/ast@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-react/eff': 1.22.1 - '@eslint-react/types': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@eslint-react/types': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/types': 8.18.2 '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - birecord: 0.1.1 + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) string-ts: 2.2.0 ts-pattern: 5.6.0 transitivePeerDependencies: @@ -4976,19 +4974,18 @@ snapshots: - supports-color - typescript - '@eslint-react/core@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@eslint-react/core@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-react/ast': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/eff': 1.22.1 - '@eslint-react/jsx': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/shared': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/types': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/var': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/ast': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@eslint-react/jsx': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/shared': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/types': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/var': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - birecord: 0.1.1 + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) short-unique-id: 5.2.0 ts-pattern: 5.6.0 transitivePeerDependencies: @@ -4996,49 +4993,48 @@ snapshots: - supports-color - typescript - '@eslint-react/eff@1.22.1': {} + '@eslint-react/eff@1.22.2': {} - '@eslint-react/eslint-plugin@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@eslint-react/eslint-plugin@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-react/eff': 1.22.1 - '@eslint-react/shared': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/types': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@eslint-react/shared': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/types': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.0) - eslint-plugin-react-debug: 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint-plugin-react-dom: 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint-plugin-react-hooks-extra: 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint-plugin-react-naming-convention: 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint-plugin-react-web-api: 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint-plugin-react-x: 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) + eslint-plugin-react-debug: 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint-plugin-react-dom: 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint-plugin-react-hooks-extra: 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint-plugin-react-naming-convention: 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint-plugin-react-web-api: 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint-plugin-react-x: 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@eslint-react/jsx@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@eslint-react/jsx@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-react/ast': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/eff': 1.22.1 - '@eslint-react/types': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/var': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/ast': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@eslint-react/types': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/var': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.18.2 '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - birecord: 0.1.1 + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) ts-pattern: 5.6.0 transitivePeerDependencies: - eslint - supports-color - typescript - '@eslint-react/shared@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@eslint-react/shared@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-react/eff': 1.22.1 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) fast-equals: 5.0.1 micro-memoize: 4.1.2 picomatch: 4.0.2 @@ -5049,24 +5045,24 @@ snapshots: - supports-color - typescript - '@eslint-react/types@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@eslint-react/types@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-react/eff': 1.22.1 + '@eslint-react/eff': 1.22.2 '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) transitivePeerDependencies: - eslint - supports-color - typescript - '@eslint-react/var@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@eslint-react/var@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-react/ast': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/eff': 1.22.1 - '@eslint-react/types': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/ast': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@eslint-react/types': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.18.2 '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) string-ts: 2.2.0 ts-pattern: 5.6.0 transitivePeerDependencies: @@ -5074,9 +5070,9 @@ snapshots: - supports-color - typescript - '@eslint/compat@1.2.4(eslint@9.17.0(jiti@2.4.0))': + '@eslint/compat@1.2.4(eslint@9.17.0(jiti@2.4.2))': optionalDependencies: - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) '@eslint/config-array@0.19.1': dependencies: @@ -5329,34 +5325,34 @@ snapshots: - acorn - supports-color - '@next/env@15.1.2': {} + '@next/env@15.1.3': {} '@next/eslint-plugin-next@15.1.3': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.1.2': + '@next/swc-darwin-arm64@15.1.3': optional: true - '@next/swc-darwin-x64@15.1.2': + '@next/swc-darwin-x64@15.1.3': optional: true - '@next/swc-linux-arm64-gnu@15.1.2': + '@next/swc-linux-arm64-gnu@15.1.3': optional: true - '@next/swc-linux-arm64-musl@15.1.2': + '@next/swc-linux-arm64-musl@15.1.3': optional: true - '@next/swc-linux-x64-gnu@15.1.2': + '@next/swc-linux-x64-gnu@15.1.3': optional: true - '@next/swc-linux-x64-musl@15.1.2': + '@next/swc-linux-x64-musl@15.1.3': optional: true - '@next/swc-win32-arm64-msvc@15.1.2': + '@next/swc-win32-arm64-msvc@15.1.3': optional: true - '@next/swc-win32-x64-msvc@15.1.2': + '@next/swc-win32-x64-msvc@15.1.3': optional: true '@nodelib/fs.scandir@2.1.5': @@ -5817,90 +5813,93 @@ snapshots: '@radix-ui/rect@1.1.0': {} - '@rollup/rollup-android-arm-eabi@4.28.0': + '@rollup/rollup-android-arm-eabi@4.29.1': + optional: true + + '@rollup/rollup-android-arm64@4.29.1': optional: true - '@rollup/rollup-android-arm64@4.28.0': + '@rollup/rollup-darwin-arm64@4.29.1': optional: true - '@rollup/rollup-darwin-arm64@4.28.0': + '@rollup/rollup-darwin-x64@4.29.1': optional: true - '@rollup/rollup-darwin-x64@4.28.0': + '@rollup/rollup-freebsd-arm64@4.29.1': optional: true - '@rollup/rollup-freebsd-arm64@4.28.0': + '@rollup/rollup-freebsd-x64@4.29.1': optional: true - '@rollup/rollup-freebsd-x64@4.28.0': + '@rollup/rollup-linux-arm-gnueabihf@4.29.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.28.0': + '@rollup/rollup-linux-arm-musleabihf@4.29.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.28.0': + '@rollup/rollup-linux-arm64-gnu@4.29.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.28.0': + '@rollup/rollup-linux-arm64-musl@4.29.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.28.0': + '@rollup/rollup-linux-loongarch64-gnu@4.29.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.28.0': + '@rollup/rollup-linux-riscv64-gnu@4.29.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.28.0': + '@rollup/rollup-linux-s390x-gnu@4.29.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.28.0': + '@rollup/rollup-linux-x64-gnu@4.29.1': optional: true - '@rollup/rollup-linux-x64-musl@4.28.0': + '@rollup/rollup-linux-x64-musl@4.29.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.28.0': + '@rollup/rollup-win32-arm64-msvc@4.29.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.28.0': + '@rollup/rollup-win32-ia32-msvc@4.29.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.28.0': + '@rollup/rollup-win32-x64-msvc@4.29.1': optional: true - '@shikijs/core@1.24.3': + '@shikijs/core@1.24.4': dependencies: - '@shikijs/engine-javascript': 1.24.3 - '@shikijs/engine-oniguruma': 1.24.3 - '@shikijs/types': 1.24.3 + '@shikijs/engine-javascript': 1.24.4 + '@shikijs/engine-oniguruma': 1.24.4 + '@shikijs/types': 1.24.4 '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 hast-util-to-html: 9.0.4 - '@shikijs/engine-javascript@1.24.3': + '@shikijs/engine-javascript@1.24.4': dependencies: - '@shikijs/types': 1.24.3 + '@shikijs/types': 1.24.4 '@shikijs/vscode-textmate': 9.3.1 - oniguruma-to-es: 0.8.0 + oniguruma-to-es: 0.8.1 - '@shikijs/engine-oniguruma@1.24.3': + '@shikijs/engine-oniguruma@1.24.4': dependencies: - '@shikijs/types': 1.24.3 + '@shikijs/types': 1.24.4 '@shikijs/vscode-textmate': 9.3.1 - '@shikijs/rehype@1.24.3': + '@shikijs/rehype@1.24.4': dependencies: - '@shikijs/types': 1.24.3 + '@shikijs/types': 1.24.4 '@types/hast': 3.0.4 hast-util-to-string: 3.0.1 - shiki: 1.24.3 + shiki: 1.24.4 unified: 11.0.5 unist-util-visit: 5.0.0 - '@shikijs/types@1.24.3': + '@shikijs/types@1.24.4': dependencies: '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 @@ -5931,10 +5930,10 @@ snapshots: '@size-limit/file': 11.1.6(size-limit@11.1.6) size-limit: 11.1.6 - '@stylistic/eslint-plugin@2.12.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@stylistic/eslint-plugin@2.12.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.0) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) eslint-visitor-keys: 4.2.0 espree: 10.3.0 estraverse: 5.3.0 @@ -6011,15 +6010,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/parser': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/visitor-keys': 8.18.2 - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -6028,14 +6027,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: '@typescript-eslint/scope-manager': 8.18.2 '@typescript-eslint/types': 8.18.2 '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) '@typescript-eslint/visitor-keys': 8.18.2 debug: 4.4.0 - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color @@ -6045,12 +6044,12 @@ snapshots: '@typescript-eslint/types': 8.18.2 '@typescript-eslint/visitor-keys': 8.18.2 - '@typescript-eslint/type-utils@8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@typescript-eslint/type-utils@8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) debug: 4.4.0 - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) ts-api-utils: 1.4.3(typescript@5.7.2) typescript: 5.7.2 transitivePeerDependencies: @@ -6072,13 +6071,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@typescript-eslint/utils@8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.0)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.18.2 '@typescript-eslint/types': 8.18.2 '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color @@ -6088,41 +6087,41 @@ snapshots: '@typescript-eslint/types': 8.18.2 eslint-visitor-keys: 4.2.0 - '@ungap/structured-clone@1.2.0': {} + '@ungap/structured-clone@1.2.1': {} - '@zayne-labs/eslint-config@0.4.2(@eslint-react/eslint-plugin@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2))(@next/eslint-plugin-next@15.1.3)(eslint-plugin-react-hooks@5.1.0(eslint@9.17.0(jiti@2.4.0)))(eslint-plugin-react-refresh@0.4.16(eslint@9.17.0(jiti@2.4.0)))(eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.17))(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2)': + '@zayne-labs/eslint-config@0.4.2(@eslint-react/eslint-plugin@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(@next/eslint-plugin-next@15.1.3)(eslint-plugin-react-hooks@5.1.0(eslint@9.17.0(jiti@2.4.2)))(eslint-plugin-react-refresh@0.4.16(eslint@9.17.0(jiti@2.4.2)))(eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.17))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: '@antfu/install-pkg': 0.5.0 '@clack/prompts': 0.9.0 - '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.17.0(jiti@2.4.0)) - '@eslint/compat': 1.2.4(eslint@9.17.0(jiti@2.4.0)) + '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + '@eslint/compat': 1.2.4(eslint@9.17.0(jiti@2.4.2)) '@eslint/js': 9.17.0 - '@stylistic/eslint-plugin': 2.12.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.0) - eslint-config-flat-gitignore: 0.3.0(eslint@9.17.0(jiti@2.4.0)) + '@stylistic/eslint-plugin': 2.12.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) + eslint-config-flat-gitignore: 0.3.0(eslint@9.17.0(jiti@2.4.2)) eslint-flat-config-utils: 0.4.0 - eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import-x@4.6.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.0)) - eslint-merge-processors: 0.1.0(eslint@9.17.0(jiti@2.4.0)) - eslint-plugin-import-x: 4.6.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint-plugin-jsdoc: 50.6.1(eslint@9.17.0(jiti@2.4.0)) - eslint-plugin-jsonc: 2.18.2(eslint@9.17.0(jiti@2.4.0)) - eslint-plugin-n: 17.15.1(eslint@9.17.0(jiti@2.4.0)) - eslint-plugin-perfectionist: 4.4.0(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import-x@4.6.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)) + eslint-merge-processors: 0.1.0(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-import-x: 4.6.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint-plugin-jsdoc: 50.6.1(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-jsonc: 2.18.2(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-n: 17.15.1(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-perfectionist: 4.4.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) eslint-plugin-security: 3.0.1 - eslint-plugin-toml: 0.12.0(eslint@9.17.0(jiti@2.4.0)) - eslint-plugin-unicorn: 56.0.1(eslint@9.17.0(jiti@2.4.0)) - eslint-plugin-yml: 1.16.0(eslint@9.17.0(jiti@2.4.0)) + eslint-plugin-toml: 0.12.0(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-unicorn: 56.0.1(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-yml: 1.16.0(eslint@9.17.0(jiti@2.4.2)) globals: 15.14.0 jsonc-eslint-parser: 2.4.0 local-pkg: 0.5.1 toml-eslint-parser: 0.10.0 - typescript-eslint: 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + typescript-eslint: 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) yaml-eslint-parser: 1.2.3 optionalDependencies: - '@eslint-react/eslint-plugin': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/eslint-plugin': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@next/eslint-plugin-next': 15.1.3 - eslint-plugin-react-hooks: 5.1.0(eslint@9.17.0(jiti@2.4.0)) - eslint-plugin-react-refresh: 0.4.16(eslint@9.17.0(jiti@2.4.0)) + eslint-plugin-react-hooks: 5.1.0(eslint@9.17.0(jiti@2.4.2)) + eslint-plugin-react-refresh: 0.4.16(eslint@9.17.0(jiti@2.4.2)) eslint-plugin-tailwindcss: 3.17.5(tailwindcss@3.4.17) transitivePeerDependencies: - '@eslint/json' @@ -6130,9 +6129,9 @@ snapshots: - supports-color - typescript - '@zayne-labs/toolkit@0.8.18(@iconify/react@5.1.0(react@19.0.0))(clsx@2.1.1)(react-dom@19.0.0(react@19.0.0))(react-hook-form@7.54.0(react@19.0.0))(react@19.0.0)(tailwind-merge@2.6.0)': + '@zayne-labs/toolkit@0.8.21(@iconify/react@5.1.0(react@19.0.0))(clsx@2.1.1)(react-dom@19.0.0(react@19.0.0))(react-hook-form@7.54.2(react@19.0.0))(react@19.0.0)(tailwind-merge@2.6.0)': dependencies: - react-hook-form: 7.54.0(react@19.0.0) + react-hook-form: 7.54.2(react@19.0.0) optionalDependencies: '@iconify/react': 5.1.0(react@19.0.0) clsx: 2.1.1 @@ -6218,8 +6217,6 @@ snapshots: binary-extensions@2.3.0: {} - birecord@0.1.1: {} - brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -6236,7 +6233,7 @@ snapshots: browserslist@4.24.3: dependencies: caniuse-lite: 1.0.30001690 - electron-to-chromium: 1.5.75 + electron-to-chromium: 1.5.76 node-releases: 2.0.19 update-browserslist-db: 1.1.1(browserslist@4.24.3) @@ -6248,7 +6245,7 @@ snapshots: dependencies: run-applescript: 7.0.0 - bundle-require@5.0.0(esbuild@0.24.2): + bundle-require@5.1.0(esbuild@0.24.2): dependencies: esbuild: 0.24.2 load-tsconfig: 0.2.5 @@ -6414,7 +6411,7 @@ snapshots: confbox@0.1.8: {} - consola@3.2.3: {} + consola@3.3.3: {} core-js-compat@3.39.0: dependencies: @@ -6492,7 +6489,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.75: {} + electron-to-chromium@1.5.76: {} emoji-regex-xs@1.0.0: {} @@ -6605,20 +6602,20 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.17.0(jiti@2.4.0)): + eslint-compat-utils@0.5.1(eslint@9.17.0(jiti@2.4.2)): dependencies: - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) semver: 7.6.3 - eslint-compat-utils@0.6.4(eslint@9.17.0(jiti@2.4.0)): + eslint-compat-utils@0.6.4(eslint@9.17.0(jiti@2.4.2)): dependencies: - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) semver: 7.6.3 - eslint-config-flat-gitignore@0.3.0(eslint@9.17.0(jiti@2.4.0)): + eslint-config-flat-gitignore@0.3.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint/compat': 1.2.4(eslint@9.17.0(jiti@2.4.0)) - eslint: 9.17.0(jiti@2.4.0) + '@eslint/compat': 1.2.4(eslint@9.17.0(jiti@2.4.2)) + eslint: 9.17.0(jiti@2.4.2) find-up-simple: 1.0.0 eslint-flat-config-utils@0.4.0: @@ -6633,48 +6630,48 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.7.0(eslint-plugin-import-x@4.6.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.0)): + eslint-import-resolver-typescript@3.7.0(eslint-plugin-import-x@4.6.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0 enhanced-resolve: 5.18.0 - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.3.0 is-glob: 4.0.3 stable-hash: 0.0.4 optionalDependencies: - eslint-plugin-import-x: 4.6.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + eslint-plugin-import-x: 4.6.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) transitivePeerDependencies: - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.17.0(jiti@2.4.0))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.17.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0): dependencies: - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-merge-processors@0.1.0(eslint@9.17.0(jiti@2.4.0)): + eslint-merge-processors@0.1.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) - eslint-plugin-es-x@7.8.0(eslint@9.17.0(jiti@2.4.0)): + eslint-plugin-es-x@7.8.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.0)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - eslint: 9.17.0(jiti@2.4.0) - eslint-compat-utils: 0.5.1(eslint@9.17.0(jiti@2.4.0)) + eslint: 9.17.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.17.0(jiti@2.4.2)) - eslint-plugin-import-x@4.6.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2): + eslint-plugin-import-x@4.6.1(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: '@types/doctrine': 0.0.9 '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) debug: 4.4.0 doctrine: 3.0.0 enhanced-resolve: 5.18.0 - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 get-tsconfig: 4.8.1 is-glob: 4.0.3 @@ -6686,14 +6683,14 @@ snapshots: - supports-color - typescript - eslint-plugin-jsdoc@50.6.1(eslint@9.17.0(jiti@2.4.0)): + eslint-plugin-jsdoc@50.6.1(eslint@9.17.0(jiti@2.4.2)): dependencies: '@es-joy/jsdoccomment': 0.49.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.4.0 escape-string-regexp: 4.0.0 - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) espree: 10.3.0 esquery: 1.6.0 parse-imports: 2.2.1 @@ -6703,12 +6700,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.18.2(eslint@9.17.0(jiti@2.4.0)): + eslint-plugin-jsonc@2.18.2(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.0)) - eslint: 9.17.0(jiti@2.4.0) - eslint-compat-utils: 0.6.4(eslint@9.17.0(jiti@2.4.0)) - eslint-json-compat-utils: 0.2.1(eslint@9.17.0(jiti@2.4.0))(jsonc-eslint-parser@2.4.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) + eslint: 9.17.0(jiti@2.4.2) + eslint-compat-utils: 0.6.4(eslint@9.17.0(jiti@2.4.2)) + eslint-json-compat-utils: 0.2.1(eslint@9.17.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 @@ -6717,42 +6714,42 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-n@17.15.1(eslint@9.17.0(jiti@2.4.0)): + eslint-plugin-n@17.15.1(eslint@9.17.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.0)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) enhanced-resolve: 5.18.0 - eslint: 9.17.0(jiti@2.4.0) - eslint-plugin-es-x: 7.8.0(eslint@9.17.0(jiti@2.4.0)) + eslint: 9.17.0(jiti@2.4.2) + eslint-plugin-es-x: 7.8.0(eslint@9.17.0(jiti@2.4.2)) get-tsconfig: 4.8.1 globals: 15.14.0 ignore: 5.3.2 minimatch: 9.0.5 semver: 7.6.3 - eslint-plugin-perfectionist@4.4.0(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2): + eslint-plugin-perfectionist@4.4.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.0) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-react-debug@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2): + eslint-plugin-react-debug@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@eslint-react/ast': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/core': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/eff': 1.22.1 - '@eslint-react/jsx': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/shared': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/types': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/var': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/ast': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/core': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@eslint-react/jsx': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/shared': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/types': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/var': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.0) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) string-ts: 2.2.0 ts-pattern: 5.6.0 optionalDependencies: @@ -6760,20 +6757,20 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-dom@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2): + eslint-plugin-react-dom@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@eslint-react/ast': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/core': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/eff': 1.22.1 - '@eslint-react/jsx': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/shared': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/types': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/var': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/ast': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/core': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@eslint-react/jsx': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/shared': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/types': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/var': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.18.2 '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) compare-versions: 6.1.1 - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) string-ts: 2.2.0 ts-pattern: 5.6.0 optionalDependencies: @@ -6781,20 +6778,20 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks-extra@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2): + eslint-plugin-react-hooks-extra@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@eslint-react/ast': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/core': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/eff': 1.22.1 - '@eslint-react/jsx': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/shared': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/types': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/var': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/ast': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/core': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@eslint-react/jsx': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/shared': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/types': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/var': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.0) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) string-ts: 2.2.0 ts-pattern: 5.6.0 optionalDependencies: @@ -6802,23 +6799,23 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks@5.1.0(eslint@9.17.0(jiti@2.4.0)): + eslint-plugin-react-hooks@5.1.0(eslint@9.17.0(jiti@2.4.2)): dependencies: - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) - eslint-plugin-react-naming-convention@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2): + eslint-plugin-react-naming-convention@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@eslint-react/ast': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/core': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/eff': 1.22.1 - '@eslint-react/jsx': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/shared': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/types': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/ast': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/core': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@eslint-react/jsx': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/shared': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/types': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.0) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) string-ts: 2.2.0 ts-pattern: 5.6.0 optionalDependencies: @@ -6826,24 +6823,23 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-refresh@0.4.16(eslint@9.17.0(jiti@2.4.0)): + eslint-plugin-react-refresh@0.4.16(eslint@9.17.0(jiti@2.4.2)): dependencies: - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) - eslint-plugin-react-web-api@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2): + eslint-plugin-react-web-api@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@eslint-react/ast': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/core': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/eff': 1.22.1 - '@eslint-react/jsx': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/shared': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/types': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/var': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/ast': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/core': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@eslint-react/jsx': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/shared': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/types': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/var': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.18.2 '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - birecord: 0.1.1 - eslint: 9.17.0(jiti@2.4.0) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) string-ts: 2.2.0 ts-pattern: 5.6.0 optionalDependencies: @@ -6851,22 +6847,22 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-x@1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2): + eslint-plugin-react-x@1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@eslint-react/ast': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/core': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/eff': 1.22.1 - '@eslint-react/jsx': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/shared': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/types': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@eslint-react/var': 1.22.1(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@eslint-react/ast': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/core': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/eff': 1.22.2 + '@eslint-react/jsx': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/shared': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/types': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@eslint-react/var': 1.22.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.18.2 - '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/types': 8.18.2 - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) compare-versions: 6.1.1 - eslint: 9.17.0(jiti@2.4.0) - is-immutable-type: 5.0.0(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) + is-immutable-type: 5.0.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) string-ts: 2.2.0 ts-api-utils: 2.0.0(typescript@5.7.2) ts-pattern: 5.6.0 @@ -6885,24 +6881,24 @@ snapshots: postcss: 8.4.49 tailwindcss: 3.4.17 - eslint-plugin-toml@0.12.0(eslint@9.17.0(jiti@2.4.0)): + eslint-plugin-toml@0.12.0(eslint@9.17.0(jiti@2.4.2)): dependencies: debug: 4.4.0 - eslint: 9.17.0(jiti@2.4.0) - eslint-compat-utils: 0.6.4(eslint@9.17.0(jiti@2.4.0)) + eslint: 9.17.0(jiti@2.4.2) + eslint-compat-utils: 0.6.4(eslint@9.17.0(jiti@2.4.2)) lodash: 4.17.21 toml-eslint-parser: 0.10.0 transitivePeerDependencies: - supports-color - eslint-plugin-unicorn@56.0.1(eslint@9.17.0(jiti@2.4.0)): + eslint-plugin-unicorn@56.0.1(eslint@9.17.0(jiti@2.4.2)): dependencies: '@babel/helper-validator-identifier': 7.25.9 - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.0)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) ci-info: 4.1.0 clean-regexp: 1.0.0 core-js-compat: 3.39.0 - eslint: 9.17.0(jiti@2.4.0) + eslint: 9.17.0(jiti@2.4.2) esquery: 1.6.0 globals: 15.14.0 indent-string: 4.0.0 @@ -6915,11 +6911,11 @@ snapshots: semver: 7.6.3 strip-indent: 3.0.0 - eslint-plugin-yml@1.16.0(eslint@9.17.0(jiti@2.4.0)): + eslint-plugin-yml@1.16.0(eslint@9.17.0(jiti@2.4.2)): dependencies: debug: 4.4.0 - eslint: 9.17.0(jiti@2.4.0) - eslint-compat-utils: 0.6.4(eslint@9.17.0(jiti@2.4.0)) + eslint: 9.17.0(jiti@2.4.2) + eslint-compat-utils: 0.6.4(eslint@9.17.0(jiti@2.4.2)) lodash: 4.17.21 natural-compare: 1.4.0 yaml-eslint-parser: 1.2.3 @@ -6935,9 +6931,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.17.0(jiti@2.4.0): + eslint@9.17.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.0)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.1 '@eslint/core': 0.9.1 @@ -6972,7 +6968,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.4.0 + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -7163,36 +7159,36 @@ snapshots: fsevents@2.3.3: optional: true - fumadocs-core@14.6.2(@types/react@19.0.2)(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + fumadocs-core@14.6.8(@types/react@19.0.2)(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: '@formatjs/intl-localematcher': 0.5.9 '@orama/orama': 2.1.1 - '@shikijs/rehype': 1.24.3 + '@shikijs/rehype': 1.24.4 github-slugger: 2.0.0 hast-util-to-estree: 3.1.0 hast-util-to-jsx-runtime: 2.3.2 - image-size: 1.1.1 + image-size: 1.2.0 negotiator: 1.0.0 react-remove-scroll: 2.6.2(@types/react@19.0.2)(react@19.0.0) remark: 15.0.1 remark-gfm: 4.0.0 scroll-into-view-if-needed: 3.1.0 - shiki: 1.24.3 + shiki: 1.24.4 unist-util-visit: 5.0.0 optionalDependencies: - next: 15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) transitivePeerDependencies: - '@types/react' - supports-color - fumadocs-docgen@1.3.4(typescript@5.6.3): + fumadocs-docgen@1.3.4(typescript@5.7.2): dependencies: estree-util-value-to-estree: 3.2.1 - fumadocs-typescript: 3.0.2(typescript@5.6.3) + fumadocs-typescript: 3.0.2(typescript@5.7.2) hast-util-to-estree: 3.1.0 - npm-to-yarn: 3.0.0 + npm-to-yarn: 3.0.1 oxc-transform: 0.43.0 unist-util-visit: 5.0.0 zod: 3.24.1 @@ -7200,7 +7196,7 @@ snapshots: - supports-color - typescript - fumadocs-mdx@11.1.2(acorn@8.14.0)(fumadocs-core@14.6.2(@types/react@19.0.2)(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)): + fumadocs-mdx@11.2.1(acorn@8.14.0)(fumadocs-core@14.6.8(@types/react@19.0.2)(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)): dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.14.0) chokidar: 4.0.3 @@ -7208,16 +7204,17 @@ snapshots: esbuild: 0.24.2 estree-util-value-to-estree: 3.2.1 fast-glob: 3.3.2 - fumadocs-core: 14.6.2(@types/react@19.0.2)(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + fumadocs-core: 14.6.8(@types/react@19.0.2)(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) gray-matter: 4.0.3 micromatch: 4.0.8 - next: 15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + unist-util-visit: 5.0.0 zod: 3.24.1 transitivePeerDependencies: - acorn - supports-color - fumadocs-typescript@3.0.2(typescript@5.6.3): + fumadocs-typescript@3.0.2(typescript@5.7.2): dependencies: '@types/node': 22.8.1 fast-glob: 3.3.2 @@ -7225,13 +7222,13 @@ snapshots: mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.0.0 mdast-util-to-hast: 13.2.0 - shiki: 1.24.3 + shiki: 1.24.4 ts-morph: 24.0.0 - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - fumadocs-ui@14.6.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.17): + fumadocs-ui@14.6.8(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(tailwindcss@3.4.17): dependencies: '@radix-ui/react-accordion': 1.2.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@radix-ui/react-collapsible': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -7243,15 +7240,15 @@ snapshots: '@radix-ui/react-slot': 1.1.1(@types/react@19.0.2)(react@19.0.0) '@radix-ui/react-tabs': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) class-variance-authority: 0.7.1 - fumadocs-core: 14.6.2(@types/react@19.0.2)(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + fumadocs-core: 14.6.8(@types/react@19.0.2)(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) lodash.merge: 4.6.2 - lucide-react: 0.468.0(react@19.0.0) - next: 15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + lucide-react: 0.469.0(react@19.0.0) + next: 15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) next-themes: 0.4.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) postcss-selector-parser: 7.0.0 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - react-medium-image-zoom: 5.2.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react-medium-image-zoom: 5.2.13(react-dom@19.0.0(react@19.0.0))(react@19.0.0) tailwind-merge: 2.6.0 optionalDependencies: tailwindcss: 3.4.17 @@ -7264,9 +7261,9 @@ snapshots: function-bind@1.1.2: {} - geist@1.3.1(next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)): + geist@1.3.1(next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)): dependencies: - next: 15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + next: 15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) get-caller-file@2.0.5: {} @@ -7422,7 +7419,7 @@ snapshots: ignore@5.3.2: {} - image-size@1.1.1: + image-size@1.2.0: dependencies: queue: 6.0.2 @@ -7498,10 +7495,10 @@ snapshots: is-hexadecimal@2.0.1: {} - is-immutable-type@5.0.0(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2): + is-immutable-type@5.0.0(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.0) + '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) ts-api-utils: 1.4.3(typescript@5.7.2) ts-declaration-location: 1.0.5(typescript@5.7.2) typescript: 5.7.2 @@ -7544,7 +7541,7 @@ snapshots: jiti@1.21.7: {} - jiti@2.4.0: {} + jiti@2.4.2: {} joycon@3.1.1: {} @@ -7660,7 +7657,7 @@ snapshots: lru-cache@10.4.3: {} - lucide-react@0.468.0(react@19.0.0): + lucide-react@0.469.0(react@19.0.0): dependencies: react: 19.0.0 @@ -7695,9 +7692,9 @@ snapshots: decode-named-character-reference: 1.0.2 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.0 - micromark-util-decode-numeric-character-reference: 2.0.1 - micromark-util-decode-string: 2.0.0 + micromark: 4.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 @@ -7820,7 +7817,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.2.1 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -7836,7 +7833,7 @@ snapshots: mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 micromark-util-classify-character: 2.0.1 - micromark-util-decode-string: 2.0.0 + micromark-util-decode-string: 2.0.1 unist-util-visit: 5.0.0 zwitch: 2.0.4 @@ -8043,15 +8040,15 @@ snapshots: micromark-util-chunked: 2.0.1 micromark-util-types: 2.0.1 - micromark-util-decode-numeric-character-reference@2.0.1: + micromark-util-decode-numeric-character-reference@2.0.2: dependencies: micromark-util-symbol: 2.0.1 - micromark-util-decode-string@2.0.0: + micromark-util-decode-string@2.0.1: dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 micromark-util-encode@2.0.1: {} @@ -8094,7 +8091,7 @@ snapshots: micromark-util-types@2.0.1: {} - micromark@4.0.0: + micromark@4.0.1: dependencies: '@types/debug': 4.1.12 debug: 4.4.0 @@ -8105,7 +8102,7 @@ snapshots: micromark-util-character: 2.1.1 micromark-util-chunked: 2.0.1 micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-encode: 2.0.1 micromark-util-normalize-identifier: 2.0.1 micromark-util-resolve-all: 2.0.1 @@ -8178,7 +8175,7 @@ snapshots: nanoid@5.0.9: {} - nanospinner@1.2.0: + nanospinner@1.2.2: dependencies: picocolors: 1.1.1 @@ -8193,9 +8190,9 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - next@15.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + next@15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - '@next/env': 15.1.2 + '@next/env': 15.1.3 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -8205,14 +8202,14 @@ snapshots: react-dom: 19.0.0(react@19.0.0) styled-jsx: 5.1.6(react@19.0.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.1.2 - '@next/swc-darwin-x64': 15.1.2 - '@next/swc-linux-arm64-gnu': 15.1.2 - '@next/swc-linux-arm64-musl': 15.1.2 - '@next/swc-linux-x64-gnu': 15.1.2 - '@next/swc-linux-x64-musl': 15.1.2 - '@next/swc-win32-arm64-msvc': 15.1.2 - '@next/swc-win32-x64-msvc': 15.1.2 + '@next/swc-darwin-arm64': 15.1.3 + '@next/swc-darwin-x64': 15.1.3 + '@next/swc-linux-arm64-gnu': 15.1.3 + '@next/swc-linux-arm64-musl': 15.1.3 + '@next/swc-linux-x64-gnu': 15.1.3 + '@next/swc-linux-x64-musl': 15.1.3 + '@next/swc-win32-arm64-msvc': 15.1.3 + '@next/swc-win32-x64-msvc': 15.1.3 sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' @@ -8255,7 +8252,7 @@ snapshots: dependencies: path-key: 4.0.0 - npm-to-yarn@3.0.0: {} + npm-to-yarn@3.0.1: {} object-assign@4.1.1: {} @@ -8273,11 +8270,11 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-to-es@0.8.0: + oniguruma-to-es@0.8.1: dependencies: emoji-regex-xs: 1.0.0 - regex: 5.0.2 - regex-recursion: 5.0.0 + regex: 5.1.1 + regex-recursion: 5.1.1 open@10.1.0: dependencies: @@ -8448,11 +8445,11 @@ snapshots: optionalDependencies: postcss: 8.4.49 - postcss-load-config@6.0.1(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1): + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 2.4.0 + jiti: 2.4.2 postcss: 8.4.49 tsx: 4.19.2 yaml: 2.6.1 @@ -8543,11 +8540,11 @@ snapshots: react: 19.0.0 scheduler: 0.25.0 - react-hook-form@7.54.0(react@19.0.0): + react-hook-form@7.54.2(react@19.0.0): dependencies: react: 19.0.0 - react-medium-image-zoom@5.2.12(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-medium-image-zoom@5.2.13(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -8643,13 +8640,14 @@ snapshots: regenerator-runtime@0.14.1: {} - regex-recursion@5.0.0: + regex-recursion@5.1.1: dependencies: + regex: 5.1.1 regex-utilities: 2.3.0 regex-utilities@2.3.0: {} - regex@5.0.2: + regex@5.1.1: dependencies: regex-utilities: 2.3.0 @@ -8740,28 +8738,29 @@ snapshots: rfdc@1.4.1: {} - rollup@4.28.0: + rollup@4.29.1: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.28.0 - '@rollup/rollup-android-arm64': 4.28.0 - '@rollup/rollup-darwin-arm64': 4.28.0 - '@rollup/rollup-darwin-x64': 4.28.0 - '@rollup/rollup-freebsd-arm64': 4.28.0 - '@rollup/rollup-freebsd-x64': 4.28.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.28.0 - '@rollup/rollup-linux-arm-musleabihf': 4.28.0 - '@rollup/rollup-linux-arm64-gnu': 4.28.0 - '@rollup/rollup-linux-arm64-musl': 4.28.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.28.0 - '@rollup/rollup-linux-riscv64-gnu': 4.28.0 - '@rollup/rollup-linux-s390x-gnu': 4.28.0 - '@rollup/rollup-linux-x64-gnu': 4.28.0 - '@rollup/rollup-linux-x64-musl': 4.28.0 - '@rollup/rollup-win32-arm64-msvc': 4.28.0 - '@rollup/rollup-win32-ia32-msvc': 4.28.0 - '@rollup/rollup-win32-x64-msvc': 4.28.0 + '@rollup/rollup-android-arm-eabi': 4.29.1 + '@rollup/rollup-android-arm64': 4.29.1 + '@rollup/rollup-darwin-arm64': 4.29.1 + '@rollup/rollup-darwin-x64': 4.29.1 + '@rollup/rollup-freebsd-arm64': 4.29.1 + '@rollup/rollup-freebsd-x64': 4.29.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 + '@rollup/rollup-linux-arm-musleabihf': 4.29.1 + '@rollup/rollup-linux-arm64-gnu': 4.29.1 + '@rollup/rollup-linux-arm64-musl': 4.29.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 + '@rollup/rollup-linux-riscv64-gnu': 4.29.1 + '@rollup/rollup-linux-s390x-gnu': 4.29.1 + '@rollup/rollup-linux-x64-gnu': 4.29.1 + '@rollup/rollup-linux-x64-musl': 4.29.1 + '@rollup/rollup-win32-arm64-msvc': 4.29.1 + '@rollup/rollup-win32-ia32-msvc': 4.29.1 + '@rollup/rollup-win32-x64-msvc': 4.29.1 fsevents: 2.3.3 run-applescript@7.0.0: {} @@ -8834,12 +8833,12 @@ snapshots: shell-quote@1.8.2: {} - shiki@1.24.3: + shiki@1.24.4: dependencies: - '@shikijs/core': 1.24.3 - '@shikijs/engine-javascript': 1.24.3 - '@shikijs/engine-oniguruma': 1.24.3 - '@shikijs/types': 1.24.3 + '@shikijs/core': 1.24.4 + '@shikijs/engine-javascript': 1.24.4 + '@shikijs/engine-oniguruma': 1.24.4 + '@shikijs/types': 1.24.4 '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 @@ -8858,9 +8857,9 @@ snapshots: dependencies: bytes-iec: 3.1.1 chokidar: 4.0.3 - jiti: 2.4.0 + jiti: 2.4.2 lilconfig: 3.1.3 - nanospinner: 1.2.0 + nanospinner: 1.2.2 picocolors: 1.1.1 tinyglobby: 0.2.10 @@ -9070,14 +9069,6 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - terser@5.37.0: - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.14.0 - commander: 2.20.3 - source-map-support: 0.5.21 - optional: true - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -9139,19 +9130,19 @@ snapshots: tslib@2.8.1: {} - tsup@8.3.5(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.6.3)(yaml@2.6.1): + tsup@8.3.5(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(typescript@5.7.2)(yaml@2.6.1): dependencies: - bundle-require: 5.0.0(esbuild@0.24.2) + bundle-require: 5.1.0(esbuild@0.24.2) cac: 6.7.14 chokidar: 4.0.3 - consola: 3.2.3 + consola: 3.3.3 debug: 4.4.0 esbuild: 0.24.2 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.4.0)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1) + postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1) resolve-from: 5.0.0 - rollup: 4.28.0 + rollup: 4.29.1 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 @@ -9159,7 +9150,7 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: postcss: 8.4.49 - typescript: 5.6.3 + typescript: 5.7.2 transitivePeerDependencies: - jiti - supports-color @@ -9183,20 +9174,18 @@ snapshots: type-fest@0.8.1: {} - typescript-eslint@8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2): + typescript-eslint@8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@typescript-eslint/parser': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.2) - eslint: 9.17.0(jiti@2.4.0) + '@typescript-eslint/eslint-plugin': 8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/parser': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.17.0(jiti@2.4.2) typescript: 5.7.2 transitivePeerDependencies: - supports-color typescript@5.6.1-rc: {} - typescript@5.6.3: {} - typescript@5.7.2: {} ufo@1.5.4: {} @@ -9300,16 +9289,16 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite@6.0.6(@types/node@22.10.2)(jiti@2.4.0)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1): + vite@6.0.6(@types/node@22.10.2)(jiti@2.4.2)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1): dependencies: esbuild: 0.24.2 postcss: 8.4.49 - rollup: 4.28.0 + rollup: 4.29.1 optionalDependencies: '@types/node': 22.10.2 fsevents: 2.3.3 - jiti: 2.4.0 - terser: 5.37.0 + jiti: 2.4.2 + terser: 5.36.0 tsx: 4.19.2 yaml: 2.6.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index bdd1ed8..fa88b8b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,5 +4,5 @@ packages: - docs catalog: - typescript: ^5.7.2 + typescript: latest "@zayne-labs/tsconfig": 0.2.1