import { ComponentFullType, ComponentTypeInfo, ComponentMainType, ComponentSubType } from './types.js';
|
declare const IS_EXTENDED_CLASS: "___EC__EXTENDED_CLASS___";
|
/**
|
* Notice, parseClassType('') should returns {main: '', sub: ''}
|
* @public
|
*/
|
export declare function parseClassType(componentType: ComponentFullType): ComponentTypeInfo;
|
export declare function isExtendedClass(clz: any): boolean;
|
export interface ExtendableConstructor {
|
new (...args: any): any;
|
$constructor?: new (...args: any) => any;
|
extend: (proto: {
|
[name: string]: any;
|
}) => ExtendableConstructor;
|
superCall: (context: any, methodName: string, ...args: any) => any;
|
superApply: (context: any, methodName: string, args: []) => any;
|
superClass?: ExtendableConstructor;
|
[IS_EXTENDED_CLASS]?: boolean;
|
}
|
/**
|
* Implements `ExtendableConstructor` for `rootClz`.
|
*
|
* @usage
|
* ```ts
|
* class Xxx {}
|
* type XxxConstructor = typeof Xxx & ExtendableConstructor
|
* enableClassExtend(Xxx as XxxConstructor);
|
* ```
|
*/
|
export declare function enableClassExtend(rootClz: ExtendableConstructor, mandatoryMethods?: string[]): void;
|
/**
|
* A work around to both support ts extend and this extend mechanism.
|
* on sub-class.
|
* @usage
|
* ```ts
|
* class Component { ... }
|
* classUtil.enableClassExtend(Component);
|
* classUtil.enableClassManagement(Component, {registerWhenExtend: true});
|
*
|
* class Series extends Component { ... }
|
* // Without calling `markExtend`, `registerWhenExtend` will not work.
|
* Component.markExtend(Series);
|
* ```
|
*/
|
export declare function mountExtend(SubClz: any, SupperClz: any): void;
|
export interface CheckableConstructor {
|
new (...args: any): any;
|
isInstance: (ins: any) => boolean;
|
}
|
/**
|
* Implements `CheckableConstructor` for `target`.
|
* Can not use instanceof, consider different scope by
|
* cross domain or es module import in ec extensions.
|
* Mount a method "isInstance()" to Clz.
|
*
|
* @usage
|
* ```ts
|
* class Xxx {}
|
* type XxxConstructor = typeof Xxx & CheckableConstructor;
|
* enableClassCheck(Xxx as XxxConstructor)
|
* ```
|
*/
|
export declare function enableClassCheck(target: CheckableConstructor): void;
|
export declare type Constructor = new (...args: any) => any;
|
export interface ClassManager {
|
registerClass: (clz: Constructor) => Constructor;
|
getClass: (componentMainType: ComponentMainType, subType?: ComponentSubType, throwWhenNotFound?: boolean) => Constructor;
|
getClassesByMainType: (componentType: ComponentMainType) => Constructor[];
|
hasClass: (componentType: ComponentFullType) => boolean;
|
getAllClassMainTypes: () => ComponentMainType[];
|
hasSubTypes: (componentType: ComponentFullType) => boolean;
|
}
|
/**
|
* Implements `ClassManager` for `target`
|
*
|
* @usage
|
* ```ts
|
* class Xxx {}
|
* type XxxConstructor = typeof Xxx & ClassManager
|
* enableClassManagement(Xxx as XxxConstructor);
|
* ```
|
*/
|
export declare function enableClassManagement(target: ClassManager): void;
|
export {};
|