UNPKG

@yandex/ymaps3-types

Version:

Types for ymaps3 maps library

51 lines (50 loc) 3.25 kB
import type TVue from "@vue/runtime-core"; import type { Context, EntityConstructor, EntityProps, GenericEntity } from "../../imperative/Entities"; import type { optionsKeyVuefy, overrideKeyVuefy } from "../../imperative/wrappers"; export type BaseModule = Record<string | symbol, unknown>; export type DefaultEntity = GenericEntity<unknown>; export type DefaultContext = Context<unknown>; export type DefaultCtor = EntityConstructor<DefaultEntity>; export type PropsFromCtor<TCtor extends DefaultCtor> = EntityProps<InstanceType<TCtor>>; export type VuefyPropsModule<TModule extends BaseModule> = { [Key in keyof TModule]: TModule[Key] extends GenericEntity<infer Props> ? VuefyPropsObject<Props> | VuefyPropsArray<Props> : unknown; }; export type VuefyPropsObject<RawProps> = { [K in keyof RawProps]-?: TVue.PropType<RawProps[K]> | TVue.Prop<RawProps[K]>; }; export type VuefyPropsNullObject<RawProps> = { [K in keyof RawProps]-?: null; }; export type VuefyPropsArray<RawProps> = Array<keyof RawProps>; export type Vuefy = { module: VuefyModuleFn; entity: VuefyEntityFn; }; export interface VuefyModuleFn { <TModule extends BaseModule = BaseModule>(module: TModule, props?: VuefyPropsModule<TModule>): VuefiedModule<TModule>; } export type VuefyEntityFn = <TCtor extends DefaultCtor, TProps = PropsFromCtor<TCtor>>(...args: Parameters<VuefyEntityFnGen<TCtor, TProps>>) => ReturnType<VuefyEntityFnGen<TCtor, TProps>>; export type VuefyEntityFnGen<TCtor extends DefaultCtor, TProps = PropsFromCtor<TCtor>> = (ctor: TCtor, props?: VuefyPropsObject<TProps> | VuefyPropsArray<TProps>, displayName?: string) => TVue.Component<TProps>; export type VuefyContextFn = <TContext extends DefaultContext>(context?: TContext) => symbol; export type InternalVuefyEntityFn = <TCtor extends DefaultCtor, TProps = PropsFromCtor<TCtor>>(...args: Parameters<InternalVuefyEntityFnGen<TCtor, TProps>>) => ReturnType<InternalVuefyEntityFnGen<TCtor, TProps>>; export type InternalVuefyEntityFnGen<TCtor extends DefaultCtor, TProps = PropsFromCtor<TCtor>> = (ctor: TCtor, props: VuefyPropsObject<TProps>, displayName: string) => TVue.Component<TProps>; export type VuefiedModule<TModule extends BaseModule> = { [Property in keyof TModule]: TModule[Property] extends DefaultCtor ? ReturnType<VuefyEntityFnGen<TModule[Property]>> : TModule[Property] extends typeof Context ? ReturnType<VuefyContextFn> : TModule[Property]; }; export type Overrided<TCtor extends DefaultCtor, TVueProps> = { [overrideKeyVuefy]: CustomVuefyFn<InstanceType<TCtor>, TVueProps>; }; export type Options<TCtor extends DefaultCtor, TVueProps> = { [optionsKeyVuefy]: CustomVuefyOptions<InstanceType<TCtor>, TVueProps>; }; export type CustomVuefyFn<TEntity extends DefaultEntity, TExternalProps = EntityProps<TEntity>> = (ctor: EntityConstructor<TEntity>, props: VuefyPropsObject<TExternalProps>, params: { vuefy: { module: VuefyModuleFn; entity: VuefyEntityFn; context: VuefyContextFn; }; Vue: typeof TVue; }) => TVue.Component<TExternalProps>; export type CustomVuefyOptions<TEntity extends DefaultEntity, TExternalProps = EntityProps<TEntity>> = { props: VuefyPropsObject<TExternalProps> | VuefyPropsArray<TExternalProps>; };