@morjs/runtime-base
Advanced tools
Comparing version 1.0.53 to 1.0.68
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 { | ||
@@ -14,2 +23,3 @@ name: string; | ||
taps: Tap[]; | ||
sharedState?: HookSharedState; | ||
/** | ||
@@ -19,3 +29,3 @@ * @constructor | ||
*/ | ||
constructor(name: any); | ||
constructor(name: string, sharedState?: HookSharedState); | ||
/** | ||
@@ -146,4 +156,6 @@ * 返回 hook 是否已被使用 | ||
componentOnError: SyncHook; | ||
pause: (list?: string[]) => void; | ||
resume: () => void; | ||
} | ||
export declare type MorHookNames = keyof MorHooks; | ||
export declare type MorHookNames = keyof Omit<MorHooks, 'pause' | 'resume'>; | ||
declare type Reason = string; | ||
@@ -150,0 +162,0 @@ /** |
import { __spreadArray } from "tslib"; | ||
import { logger } from './logger'; | ||
import { asArray } from './utils/asArray'; | ||
var HookInvokeState; | ||
(function (HookInvokeState) { | ||
HookInvokeState["pausing"] = "pausing"; | ||
HookInvokeState["resuming"] = "resuming"; | ||
})(HookInvokeState || (HookInvokeState = {})); | ||
/** | ||
@@ -12,5 +17,6 @@ * 同步 Hook | ||
*/ | ||
function SyncHook(name) { | ||
function SyncHook(name, sharedState) { | ||
this.name = name || ''; | ||
this.taps = []; | ||
this.sharedState = sharedState; | ||
} | ||
@@ -28,3 +34,3 @@ /** | ||
SyncHook.prototype.alias = function (name) { | ||
var aliasHook = new SyncHook(name); | ||
var aliasHook = new SyncHook(name, this.sharedState); | ||
// 这里直接使用 taps 数组, 方便 alias Hook 共用 | ||
@@ -68,2 +74,3 @@ aliasHook.taps = this.taps; | ||
var _a; | ||
var _b, _c; | ||
var args = []; | ||
@@ -77,9 +84,20 @@ for (var _i = 1; _i < arguments.length; _i++) { | ||
}); | ||
for (var _b = 0, taps_1 = taps; _b < taps_1.length; _b++) { | ||
var tap = taps_1[_b]; | ||
try { | ||
(_a = tap.fn).call.apply(_a, __spreadArray([context], args, false)); | ||
var state = this.sharedState; | ||
for (var _d = 0, taps_1 = taps; _d < taps_1.length; _d++) { | ||
var tap = taps_1[_d]; | ||
// 当触发了 $hooks.pause 暂停,若未传入需要指定暂停的 hooks 则暂停所有生命周期触发 | ||
// 若传入了某些指定的 hooks 数组,则只暂停这些传入 hooks | ||
if (state && | ||
state.state === HookInvokeState.pausing && | ||
(((_b = state.hooksNameList) === null || _b === void 0 ? void 0 : _b.length) === 0 || | ||
((_c = state.hooksNameList) === null || _c === void 0 ? void 0 : _c.includes(this.name)))) { | ||
this.sharedState.stack.push([this.name, tap, context, args]); | ||
} | ||
catch (err) { | ||
logger.error(this.name, tap.name, err); | ||
else { | ||
try { | ||
(_a = tap.fn).call.apply(_a, __spreadArray([context], args, false)); | ||
} | ||
catch (err) { | ||
logger.error(this.name, tap.name, err); | ||
} | ||
} | ||
@@ -100,8 +118,13 @@ } | ||
export function createHooks(reason) { | ||
var appOnConstruct = new SyncHook('appOnConstruct'); | ||
var pageOnConstructHook = new SyncHook('pageOnConstruct'); | ||
var componentOnInitHook = new SyncHook('componentOnInit'); | ||
var componentDidMountHook = new SyncHook('componentDidMount'); | ||
var componentDidUnmountHook = new SyncHook('componentDidUnmount'); | ||
var componentOnError = new SyncHook('componentOnError'); | ||
var sharedState = { | ||
state: 'resuming', | ||
stack: [], | ||
hooksNameList: [] | ||
}; | ||
var appOnConstruct = new SyncHook('appOnConstruct', sharedState); | ||
var pageOnConstructHook = new SyncHook('pageOnConstruct', sharedState); | ||
var componentOnInitHook = new SyncHook('componentOnInit', sharedState); | ||
var componentDidMountHook = new SyncHook('componentDidMount', sharedState); | ||
var componentDidUnmountHook = new SyncHook('componentDidUnmount', sharedState); | ||
var componentOnError = new SyncHook('componentOnError', sharedState); | ||
var hooks = { | ||
@@ -112,8 +135,8 @@ /* App 相关 hooks */ | ||
appOnInit: appOnConstruct.alias('appOnInit'), | ||
appOnLaunch: new SyncHook('appOnLaunch'), | ||
appOnError: new SyncHook('appOnError'), | ||
appOnShow: new SyncHook('appOnShow'), | ||
appOnHide: new SyncHook('appOnHide'), | ||
appOnPageNotFound: new SyncHook('appOnPageNotFound'), | ||
appOnUnhandledRejection: new SyncHook('appOnUnhandledRejection'), | ||
appOnLaunch: new SyncHook('appOnLaunch', sharedState), | ||
appOnError: new SyncHook('appOnError', sharedState), | ||
appOnShow: new SyncHook('appOnShow', sharedState), | ||
appOnHide: new SyncHook('appOnHide', sharedState), | ||
appOnPageNotFound: new SyncHook('appOnPageNotFound', sharedState), | ||
appOnUnhandledRejection: new SyncHook('appOnUnhandledRejection', sharedState), | ||
/* Page 相关 hooks */ | ||
@@ -123,9 +146,9 @@ pageOnConstruct: pageOnConstructHook, | ||
pageOnInit: pageOnConstructHook.alias('pageOnInit'), | ||
pageOnLoad: new SyncHook('pageOnLoad'), | ||
pageOnReady: new SyncHook('pageOnReady'), | ||
pageOnShow: new SyncHook('pageOnShow'), | ||
pageOnHide: new SyncHook('pageOnHide'), | ||
pageOnUnload: new SyncHook('pageOnUnload'), | ||
pageOnLoad: new SyncHook('pageOnLoad', sharedState), | ||
pageOnReady: new SyncHook('pageOnReady', sharedState), | ||
pageOnShow: new SyncHook('pageOnShow', sharedState), | ||
pageOnHide: new SyncHook('pageOnHide', sharedState), | ||
pageOnUnload: new SyncHook('pageOnUnload', sharedState), | ||
/* Component 相关 hooks */ | ||
componentOnConstruct: new SyncHook('componentOnConstruct'), | ||
componentOnConstruct: new SyncHook('componentOnConstruct', sharedState), | ||
componentOnInit: componentOnInitHook, | ||
@@ -137,3 +160,24 @@ componentOnCreated: componentOnInitHook.alias('componentOnCreated'), | ||
componentOnDetached: componentDidUnmountHook.alias('componentOnDetached'), | ||
componentOnError: componentOnError | ||
componentOnError: componentOnError, | ||
// 暂定某些生命周期暂时不执行,参数为空时暂停所有生命周期 | ||
pause: function (hooksNameList) { | ||
sharedState.state = HookInvokeState.pausing; | ||
sharedState.hooksNameList = hooksNameList || []; | ||
}, | ||
// 恢复所有生命周期,按顺依次执行 | ||
resume: function () { | ||
var _a; | ||
sharedState.state = HookInvokeState.resuming; | ||
var stackItem = sharedState.stack.shift(); | ||
while (stackItem) { | ||
var name_1 = stackItem[0], tap = stackItem[1], context = stackItem[2], args = stackItem[3]; | ||
try { | ||
tap === null || tap === void 0 ? void 0 : (_a = tap.fn).call.apply(_a, __spreadArray([context], args, false)); | ||
} | ||
catch (error) { | ||
logger.error(name_1, tap.name, error); | ||
} | ||
stackItem = sharedState.stack.shift(); | ||
} | ||
} | ||
}; | ||
@@ -140,0 +184,0 @@ // 记录创建的所有 hooks |
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 { | ||
@@ -14,2 +23,3 @@ name: string; | ||
taps: Tap[]; | ||
sharedState?: HookSharedState; | ||
/** | ||
@@ -19,3 +29,3 @@ * @constructor | ||
*/ | ||
constructor(name: any); | ||
constructor(name: string, sharedState?: HookSharedState); | ||
/** | ||
@@ -146,4 +156,6 @@ * 返回 hook 是否已被使用 | ||
componentOnError: SyncHook; | ||
pause: (list?: string[]) => void; | ||
resume: () => void; | ||
} | ||
export declare type MorHookNames = keyof MorHooks; | ||
export declare type MorHookNames = keyof Omit<MorHooks, 'pause' | 'resume'>; | ||
declare type Reason = string; | ||
@@ -150,0 +162,0 @@ /** |
@@ -7,2 +7,7 @@ "use strict"; | ||
var asArray_1 = require("./utils/asArray"); | ||
var HookInvokeState; | ||
(function (HookInvokeState) { | ||
HookInvokeState["pausing"] = "pausing"; | ||
HookInvokeState["resuming"] = "resuming"; | ||
})(HookInvokeState || (HookInvokeState = {})); | ||
/** | ||
@@ -16,5 +21,6 @@ * 同步 Hook | ||
*/ | ||
function SyncHook(name) { | ||
function SyncHook(name, sharedState) { | ||
this.name = name || ''; | ||
this.taps = []; | ||
this.sharedState = sharedState; | ||
} | ||
@@ -32,3 +38,3 @@ /** | ||
SyncHook.prototype.alias = function (name) { | ||
var aliasHook = new SyncHook(name); | ||
var aliasHook = new SyncHook(name, this.sharedState); | ||
// 这里直接使用 taps 数组, 方便 alias Hook 共用 | ||
@@ -72,2 +78,3 @@ aliasHook.taps = this.taps; | ||
var _a; | ||
var _b, _c; | ||
var args = []; | ||
@@ -81,9 +88,20 @@ for (var _i = 1; _i < arguments.length; _i++) { | ||
}); | ||
for (var _b = 0, taps_1 = taps; _b < taps_1.length; _b++) { | ||
var tap = taps_1[_b]; | ||
try { | ||
(_a = tap.fn).call.apply(_a, tslib_1.__spreadArray([context], args, false)); | ||
var state = this.sharedState; | ||
for (var _d = 0, taps_1 = taps; _d < taps_1.length; _d++) { | ||
var tap = taps_1[_d]; | ||
// 当触发了 $hooks.pause 暂停,若未传入需要指定暂停的 hooks 则暂停所有生命周期触发 | ||
// 若传入了某些指定的 hooks 数组,则只暂停这些传入 hooks | ||
if (state && | ||
state.state === HookInvokeState.pausing && | ||
(((_b = state.hooksNameList) === null || _b === void 0 ? void 0 : _b.length) === 0 || | ||
((_c = state.hooksNameList) === null || _c === void 0 ? void 0 : _c.includes(this.name)))) { | ||
this.sharedState.stack.push([this.name, tap, context, args]); | ||
} | ||
catch (err) { | ||
logger_1.logger.error(this.name, tap.name, err); | ||
else { | ||
try { | ||
(_a = tap.fn).call.apply(_a, tslib_1.__spreadArray([context], args, false)); | ||
} | ||
catch (err) { | ||
logger_1.logger.error(this.name, tap.name, err); | ||
} | ||
} | ||
@@ -104,8 +122,13 @@ } | ||
function createHooks(reason) { | ||
var appOnConstruct = new SyncHook('appOnConstruct'); | ||
var pageOnConstructHook = new SyncHook('pageOnConstruct'); | ||
var componentOnInitHook = new SyncHook('componentOnInit'); | ||
var componentDidMountHook = new SyncHook('componentDidMount'); | ||
var componentDidUnmountHook = new SyncHook('componentDidUnmount'); | ||
var componentOnError = new SyncHook('componentOnError'); | ||
var sharedState = { | ||
state: 'resuming', | ||
stack: [], | ||
hooksNameList: [] | ||
}; | ||
var appOnConstruct = new SyncHook('appOnConstruct', sharedState); | ||
var pageOnConstructHook = new SyncHook('pageOnConstruct', sharedState); | ||
var componentOnInitHook = new SyncHook('componentOnInit', sharedState); | ||
var componentDidMountHook = new SyncHook('componentDidMount', sharedState); | ||
var componentDidUnmountHook = new SyncHook('componentDidUnmount', sharedState); | ||
var componentOnError = new SyncHook('componentOnError', sharedState); | ||
var hooks = { | ||
@@ -116,8 +139,8 @@ /* App 相关 hooks */ | ||
appOnInit: appOnConstruct.alias('appOnInit'), | ||
appOnLaunch: new SyncHook('appOnLaunch'), | ||
appOnError: new SyncHook('appOnError'), | ||
appOnShow: new SyncHook('appOnShow'), | ||
appOnHide: new SyncHook('appOnHide'), | ||
appOnPageNotFound: new SyncHook('appOnPageNotFound'), | ||
appOnUnhandledRejection: new SyncHook('appOnUnhandledRejection'), | ||
appOnLaunch: new SyncHook('appOnLaunch', sharedState), | ||
appOnError: new SyncHook('appOnError', sharedState), | ||
appOnShow: new SyncHook('appOnShow', sharedState), | ||
appOnHide: new SyncHook('appOnHide', sharedState), | ||
appOnPageNotFound: new SyncHook('appOnPageNotFound', sharedState), | ||
appOnUnhandledRejection: new SyncHook('appOnUnhandledRejection', sharedState), | ||
/* Page 相关 hooks */ | ||
@@ -127,9 +150,9 @@ pageOnConstruct: pageOnConstructHook, | ||
pageOnInit: pageOnConstructHook.alias('pageOnInit'), | ||
pageOnLoad: new SyncHook('pageOnLoad'), | ||
pageOnReady: new SyncHook('pageOnReady'), | ||
pageOnShow: new SyncHook('pageOnShow'), | ||
pageOnHide: new SyncHook('pageOnHide'), | ||
pageOnUnload: new SyncHook('pageOnUnload'), | ||
pageOnLoad: new SyncHook('pageOnLoad', sharedState), | ||
pageOnReady: new SyncHook('pageOnReady', sharedState), | ||
pageOnShow: new SyncHook('pageOnShow', sharedState), | ||
pageOnHide: new SyncHook('pageOnHide', sharedState), | ||
pageOnUnload: new SyncHook('pageOnUnload', sharedState), | ||
/* Component 相关 hooks */ | ||
componentOnConstruct: new SyncHook('componentOnConstruct'), | ||
componentOnConstruct: new SyncHook('componentOnConstruct', sharedState), | ||
componentOnInit: componentOnInitHook, | ||
@@ -141,3 +164,24 @@ componentOnCreated: componentOnInitHook.alias('componentOnCreated'), | ||
componentOnDetached: componentDidUnmountHook.alias('componentOnDetached'), | ||
componentOnError: componentOnError | ||
componentOnError: componentOnError, | ||
// 暂定某些生命周期暂时不执行,参数为空时暂停所有生命周期 | ||
pause: function (hooksNameList) { | ||
sharedState.state = HookInvokeState.pausing; | ||
sharedState.hooksNameList = hooksNameList || []; | ||
}, | ||
// 恢复所有生命周期,按顺依次执行 | ||
resume: function () { | ||
var _a; | ||
sharedState.state = HookInvokeState.resuming; | ||
var stackItem = sharedState.stack.shift(); | ||
while (stackItem) { | ||
var name_1 = stackItem[0], tap = stackItem[1], context = stackItem[2], args = stackItem[3]; | ||
try { | ||
tap === null || tap === void 0 ? void 0 : (_a = tap.fn).call.apply(_a, tslib_1.__spreadArray([context], args, false)); | ||
} | ||
catch (error) { | ||
logger_1.logger.error(name_1, tap.name, error); | ||
} | ||
stackItem = sharedState.stack.shift(); | ||
} | ||
} | ||
}; | ||
@@ -144,0 +188,0 @@ // 记录创建的所有 hooks |
{ | ||
"name": "@morjs/runtime-base", | ||
"version": "1.0.53", | ||
"version": "1.0.68", | ||
"description": "mor runtime base", | ||
@@ -42,3 +42,3 @@ "keywords": [ | ||
}, | ||
"gitHead": "e2681c3e73f2c2c1ccb81f1add3b12a6ccedadca" | ||
"gitHead": "aadb9fbd87cca39e05f2a3e4e2d5ecdca636ef42" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
155358
3205