@morjs/runtime-base
Version:
mor runtime base
231 lines (230 loc) • 5.78 kB
TypeScript
declare type AnyFunc = (...args: any[]) => any;
declare enum HookInvokeState {
pausing = "pausing",
resuming = "resuming"
}
interface HookSharedState {
state: HookInvokeState;
stack: [string, Tap, any, any[]][];
hooksNameList: MorHookNames[];
}
interface Tap {
name: string;
type: 'sync' | 'async';
stage: number;
fn: AnyFunc;
}
/**
* 同步 Hook
*/
export declare class SyncHook {
name: string;
taps: Tap[];
sharedState: HookSharedState;
/**
* @constructor
* @param name - Hook 名称
*/
constructor(name: string, sharedState?: HookSharedState);
/**
* 返回 hook 是否已被使用
*/
isUsed(): boolean;
/**
* 创建 hook alias
* @param name Hook 名称
*/
alias(name: string): SyncHook;
/**
* 添加 hook 插件
* @param nameOrOptions 名称或选项
* @param fn 函数
*/
tap<T extends AnyFunc>(nameOrOptions: string | {
name: string;
stage: number;
}, fn: T): void;
/**
* 执行 hook
* @param context 上下文
* @param args 参数列表
*/
call<T = any>(context: T, ...args: any[]): void;
isPausing(): boolean;
}
/**
* 生命周期 Hook 列表
*/
export interface MorHooks {
/**
* 在应用初始化前执行,请注意不要进行长时间耗时的任务
*/
appOnConstruct: SyncHook;
/**
* appOnConstruct hook 的别名
* @deprecated 已废弃, 请直接使用 appOnConstruct
*/
appOnInit: SyncHook;
/**
* 在 App 的 onLaunch 生命周期触发
* 建议一般组件在这个生命周期执行初始化
*/
appOnLaunch: SyncHook;
/**
* 在 App 的 onError 生命周期触发
*/
appOnError: SyncHook;
/**
* 在 App 的 onShow 生命周期触发
*/
appOnShow: SyncHook;
/**
* 在 App 的 onHide 生命周期触发
*/
appOnHide: SyncHook;
/**
* 在 App 的 onPageNotFound 被调用时触发
*/
appOnPageNotFound: SyncHook;
/**
* 在 App 的 onUnhandledRejection 被调用时触发
*/
appOnUnhandledRejection: SyncHook;
/**
* 在页面初始化前执行,请注意这个生命周期会在应用启动后就立刻执行
* 并不是等用户切换到对应的页面才会执行
*/
pageOnConstruct: SyncHook;
/**
* pageOnConstruct hook 的别名
* @deprecated 已废弃, 请直接使用 pageOnConstruct
*/
pageOnInit: SyncHook;
/**
* 在 Page 的 onLoad 生命周期触发
*/
pageOnLoad: SyncHook;
/**
* 在 Page 的 onReady 生命周期触发
*/
pageOnReady: SyncHook;
/**
* 在 Page 的 onShow 生命周期触发
*/
pageOnShow: SyncHook;
/**
* 在 Page 的 onHide 生命周期触发
*/
pageOnHide: SyncHook;
/**
* 在 Page 的 onUnload 生命周期触发
*/
pageOnUnload: SyncHook;
/**
* 在 Component 创建前触发(组件注册的阶段)
*/
componentOnConstruct: SyncHook;
/**
* 在 Component 的 onInit 生命周期触发
*/
componentOnInit: SyncHook;
/**
* 在 Component 的 created 生命周期触发
*/
componentOnCreated: SyncHook;
/**
* 在 Component 的 didMount 生命周期触发
*/
componentDidMount: SyncHook;
/**
* 在 Component 的 attached 生命周期触发
*/
componentOnAttached: SyncHook;
/**
* 在 Component 的 didUnmount 生命周期触发
*/
componentDidUnmount: SyncHook;
/**
* 在 Component 的 detached 生命周期触发
*/
componentOnDetached: SyncHook;
/**
* 在 Component 的 onError 生命周期触发
*/
componentOnError: SyncHook;
/**
* 暂停所有或部分 hooks 的执行并将相关 hooks 的触发保存在堆栈中
* @param hooksNameList - 需要暂停的 hook 名称,如未传入则代表暂停所有
*/
pause: (hooksNameList?: MorHookNames[]) => void;
/**
* 恢复 hooks 的执行,并将之前保存在堆栈中的 hooks 按顺序依次触发
*/
resume: () => void;
}
export declare type MorHookNames = keyof Omit<MorHooks, 'pause' | 'resume'>;
declare type Reason = string;
/**
* 创建 hooks 对象
* @param reason Hooks 创建原因
* @returns hooks 对象
*/
export declare function createHooks(reason: Reason): MorHooks;
/**
* 获取所有 hooks
*/
export declare function getAllHooks(): Record<string, {
createdAt: number;
hooks: MorHooks;
}[]>;
/**
* 获取全局共享属性,用于作为原子化的兜底实现
* 1. 首先查找上下文中的属性
* 2. 如果不存在,则查找 getApp 中的
* 3. 如果不存在,则查找 小程序环境的 globalObject, 如 my 中是否存在
*/
export declare const hooks: MorHooks;
/**
* Mor 插件
*/
export interface MorPlugin {
/**
* 插件名称
*/
pluginName: string;
/**
* 插件应用方法
*/
apply: (hooks: MorHooks) => void;
}
/**
* Mor Solution 插件集合
*/
export interface MorSolution {
(): {
plugins: MorPlugin[];
};
}
/**
* Mor Solution 工厂函数
*/
export interface MorSolutionFactory {
/**
* @param options 选项
* @returns Mor Solution 插件集合
*/
(options?: Record<string, any>): MorSolution;
}
/**
* 应用插件
* @param hooks Hooks
* @param plugins 插件列表
*/
export declare function applyPlugins(hooks: MorHooks, plugins: MorPlugin[]): string[];
/**
* 应用 Solutions
* @param hooks Hooks
* @param solutions 插件集列表
*/
export declare function applySolutions(hooks: MorHooks, solution: MorSolution[] | MorSolution): string[];
export {};