@lithiumjs/angular
Version:
Reactive components made easy. Lithium provides utilities that enable seamless reactive state and event interactions for Angular components.
481 lines (461 loc) • 28.9 kB
TypeScript
import { Subject, Observable, Subscription, Subscriber, TeardownLogic, BehaviorSubject, ReplaySubject, SchedulerLike } from 'rxjs';
import { ChangeDetectorRef, Type, FactoryProvider, Injector, EventEmitter } from '@angular/core';
type StringKey<T> = (keyof T & string);
type IfEquals<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;
type IfReadonly<T, K extends keyof T> = IfEquals<{
[P in K]: T[P];
}, {
readonly [P in K]: T[P];
}>;
type Publicize<T extends Record<string, any>, K extends string> = Omit<T, K> & Record<K, T[K]>;
type Constructable<T, Ctor = (...args: any[]) => T> = {
constructor: Ctor;
};
type ImmutableMap<M extends Map<unknown, unknown>> = Omit<M, "set" | "clear" | "delete">;
declare namespace _LangUtils {
function isNil(value: any): value is null | undefined;
}
type AsyncSourceKey<T, K extends StringKey<T> = StringKey<T>> = `${K}$`;
type ValidAsyncSourceKey<T, K extends StringKey<T> = StringKey<T>> = AsyncSourceKey<T, K> & StringKey<T>;
declare namespace ComponentStateMetadata {
interface ManagedProperty<T, K extends StringKey<T> = StringKey<T>> {
key: K;
publicKey?: StringKey<T>;
asyncSource?: ValidAsyncSourceKey<T>;
}
type ManagedPropertyList<T> = ManagedProperty<T>[];
const MANAGED_PROPERTY_LIST_KEY = "MANAGED_PROPERTY_LIST_KEY";
function GetOwnManagedPropertyList<T>(target: Object): ManagedPropertyList<T>;
function GetInheritedManagedPropertyList<T>(target: Object): ManagedPropertyList<T>;
function SetManagedPropertyList<T>(target: Object, list: ManagedPropertyList<T>): void;
function AddManagedProperty<T>(target: Object, property: ManagedProperty<T>): void;
}
declare function asyncStateKey<ComponentT, K extends StringKey<ComponentT> = StringKey<ComponentT>>(key: K): AsyncSourceKey<ComponentT, K>;
declare namespace CommonMetadata {
const MANAGED_ONDESTROY_KEY = "__LI__MANAGED__ONDESTROY__";
const MANAGED_INSTANCE_DESTROYED_KEY = "__LI__MANAGED__INSTANCE__DESTROYED__";
function instanceIsDestroyed(componentInstance: any): boolean;
}
/** @deprecated */
type EmitterType = string;
/** @deprecated */
declare namespace EmitterMetadata {
const BOOTSTRAPPED_KEY = "$$STATEEMITTER_BOOTSTRAPPED";
type ProxyMode = keyof {
None: any;
From: any;
Alias: any;
Merge: any;
};
namespace ProxyMode {
const None: ProxyMode;
const From: ProxyMode;
const Alias: ProxyMode;
const Merge: ProxyMode;
}
interface SubjectInfo extends SubjectInfo.CoreDetails {
propertyKey: string | symbol;
observable: Subject<any> | Observable<any>;
}
namespace SubjectInfo {
interface CoreDetails {
initial?: () => any;
initialValue?: any;
readOnly?: boolean;
writeOnly?: boolean;
proxyMode?: ProxyMode;
proxyPath?: string;
proxyMergeUpdates?: boolean;
unmanaged?: boolean;
}
interface WithDynamicAlias extends SubjectInfo {
observable: Observable<any>;
}
interface WithStaticAlias extends SubjectInfo {
observable: Subject<any>;
}
function IsDynamicAlias(subjectInfo: SubjectInfo): subjectInfo is SubjectInfo.WithDynamicAlias;
function IsStaticAlias(subjectInfo: SubjectInfo): subjectInfo is SubjectInfo.WithStaticAlias;
function IsSelfProxy(subjectInfo: SubjectInfo): boolean;
}
type MetadataMap = Map<EmitterType, SubjectInfo>;
const EmitterMapSymbol: unique symbol;
/** @description Gets the metadata map object for the given target class (or its inheritted classes). */
function GetMetadataMap(target: Object): MetadataMap;
/** @description Gets the metadata map object for the given target class. */
function GetOwnMetadataMap(target: Object): MetadataMap;
function HasOwnMetadataMap(target: Object): boolean;
function SetMetadataMap(target: Object, map: MetadataMap): void;
/** @description Copy all metadata from the source map to the target map.
*
* Note: This mutates the target map.
**/
function CopyMetadata(target: MetadataMap, source: MetadataMap, overwrite?: boolean): MetadataMap;
/** @description Merge own and inheritted metadata into a single map.
*
* Note: This mutates the object's metadata.
**/
function CopyInherittedMetadata(object: any): MetadataMap;
}
type EventType = string;
declare namespace EventMetadata {
const SUBJECT_TABLE_MERGED_KEY = "$$EVENTSOURCE_SUBJECT_TABLE_MERGED";
const BOOTSTRAPPED_KEY = "$$EVENTSOURCE_BOOTSTRAPPED";
const LIFECYCLE_REGISTRATION_KEY = "$$EVENTSOURCE_LIFECYCLE_REGISTRATION";
interface ConfigOptions {
eventType: EventType;
skipMethodCheck?: boolean;
unmanaged?: boolean;
}
interface SubjectInfo extends ConfigOptions {
subject: Subject<any>;
}
type PropertySubjectMap = Map<string | symbol, SubjectInfo>;
type EventSubjectTable = Map<EventType, PropertySubjectMap>;
type InstanceBootstrapMap = Map<EventType, boolean>;
type LifecycleRegistrationMap = Map<EventType, boolean>;
type LifecycleCallbackMap = Map<EventType, Array<(...args: any[]) => void>>;
/** @description Gets the metadata map object for the given target class (or its inheritted classes). */
function GetEventSubjectTable(target: Object): EventSubjectTable;
/** @description Gets the metadata map object for the given target class. */
function GetOwnEventSubjectTable(target: Object): EventSubjectTable;
function GetInstanceBootstrapMap(target: Object): InstanceBootstrapMap;
function GetOwnLifecycleRegistrationMap(target: Object): LifecycleRegistrationMap;
/** @description Gets own and inherited lifecycle registration data merged into a single Map. */
function GetLifecycleRegistrationMap(target: Object): ImmutableMap<LifecycleRegistrationMap>;
function GetOwnLifecycleCallbackMap(target: Object): LifecycleCallbackMap;
/** @description Gets own and inherited lifecycle callback data merged into a single Map. */
function GetLifecycleCallbackMap(target: Object): ImmutableMap<LifecycleCallbackMap>;
/**
* @description
* Gets the property subject map for the given event type from the metadata map for the given target class (or its inheritted classes).
*/
function GetPropertySubjectMap(type: EventType, target: Object): PropertySubjectMap;
/**
* @description
* Gets the property subject map for the given event type from the metadata map for the given target class.
*/
function GetOwnPropertySubjectMap(type: EventType, target: Object): PropertySubjectMap;
function GetLifecycleCallbackList(target: Object, type: EventType): ReadonlyArray<(...args: any[]) => void>;
function HasOwnEventSubjectTable(target: Object): boolean;
function SetEventSubjectTable(target: Object, map: EventSubjectTable): void;
function AddLifecycleCallback(target: Object, type: EventType, callback: (...args: any[]) => void): void;
function RemoveLifecycleCallback(target: Object, type: EventType, callback: (...args: any[]) => void): void;
/**
* @description Copy all metadata from the source map to the target map.
*
* Note: This mutates the target map.
**/
function CopySubjectTable(target: EventSubjectTable, source: EventSubjectTable, overwrite?: boolean): EventSubjectTable;
/**
* @description Merge own and inheritted metadata into a single map.
*
* Note: This mutates the object's metadata.
**/
function CopyInherittedSubjectTable(object: any): EventSubjectTable;
}
declare namespace Metadata {
type MetadataKey = string | symbol | number;
export function requireMetadata<T>(symbol: MetadataKey, target: any, defaultValue?: T): T;
export function requireOwnMetadata<T>(symbol: MetadataKey, target: any, defaultValue?: T): T;
export function getMetadataMap(target: any): Map<MetadataKey, any>;
export function setMetadata(symbol: MetadataKey, target: any, value: any): void;
export function hasMetadata(symbol: MetadataKey, target: any): boolean;
export function hasOwnMetadata(symbol: MetadataKey, target: any): boolean;
export function getMetadata(symbol: MetadataKey, target: any): any;
export function getOwnMetadata(symbol: MetadataKey | number, target: any): any;
export function getMetadataKeys(target: any): MetadataKey[];
export {};
}
interface Metadata {
}
type ValidateAsyncSource<T, K extends StringKey<T>, Source extends string | undefined = AsyncSourceKey<T, K>> = Source extends StringKey<T> ? (T[Source] extends Observable<T[K]> ? T[Source] : never) : never;
/** @PropertyDecoratorFactory */
declare function AsyncState<Source extends string | undefined = undefined>(asyncSource?: Source): <ComponentT extends Constructable<any, any>, K extends StringKey<ComponentT>>(target: Source extends undefined ? ComponentT : (ValidateAsyncSource<ComponentT, K, Source> extends never ? never : ComponentT), key: Source extends undefined ? (ValidateAsyncSource<ComponentT, K> extends never ? never : K) : K) => void;
declare namespace AutoPush {
type ChangeDetectorLike = Pick<ChangeDetectorRef, "detectChanges" | "markForCheck">;
export interface ChangeDetectorProxy {
doCheck(): void;
}
export namespace ChangeDetectorProxy {
function fromRef(ref: ChangeDetectorLike, options: CdRefOptions): ChangeDetectorProxy;
}
export interface Options {
}
export interface CdRefOptions extends Options {
forceDetectChanges?: boolean;
}
export function changeDetector(component: any): ChangeDetectorProxy | undefined;
export function enable(component: any, changeDetector: ChangeDetectorLike, options?: CdRefOptions): void;
export function enable(component: any, changeDetector: ChangeDetectorProxy, options?: Options): void;
export function notifyChanges(component: any): void;
export function isChangeDetectorLike(object: any): object is ChangeDetectorLike;
export {};
}
/** @deprecated */
declare function TemplateDynamic(): new (...args: any[]) => {
[K in keyof any]: any[K];
};
declare const LiComponent_base: new (...args: any[]) => { [K in keyof any]: any[K]; };
/** @deprecated */
declare abstract class LiComponent extends LiComponent_base {
}
declare const COMPONENT_STATE_IDENTITY: unique symbol;
type ComponentClassProvider<ComponentT> = Type<ComponentT> | Type<unknown>;
type ManagedComponent = Constructable<any, any> & {
[CommonMetadata.MANAGED_ONDESTROY_KEY]: Observable<void>;
};
declare class ComponentStateRef<ComponentT> extends Promise<ComponentState<ComponentT>> {
componentInstance: ComponentT & ManagedComponent;
/**
* @description Resolves the `ComponentState` instance for this reference.
* @returns An `Observable` that emits the `ComponentState` instance for this reference.
*/
state(): Observable<ComponentState<ComponentT>>;
/**
* @description Returns an `Observable` that represents the current value of the given state property and emits whenever the value of the given state
* property is changed.
* @param stateProp - The state property to observe.
* @returns An `Observable` that emits the value of the given state property and re-emits when the value is changed.
*/
get<K extends StringKey<ComponentT>>(stateProp: ComponentState.ReadableKey<ComponentT, K>): Observable<ComponentT[K]>;
/**
* @description Returns an array of `Observable`s that represents the current value for each given state property. Each `Observable` emits whenever a
* value of the corresponding given state property is changed.
* @param stateProps - The state properties to observe.
* @returns An array of `Observable`s that represents the current value for each given state property and re-emits when the corresponding value is
* changed.
*/
getAll<K extends Array<ComponentState.ReadableKey<ComponentT, StringKey<ComponentT>>>>(...stateProps: K): ComponentState.StateSelector<ComponentT, K>;
/**
* @description Returns an `EventEmitter` that emits whenever the value of the given state property is changed.
* @param stateProp - The state property to observe.
* @returns An `EventEmitter` instance that emits whenever the value of the given state property is changed.
*/
emitter<K extends StringKey<ComponentT>>(stateProp: ComponentState.ReadableKey<ComponentT, K>): EventEmitter<ComponentT[K]>;
/**
* @description Updates the value of the given state property with the given value. Equivalent to assigning to the component state property directly.
* @param stateProp - The state property to update. This property must not be readonly.
* @param value - The new value to update to.
* @returns An `Observable` that emits and completes when the value has been updated.
*/
set<K extends StringKey<ComponentT>, V extends ComponentT[K]>(stateProp: ComponentState.WritableKey<ComponentT, K>, value: V): Observable<void>;
/**
* @description Subscribes the given state property to the given source `Observable`. If `managed` is set to true, the lifetime of the subscription will
* be managed and cleaned up when the component is destroyed.
* @param stateProp - The state property to receive source updates. This property must not be readonly.
* @param source$ - The source `Observable` to subscribe to.
* @param managed - Whether or not the subscription lifetime should be managed. Defaults to `true`.
* @returns A `Subscription` representing the subscription to the source.
*/
subscribeTo<K extends StringKey<ComponentT>, V extends ComponentT[K]>(stateProp: ComponentState.WritableKey<ComponentT, K>, source$: Observable<V>, managed?: boolean): Subscription;
/**
* @description Synchronizes the values of the given state properties such that any changes from one state property will be propagated to the
* other state property. The initial value of the first given state property is used.
* @param statePropA - The first state property to synchronize. This property must not be readonly.
* @param statePropB - The second state property to synchronize. This property must not be readonly.
*/
sync<K1 extends StringKey<ComponentT>, K2 extends StringKey<ComponentT>, V extends IfEquals<ComponentT[K1], ComponentT[K2]> extends true ? ComponentT[K1] & ComponentT[K2] : never>(statePropA: V extends never ? never : ComponentState.WritableKey<ComponentT, K1>, statePropB: V extends never ? never : ComponentState.WritableKey<ComponentT, K2>): void;
/**
* @description Synchronizes the values of the given state property and source `Subject` such that any changes from the state property will be
* propagated to the source `Subject` and vice versa. The initial value of the source `Subject` is used.
* @param stateProp - The state property to synchronize. This property must not be readonly.
* @param source$ - The source `Subject` to synchronize with.
*/
syncWith<K extends StringKey<ComponentT>>(stateProp: ComponentState.WritableKey<ComponentT, K>, source$: Subject<ComponentT[K]>): void;
/**
* @description Synchronizes the state of `stateProp` and `sourceProp`, a property from another `ComponentStateRef`, such that any changes from
* `stateProp` will be propagated to `sourceProp` and vice versa. The initial state value of `sourceProp` is used.
* @param stateProp - The state property to synchronize. This property must not be readonly.
* @param sourceState - The source `ComponentStateRef` instance.
* @param sourceProp - The source state property from `sourceState` to synchronize with. This property must not be readonly.
*/
syncWith<ComponentT2, K1 extends StringKey<ComponentT>, K2 extends StringKey<ComponentT2>, V extends IfEquals<ComponentT[K1], ComponentT2[K2]> extends true ? ComponentT[K1] & ComponentT2[K2] : never>(stateProp: V extends never ? never : ComponentState.WritableKey<ComponentT, K1>, sourceState: ComponentStateRef<ComponentT2>, sourceProp: V extends never ? never : ComponentState.WritableKey<ComponentT2, K2>): void;
private get resolvedState();
}
type ComponentState<ComponentT> = ComponentState.Of<ComponentT>;
declare namespace ComponentState {
export interface CreateOptions {
lazy?: boolean;
}
export type ReactiveStateKey<ComponentT, K extends keyof ComponentT = keyof ComponentT> = K extends string ? AsyncSourceKey<ComponentT, K> : never;
type QualifiedStateKey<ComponentT, K extends keyof ComponentT = keyof ComponentT> = K extends `${infer _K}$` ? never : K;
export type StateKey<ComponentT> = keyof {
[K in keyof ComponentT as QualifiedStateKey<ComponentT, K>]: never;
};
export type Of<ComponentT> = {
readonly [K in keyof ComponentT as ReactiveStateKey<ComponentT, QualifiedStateKey<ComponentT, K>>]-?: IfReadonly<ComponentT, K> extends true ? Observable<ComponentT[K]> : Subject<ComponentT[K]>;
};
export type ReadableKey<ComponentT, K extends keyof ComponentT = keyof ComponentT> = K extends StateKey<ComponentT> ? K : never;
export type WritableKey<ComponentT, K extends keyof ComponentT = keyof ComponentT> = IfReadonly<ComponentT, K> extends true ? never : ReadableKey<ComponentT, K>;
export type StateSelector<ComponentT, K extends Array<ReadableKey<ComponentT>>> = {
[I in keyof K]: K[I] extends ReadableKey<ComponentT> ? Observable<ComponentT[K[I]]> : never;
};
export function create<ComponentT>($class: ComponentClassProvider<ComponentT>, options?: CreateOptions): FactoryProvider;
export function createFactory<ComponentT>($class: ComponentClassProvider<ComponentT>, options?: CreateOptions): (injector: Injector) => ComponentStateRef<ComponentT>;
export function tokenFor(provider: FactoryProvider): any;
export function stateKey<ComponentT, K extends StringKey<ComponentT> = StringKey<ComponentT>>(key: K): ReactiveStateKey<ComponentT, K> & keyof Of<ComponentT>;
export {};
}
declare function createComponentState<ComponentT>($class: ComponentClassProvider<ComponentT>, options?: ComponentState.CreateOptions): FactoryProvider;
declare function stateTokenFor(provider: FactoryProvider): any;
declare function _requireComponentState<T extends {
[COMPONENT_STATE_IDENTITY]?: Partial<ComponentState<T>>;
} & Record<any, any>>(instance: T, initValue?: Partial<ComponentState<T>>): Partial<ComponentState<T>>;
/** @description Ensures that `T[Name]` is the same type as `T[K]`.
* `K` is not required to be a strict `keyof T` since it may be a private field.
*/
type ValidateName<T extends Record<string, any>, K extends string, Name extends string | undefined> = Name extends keyof T ? (IfEquals<T[Name], Publicize<T, K>[K]> extends true ? Name : never) : never;
/** @PropertyDecoratorFactory
* @description Explicitly declares the decorated property as a stateful property to be tracked by `ComponentStateRef`.
* @param publicName (Optional) The public property that this state should be exposed through.
*/
declare function DeclareState<Name extends string | undefined = undefined>(publicName?: Name): <ComponentT extends Constructable<any, any>, K extends string>(target: Name extends undefined ? ComponentT : (ValidateName<ComponentT, K, Name> extends never ? never : ComponentT), propKey: K) => void;
type DirectiveStateRef<DirectiveT> = ComponentStateRef<DirectiveT>;
declare const DirectiveStateRef: typeof ComponentStateRef;
type DirectiveState<DirectiveT> = ComponentState<DirectiveT>;
declare namespace DirectiveState {
type CreateOptions = ComponentState.CreateOptions;
function create<DirectiveT>($class: Type<any>, options?: CreateOptions): FactoryProvider;
function tokenFor(provider: FactoryProvider): any;
}
declare function createDirectiveState<DirectiveT>($class: Type<any>, options?: DirectiveState.CreateOptions): FactoryProvider;
declare function EventSource(): PropertyDecorator;
declare function EventSource(...methodDecorators: MethodDecorator[]): PropertyDecorator;
declare function EventSource(options: EventSource.DecoratorOptions, ...methodDecorators: MethodDecorator[]): PropertyDecorator;
declare namespace EventSource {
type DecoratorOptions = Partial<EventMetadata.ConfigOptions>;
/** @PropertyDecoratorFactory */
function WithParams(options?: DecoratorOptions, ...methodDecorators: MethodDecorator[]): PropertyDecorator;
/**
* @description Registers a lifecycle event handler for use with `registerPreOrderHooks`/`registerPostOrderHooks`
*/
function registerLifecycleEvent(targetClass: Type<any>, eventType: EventType, hookFn: (...args: any[]) => void): void;
function unregisterLifecycleEvent(targetClass: Type<any>, eventType: EventType, hookFn: (...args: any[]) => void): void;
}
declare enum AngularLifecycleType {
OnChanges = "ngOnChanges",
OnInit = "ngOnInit",
OnDestroy = "ngOnDestroy",
DoCheck = "ngDoCheck",
AfterContentInit = "ngAfterContentInit",
AfterContentChecked = "ngAfterContentChecked",
AfterViewInit = "ngAfterViewInit",
AfterViewChecked = "ngAfterViewChecked"
}
declare namespace AngularLifecycleType {
const values: AngularLifecycleType[];
}
declare namespace AngularLifecycleDecorator {
type Factory = (options?: EventSource.DecoratorOptions, ...methodDecorators: MethodDecorator[]) => PropertyDecorator;
/** @PropertyDecoratorMetaFactory */
function Factory(eventType: AngularLifecycleType): Factory;
}
declare function OnChanges(options?: EventSource.DecoratorOptions, ...methodDecorators: MethodDecorator[]): PropertyDecorator;
declare function OnInit(options?: EventSource.DecoratorOptions, ...methodDecorators: MethodDecorator[]): PropertyDecorator;
declare function OnDestroy(options?: EventSource.DecoratorOptions, ...methodDecorators: MethodDecorator[]): PropertyDecorator;
declare function DoCheck(options?: EventSource.DecoratorOptions, ...methodDecorators: MethodDecorator[]): PropertyDecorator;
declare function AfterContentInit(options?: EventSource.DecoratorOptions, ...methodDecorators: MethodDecorator[]): PropertyDecorator;
declare function AfterContentChecked(options?: EventSource.DecoratorOptions, ...methodDecorators: MethodDecorator[]): PropertyDecorator;
declare function AfterViewInit(options?: EventSource.DecoratorOptions, ...methodDecorators: MethodDecorator[]): PropertyDecorator;
declare function AfterViewChecked(options?: EventSource.DecoratorOptions, ...methodDecorators: MethodDecorator[]): PropertyDecorator;
type Constructor<T> = new (...args: any[]) => T;
type GenericConstructor<BaseT> = new <T extends BaseT>(...args: any[]) => T;
type BaseObservable = Observable<unknown>;
declare function ManagedObservableWrapper($class: Constructor<BaseObservable>): GenericConstructor<BaseObservable>;
declare const ManagedObservable_base: GenericConstructor<BaseObservable>;
declare class ManagedObservable<T> extends ManagedObservable_base<Observable<T>> {
constructor(componentInstance: any, subscribe?: (this: Observable<T>, subscriber: Subscriber<T>) => TeardownLogic);
}
declare const ManagedSubject_base: GenericConstructor<BaseObservable>;
declare class ManagedSubject<T> extends ManagedSubject_base<Subject<T>> {
constructor(componentInstance: any);
}
declare const ManagedBehaviorSubject_base: GenericConstructor<BaseObservable>;
declare class ManagedBehaviorSubject<T> extends ManagedBehaviorSubject_base<BehaviorSubject<T>> {
constructor(componentInstance: any, initialValue: T);
}
declare const ManagedReplaySubject_base: GenericConstructor<BaseObservable>;
declare class ManagedReplaySubject<T> extends ManagedReplaySubject_base<ReplaySubject<T>> {
constructor(componentInstance: any, bufferSize?: number, windowTime?: number, scheduler?: SchedulerLike);
}
declare namespace ObservableUtil {
/** @description
* Creates an observable from the given property.
*/
function CreateFromProperty<T>(property: T | Subject<T> | Observable<T>): Observable<T>;
/**
* @param target The target object.
* @param path The target property path.
* @description Creates an observable chain from the given property path.
*
* Note: Any property in the path that isn't an Observable or Subject will implicitly be converted to an Observable.
*/
function CreateFromPropertyPath(target: any, path: string): Observable<any>;
/**
* @param target The target object.
* @param path The target property path.
* @description Checks if the given property path is dynamic.
* A path is considered dynamic or non-static if:
*
* - It contains any Observables, or Subjects that are not the terminal property in the path.
* - It does not terminate with a Subject.
* - It contains optional fields (those that are conditionally evaluated via the `?.` operator).
*/
function IsDynamicPropertyPath(target: any, path: string): boolean;
function ResolvePropertyPath(target: any, path: string): Observable<any>;
function ResolveStaticPropertyPath<T>(target: any, path: string): Subject<T>;
/**
* @param target The target object.
* @param path The target property path.
* @param value The new value of the property.
* @param mergeValue Whether or not the newly emitted value should be merged into the last emitted value.
* @description Traverses the property path for a Subject, and appropriately wraps and emits the given value from the Subject.
*/
function UpdateDynamicPropertyPathValue<T>(target: any, path: string, value: T, mergeValue?: boolean): void;
}
interface ObservableUtil {
}
/** @deprecated */
declare function StateEmitter(): PropertyDecorator;
/** @deprecated */
declare function StateEmitter(...propertyDecorators: PropertyDecorator[]): PropertyDecorator;
/** @deprecated */
declare function StateEmitter(params: StateEmitter.DecoratorParams, ...propertyDecorators: PropertyDecorator[]): PropertyDecorator;
/** @deprecated */
declare namespace StateEmitter {
interface DecoratorParams extends EmitterMetadata.SubjectInfo.CoreDetails {
propertyName?: EmitterType;
}
interface ProxyDecoratorParams {
path: string;
propertyName?: EmitterType;
mergeUpdates?: boolean;
readOnly?: boolean;
writeOnly?: boolean;
unmanaged?: boolean;
}
interface SelfProxyDecoratorParams {
propertyName?: EmitterType;
readOnly?: boolean;
writeOnly?: boolean;
unmanaged?: boolean;
}
/** @PropertyDecoratorFactory */
function WithParams(params?: StateEmitter.DecoratorParams, ...propertyDecorators: PropertyDecorator[]): PropertyDecorator;
function _ResolveProxyDecoratorParams(params: ProxyDecoratorParams | string): ProxyDecoratorParams;
/** @PropertyDecoratorFactory */
function Alias(params: ProxyDecoratorParams | string, ...propertyDecorators: PropertyDecorator[]): PropertyDecorator;
/** @PropertyDecoratorFactory */
function From(params: ProxyDecoratorParams | string, ...propertyDecorators: PropertyDecorator[]): PropertyDecorator;
/** @PropertyDecoratorFactory */
function Merge(params: ProxyDecoratorParams | string, ...propertyDecorators: PropertyDecorator[]): PropertyDecorator;
/** @PropertyDecoratorFactory */
function AliasSelf(params?: SelfProxyDecoratorParams, ...propertyDecorators: PropertyDecorator[]): PropertyDecorator;
/** @PropertyDecoratorFactory */
function FromSelf(params?: SelfProxyDecoratorParams, ...propertyDecorators: PropertyDecorator[]): PropertyDecorator;
/** @PropertyDecoratorFactory */
function MergeSelf(params?: SelfProxyDecoratorParams, ...propertyDecorators: PropertyDecorator[]): PropertyDecorator;
}
export { AfterContentChecked, AfterContentInit, AfterViewChecked, AfterViewInit, AngularLifecycleDecorator, AsyncState, AutoPush, CommonMetadata, ComponentState, ComponentStateMetadata, ComponentStateRef, DeclareState, DirectiveState, DirectiveStateRef, DoCheck, EmitterMetadata, EventMetadata, EventSource, LiComponent, ManagedBehaviorSubject, ManagedObservable, ManagedObservableWrapper, ManagedReplaySubject, ManagedSubject, Metadata, ObservableUtil, OnChanges, OnDestroy, OnInit, StateEmitter, TemplateDynamic, _LangUtils, _requireComponentState, asyncStateKey, createComponentState, createDirectiveState, stateTokenFor };
export type { AsyncSourceKey, BaseObservable, Constructable, Constructor, EmitterType, EventType, GenericConstructor, IfEquals, IfReadonly, ImmutableMap, ManagedComponent, Publicize, StringKey, ValidAsyncSourceKey };