import { RouteIds } from './routeInfo.js'; import { AnyRouter } from './router.js'; export type NoInfer = [T][T extends any ? 0 : never]; export type IsAny = 1 extends 0 & TValue ? TYesResult : TNoResult; export type PickAsRequired = Omit & Required>; export type PickRequired = { [K in keyof T as undefined extends T[K] ? never : K]: T[K]; }; export type PickOptional = { [K in keyof T as undefined extends T[K] ? K : never]: T[K]; }; export type WithoutEmpty = T extends any ? ({} extends T ? never : T) : never; export type Expand = T extends object ? T extends infer O ? O extends Function ? O : { [K in keyof O]: O[K]; } : never : T; export type DeepPartial = T extends object ? { [P in keyof T]?: DeepPartial; } : T; export type MakeDifferenceOptional = Omit & { [K in keyof TLeft & keyof TRight]?: TRight[K]; }; export type IsUnion = (T extends any ? (U extends T ? false : true) : never) extends false ? false : true; export type IsNonEmptyObject = T extends object ? keyof T extends never ? false : true : false; export type Assign = TLeft extends any ? TRight extends any ? IsNonEmptyObject extends false ? TRight : IsNonEmptyObject extends false ? TLeft : keyof TLeft & keyof TRight extends never ? TLeft & TRight : Omit & TRight : never : never; export type IntersectAssign = TLeft extends any ? TRight extends any ? IsNonEmptyObject extends false ? TRight : IsNonEmptyObject extends false ? TLeft : TRight & TLeft : never : never; export type Timeout = ReturnType; export type Updater = TResult | ((prev?: TPrevious) => TResult); export type NonNullableUpdater = TResult | ((prev: TPrevious) => TResult); export type ExtractObjects = TUnion extends MergeAllPrimitive ? never : TUnion; export type PartialMergeAllObject = ExtractObjects extends infer TObj ? [TObj] extends [never] ? never : { [TKey in TObj extends any ? keyof TObj : never]?: TObj extends any ? TKey extends keyof TObj ? TObj[TKey] : never : never; } : never; export type MergeAllPrimitive = ReadonlyArray | number | string | bigint | boolean | symbol | undefined | null; export type ExtractPrimitives = TUnion extends MergeAllPrimitive ? TUnion : TUnion extends object ? never : TUnion; export type PartialMergeAll = ExtractPrimitives | PartialMergeAllObject; export type Constrain = (T extends TConstraint ? T : never) | TDefault; export type ConstrainLiteral = (T & TConstraint) | TDefault; /** * To be added to router types */ export type UnionToIntersection = (T extends any ? (arg: T) => any : never) extends (arg: infer T) => any ? T : never; /** * Merges everything in a union into one object. * This mapped type is homomorphic which means it preserves stuff! :) */ export type MergeAllObjects>> = [keyof TIntersected] extends [never] ? never : { [TKey in keyof TIntersected]: TUnion extends any ? TUnion[TKey & keyof TUnion] : never; }; export type MergeAll = MergeAllObjects | ExtractPrimitives; export type ValidateJSON = ((...args: Array) => any) extends T ? unknown extends T ? never : 'Function is not serializable' : { [K in keyof T]: ValidateJSON; }; export declare function last(arr: Array): T | undefined; export declare function functionalUpdate(updater: Updater | NonNullableUpdater, previous: TPrevious): TResult; export declare function pick(parent: TValue, keys: Array): Pick; /** * This function returns `prev` if `_next` is deeply equal. * If not, it will replace any deeply equal children of `b` with those of `a`. * This can be used for structural sharing between immutable JSON values for example. * Do not use this with signals */ export declare function replaceEqualDeep(prev: any, _next: T): T; export declare function isPlainObject(o: any): boolean; export declare function isPlainArray(value: unknown): value is Array; export declare function deepEqual(a: any, b: any, opts?: { partial?: boolean; ignoreUndefined?: boolean; }): boolean; export type StringLiteral = T extends string ? string extends T ? string : T : never; export type ThrowOrOptional = TThrow extends true ? T : T | undefined; export type StrictOrFrom = TStrict extends false ? { from?: never; strict: TStrict; } : { from: ConstrainLiteral>; strict?: TStrict; }; export type ThrowConstraint = TStrict extends false ? (TThrow extends true ? never : TThrow) : TThrow; export type ControlledPromise = Promise & { resolve: (value: T) => void; reject: (value: any) => void; status: 'pending' | 'resolved' | 'rejected'; value?: T; }; export declare function createControlledPromise(onResolve?: (value: T) => void): ControlledPromise; /** * * @deprecated use `jsesc` instead */ export declare function escapeJSON(jsonString: string): string; export declare function shallow(objA: T, objB: T): boolean; /** * Checks if a string contains URI-encoded special characters (e.g., %3F, %20). * * @param {string} inputString The string to check. * @returns {boolean} True if the string contains URI-encoded characters, false otherwise. * @example * ```typescript * const str1 = "foo%3Fbar"; * const hasEncodedChars = hasUriEncodedChars(str1); // returns true * ``` */ export declare function hasUriEncodedChars(inputString: string): boolean;