UNPKG

@morjs/runtime-base

Version:
231 lines (230 loc) 5.78 kB
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 {};