@cfcs/angular
Version:
Write once, create framework components that supports React, Vue, Svelte, and more.
24 lines (23 loc) • 2.31 kB
TypeScript
/**
* 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 {};