@yandex/ymaps3-types
Version:
Types for ymaps3 maps library
51 lines (50 loc) • 3.25 kB
TypeScript
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>;
};