UNPKG

@cfcs/angular

Version:

Write once, create framework components that supports React, Vue, Svelte, and more.

24 lines (23 loc) 2.31 kB
/** * cfcs * Copyright (c) 2022-present NAVER Corp. * MIT license */ import { EventEmitter } from "@angular/core"; import { ReactiveAdapterParam, ReactiveEventParameters, ReactiveState, ReactiveSubscribe } from "@cfcs/core"; declare type WithPrefix<Prefix extends string, Name extends string> = Prefix extends "" ? Name : `${Prefix}${Capitalize<Name>}`; export declare type AngularEventsOutputs<Events extends readonly any[], PropertyPrefix extends string = "", EventPrefix extends string = ""> = Events extends readonly [infer Name, ...infer Args] ? [`${WithPrefix<PropertyPrefix, string & Name>}: ${WithPrefix<EventPrefix, string & Name>}`, ...AngularEventsOutputs<Args, PropertyPrefix, EventPrefix>] : []; export declare type AngularBindingProperties<Events extends Record<string, any>, PropertyPrefix extends string = ""> = { [Key in keyof Events as WithPrefix<PropertyPrefix, string & Key>]: Events[Key]; }; export declare type ReactiveEvents<Events extends Record<string, any>> = { [Key in keyof Events]: EventEmitter<ReactiveEventParameters<Events, Key & string>[0]>; }; export declare type ReactiveResult<Instance extends ReactiveSubscribe<Record<string, any>>, State extends Record<string, any> = ReactiveState<Instance>, Methods extends keyof Partial<Instance> = any, Events extends Record<string, any> = {}> = State & { [key in Methods]: Instance[key]; } & ReactiveEvents<Events>; export declare type ReactiveAdapterResult<Adapter extends ReactiveAdapterParam<any, any, any, any, any>, PropertyPrefix extends string = ""> = Adapter extends ReactiveAdapterParam<infer Instance, infer State, infer Methods, any, infer Events> ? ReactiveResult<Instance, State, Methods, AngularBindingProperties<Events, PropertyPrefix>> : {}; export declare type AngularReactiveEvents<Events extends Record<string, any>> = ReactiveEvents<Events>; export declare type AngularReactiveResult<Instance extends ReactiveSubscribe<Record<string, any>>, State extends Record<string, any> = ReactiveState<Instance>, Methods extends keyof Partial<Instance> = any, Events extends Record<string, any> = {}> = ReactiveResult<Instance, State, Methods, Events>; export declare type AngularReactiveAdapterResult<Adapter extends ReactiveAdapterParam<any, any, any, any, any>> = ReactiveAdapterResult<Adapter>; export {};