import type { Component, mount } from "svelte"; export type RequiredAndPartial = Pick & Partial>; export type ExpandRecursively = T extends object ? T extends infer O ? { [K in keyof O]: ExpandRecursively; } : never : T; export type AnyComponent = Component; export type ConstrainedComponent = Record, Exports extends Record = Record, Bindings extends "" | keyof Props = "" | keyof Props> = Component; type v4ComponentExportsInternalKeys = "$on" | "$set"; type v4ComponentPropsInternalKeys = "$$slots" | "$$events"; export type ComponentExports = TComponent extends Component ? Omit : never; export type ComponentProps = TComponent extends Component ? Omit | v4ComponentPropsInternalKeys> : never; export type OmitNever = { [K in keyof T as T[K] extends never ? never : K]: T[K]; }; export type RecursivePartial = { [P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial[] : T[P] extends object | undefined ? RecursivePartial : T[P]; }; export type RecordLike = { [index: string]: any; }; type Subtract = N extends M ? 0 : N; type DefaultPathDepth = 1; /** * Takes an object type T and produces a union of all possible * key-path tuples leading down to nested properties, up to a maximum depth. * * @template T - The object type to create paths for * @template Depth - The maximum depth to recurse (default: 2) */ export type Path = [ Depth ] extends [never] ? never : Depth extends 0 ? never : T extends object ? { [K in keyof T]: [K] | [K, ...Path>]; }[keyof T] : []; /** * Given a type T and a path tuple P, returns the type * you'd get if you looked up T along that path. * * For example, if T = { a: { b: string } } * PathValue = { b: string } * PathValue = string */ export type ValueAtPath = P extends [infer K, ...infer Rest] ? K extends keyof T ? Rest extends [] ? T[K] : ValueAtPath : never : T; export type Mounted = any, Exports extends Record = any> = ReturnType>; export type AsNonReadonly = { -readonly [K in keyof T]: T[K]; }; export {};