wevu 7.3.0 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev/package.mjs +1 -1
- package/dist/dev/router/initialNavigation.mjs +4 -1
- package/dist/dev/router/initialNavigation.mjs.map +1 -1
- package/dist/dev/router/scrollRestoration/adapters.d.mts +8 -0
- package/dist/dev/router/scrollRestoration/adapters.mjs +86 -0
- package/dist/dev/router/scrollRestoration/adapters.mjs.map +1 -0
- package/dist/dev/router/scrollRestoration/controller.d.mts +8 -0
- package/dist/dev/router/scrollRestoration/controller.mjs +148 -0
- package/dist/dev/router/scrollRestoration/controller.mjs.map +1 -0
- package/dist/dev/router/scrollRestoration/host.d.mts +3 -0
- package/dist/dev/router/scrollRestoration/host.mjs +76 -0
- package/dist/dev/router/scrollRestoration/host.mjs.map +1 -0
- package/dist/dev/router/scrollRestoration/index.d.mts +9 -0
- package/dist/dev/router/scrollRestoration/index.mjs +156 -0
- package/dist/dev/router/scrollRestoration/index.mjs.map +1 -0
- package/dist/dev/router/scrollRestoration/types.d.mts +61 -0
- package/dist/dev/router.d.mts +5 -1
- package/dist/dev/router.mjs +4 -1
- package/dist/dev/runtime/hooks/base.mjs +1 -13
- package/dist/dev/runtime/hooks/base.mjs.map +1 -1
- package/dist/dev/runtime/hooks/pageScroll.mjs +41 -0
- package/dist/dev/runtime/hooks/pageScroll.mjs.map +1 -0
- package/dist/dev/runtime/hooks/register.mjs +2 -1
- package/dist/dev/runtime/hooks/register.mjs.map +1 -1
- package/dist/dev/runtime/register/component/lifecycle/optionalHooks.mjs +2 -5
- package/dist/dev/runtime/register/component/lifecycle/optionalHooks.mjs.map +1 -1
- package/dist/dev/runtime/register/component/lifecycle/platform.mjs +8 -20
- package/dist/dev/runtime/register/component/lifecycle/platform.mjs.map +1 -1
- package/dist/dev/runtime/register/component/registerDefinition.mjs +3 -0
- package/dist/dev/runtime/register/component/registerDefinition.mjs.map +1 -1
- package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs +7 -2
- package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs.map +1 -1
- package/dist/package.mjs +1 -1
- package/dist/router/initialNavigation.mjs +1 -1
- package/dist/router/scrollRestoration/adapters.d.mts +7 -0
- package/dist/router/scrollRestoration/adapters.mjs +1 -0
- package/dist/router/scrollRestoration/controller.d.mts +7 -0
- package/dist/router/scrollRestoration/controller.mjs +1 -0
- package/dist/router/scrollRestoration/host.d.mts +3 -0
- package/dist/router/scrollRestoration/host.mjs +1 -0
- package/dist/router/scrollRestoration/index.d.mts +8 -0
- package/dist/router/scrollRestoration/index.mjs +1 -0
- package/dist/router/scrollRestoration/types.d.mts +60 -0
- package/dist/router.d.mts +5 -1
- package/dist/router.mjs +1 -1
- package/dist/runtime/hooks/base.mjs +1 -1
- package/dist/runtime/hooks/pageScroll.mjs +1 -0
- package/dist/runtime/hooks/register.mjs +1 -1
- package/dist/runtime/register/component/lifecycle/optionalHooks.mjs +1 -1
- package/dist/runtime/register/component/lifecycle/platform.mjs +1 -1
- package/dist/runtime/register/component/registerDefinition.mjs +1 -1
- package/dist/runtime/register/runtimeInstance/setupPhase.mjs +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/router/scrollRestoration/index.ts"],"sourcesContent":["import type { ScrollRegistration } from './controller'\nimport type { ScrollPage } from './host'\nimport type { ScrollRestorationContext, ScrollRestorationHandle, UseScrollRestorationOptions } from './types'\nimport { WEVU_READY_CALLED_KEY } from '@weapp-core/constants'\nimport { onScopeDispose } from '../../reactivity'\nimport { assertInSetup, getCurrentSetupContext } from '../../runtime/hooks/base'\nimport { getInitialNavigationPromise } from '../initialNavigation'\nimport { resolveScrollController } from './controller'\nimport { addScrollHook, currentScrollPage, resolveScrollPage } from './host'\n\nexport { createScrollRestoration } from './controller'\nexport type * from './types'\n\nexport function getScrollSetupScope() {\n const instance: ScrollPage = assertInSetup('useScrollRestoration')\n const proxy = getCurrentSetupContext<{ proxy: { $nextTick: () => Promise<void> } }>()?.proxy\n if (typeof proxy?.$nextTick !== 'function') {\n throw new TypeError('scroll restoration 需要具有宿主提交屏障的 wevu setup 实例。')\n }\n return { instance, commit: () => proxy.$nextTick() }\n}\n\nexport function registerScrollRestoration<T extends object>(\n options: UseScrollRestorationOptions<T>,\n lifecycle?: { onBindPage?: (page: ScrollPage) => void, onStop?: () => void },\n): ScrollRestorationHandle {\n const { instance, commit } = getScrollSetupScope()\n const state = resolveScrollController(options.controller)\n const cleanups: Array<() => void> = []\n let page: ScrollPage | undefined\n let route: ScrollRestorationContext['route'] | undefined\n let stopped = false\n let visible = true\n let captured = false\n let attempted = false\n let request = 0\n let instanceReady = Boolean(instance[WEVU_READY_CALLED_KEY])\n let pageReady = false\n let readyPromise: Promise<void> | undefined\n let resolveReady: (() => void) | undefined\n let registration: ScrollRegistration\n\n function releaseReady() {\n if (stopped || (instanceReady && pageReady)) {\n resolveReady?.()\n }\n }\n\n function bindPage() {\n if (page || stopped) {\n return\n }\n const owner = resolveScrollPage(instance)\n if (!owner) {\n return\n }\n const nextRoute = state.resolveRoute(owner)\n registration.key = typeof options.key === 'function' ? options.key(nextRoute) : options.key ?? nextRoute.fullPath\n const unregister = state.register(owner, registration)\n page = owner\n route = nextRoute\n cleanups.push(unregister)\n pageReady = Boolean(owner[WEVU_READY_CALLED_KEY])\n cleanups.push(addScrollHook(owner, 'onReady', () => {\n pageReady = true\n releaseReady()\n registration.restoreAutomatic()\n }))\n lifecycle?.onBindPage?.(owner)\n }\n\n async function scroll(): Promise<boolean> {\n if (stopped || state.disposed) {\n return false\n }\n bindPage()\n if (!page || !route) {\n throw new Error('无法确定 scroll restoration 的原生归属页面,请在页面 attached 后恢复。')\n }\n if (!visible || currentScrollPage() !== page) {\n return false\n }\n const ticket = ++request\n const generation = state.generation\n const context: ScrollRestorationContext = {\n route,\n routeEventId: state.transition?.page === page ? state.transition.event.routeEventId : undefined,\n isActive: () => !stopped && !state.disposed && visible && ticket === request\n && generation === state.generation && currentScrollPage() === page,\n }\n if (!instanceReady || !pageReady) {\n readyPromise ??= new Promise<void>((resolve) => {\n resolveReady = resolve\n })\n await readyPromise\n }\n if (!context.isActive()) {\n return false\n }\n const shouldMount = await getInitialNavigationPromise(page)\n if (shouldMount === false || !context.isActive()) {\n return false\n }\n await commit()\n if (!context.isActive()) {\n return false\n }\n // 同一个 key/id 的注册共享快照格式;格式由使用者的 T 契约约束。\n const snapshot = state.read(registration.key, registration.id) as T | undefined\n await options.restore(snapshot, context)\n return context.isActive()\n }\n\n registration = {\n key: '',\n id: options.id ?? 'default',\n capture() {\n if (stopped || state.disposed || !page || !visible || captured) {\n return\n }\n captured = true\n try {\n const snapshot = options.capture()\n if (snapshot !== null && 'then' in snapshot && typeof snapshot.then === 'function') {\n throw new TypeError('scroll restoration capture 必须同步返回快照,不能返回 Promise。')\n }\n state.save(registration.key, registration.id, snapshot)\n }\n catch (error) {\n state.clear(registration.key, registration.id)\n state.report(error)\n }\n },\n invalidate() {\n request++\n resolveReady?.()\n readyPromise = undefined\n resolveReady = undefined\n },\n restoreAutomatic() {\n const transition = state.transition\n if (stopped || options.manual || attempted || !instanceReady || !pageReady\n || !transition?.fresh || !transition.done || transition.page !== page) {\n return\n }\n attempted = true\n void scroll().catch(state.report)\n },\n stop() {\n if (stopped) {\n return\n }\n stopped = true\n request++\n releaseReady()\n for (const cleanup of cleanups) {\n cleanup()\n }\n cleanups.length = 0\n lifecycle?.onStop?.()\n },\n }\n\n function captureBeforeStop() {\n // 生命周期销毁保留最后快照;显式 stop 只注销,不能撤销先前的 clear。\n registration.capture()\n registration.stop()\n }\n\n cleanups.push(\n addScrollHook(instance, 'onAttached', bindPage),\n addScrollHook(instance, 'onReady', () => {\n bindPage()\n instanceReady = true\n releaseReady()\n registration.restoreAutomatic()\n }),\n addScrollHook(instance, 'onShow', () => {\n bindPage()\n visible = true\n captured = false\n }),\n addScrollHook(instance, 'onHide', () => {\n registration.capture()\n visible = false\n registration.invalidate()\n }),\n addScrollHook(instance, 'onDetached', captureBeforeStop),\n addScrollHook(instance, 'onUnload', captureBeforeStop),\n )\n onScopeDispose(captureBeforeStop)\n bindPage()\n registration.restoreAutomatic()\n return {\n automatic: state.controller.automatic && !options.manual,\n scroll,\n clear: () => {\n bindPage()\n if (page) {\n state.clear(registration.key, registration.id)\n }\n },\n stop: registration.stop,\n }\n}\n\n/** 在同步 setup 中注册快照;只恢复新实例,不覆盖原生保留页的位置。 */\nexport function useScrollRestoration<T extends object>(options: UseScrollRestorationOptions<T>): ScrollRestorationHandle {\n return registerScrollRestoration(options)\n}\n"],"mappings":";;;;;;;;AAaA,SAAgB,sBAAsB;CACpC,MAAM,WAAuB,cAAc,sBAAsB;CACjE,MAAM,QAAQ,uBAAsE,CAAC,EAAE;CACvF,IAAI,OAAO,OAAO,cAAc,YAC9B,MAAM,IAAI,UAAU,+CAA+C;CAErE,OAAO;EAAE;EAAU,cAAc,MAAM,UAAU;CAAE;AACrD;AAEA,SAAgB,0BACd,SACA,WACyB;CACzB,MAAM,EAAE,UAAU,WAAW,oBAAoB;CACjD,MAAM,QAAQ,wBAAwB,QAAQ,UAAU;CACxD,MAAM,WAA8B,CAAC;CACrC,IAAI;CACJ,IAAI;CACJ,IAAI,UAAU;CACd,IAAI,UAAU;CACd,IAAI,WAAW;CACf,IAAI,YAAY;CAChB,IAAI,UAAU;CACd,IAAI,gBAAgB,QAAQ,SAAS,sBAAsB;CAC3D,IAAI,YAAY;CAChB,IAAI;CACJ,IAAI;CACJ,IAAI;CAEJ,SAAS,eAAe;EACtB,IAAI,WAAY,iBAAiB,WAC/B,eAAe;CAEnB;CAEA,SAAS,WAAW;EAClB,IAAI,QAAQ,SACV;EAEF,MAAM,QAAQ,kBAAkB,QAAQ;EACxC,IAAI,CAAC,OACH;EAEF,MAAM,YAAY,MAAM,aAAa,KAAK;EAC1C,aAAa,MAAM,OAAO,QAAQ,QAAQ,aAAa,QAAQ,IAAI,SAAS,IAAI,QAAQ,OAAO,UAAU;EACzG,MAAM,aAAa,MAAM,SAAS,OAAO,YAAY;EACrD,OAAO;EACP,QAAQ;EACR,SAAS,KAAK,UAAU;EACxB,YAAY,QAAQ,MAAM,sBAAsB;EAChD,SAAS,KAAK,cAAc,OAAO,iBAAiB;GAClD,YAAY;GACZ,aAAa;GACb,aAAa,iBAAiB;EAChC,CAAC,CAAC;EACF,WAAW,aAAa,KAAK;CAC/B;CAEA,eAAe,SAA2B;EACxC,IAAI,WAAW,MAAM,UACnB,OAAO;EAET,SAAS;EACT,IAAI,CAAC,QAAQ,CAAC,OACZ,MAAM,IAAI,MAAM,oDAAoD;EAEtE,IAAI,CAAC,WAAW,kBAAkB,MAAM,MACtC,OAAO;EAET,MAAM,SAAS,EAAE;EACjB,MAAM,aAAa,MAAM;EACzB,MAAM,UAAoC;GACxC;GACA,cAAc,MAAM,YAAY,SAAS,OAAO,MAAM,WAAW,MAAM,eAAe;GACtF,gBAAgB,CAAC,WAAW,CAAC,MAAM,YAAY,WAAW,WAAW,WAChE,eAAe,MAAM,cAAc,kBAAkB,MAAM;EAClE;EACA,IAAI,CAAC,iBAAiB,CAAC,WAAW;GAChC,gCAAiB,IAAI,SAAe,YAAY;IAC9C,eAAe;GACjB,CAAC;GACD,MAAM;EACR;EACA,IAAI,CAAC,QAAQ,SAAS,GACpB,OAAO;EAGT,IAAI,MADsB,4BAA4B,IAAI,MACtC,SAAS,CAAC,QAAQ,SAAS,GAC7C,OAAO;EAET,MAAM,OAAO;EACb,IAAI,CAAC,QAAQ,SAAS,GACpB,OAAO;EAGT,MAAM,WAAW,MAAM,KAAK,aAAa,KAAK,aAAa,EAAE;EAC7D,MAAM,QAAQ,QAAQ,UAAU,OAAO;EACvC,OAAO,QAAQ,SAAS;CAC1B;CAEA,eAAe;EACb,KAAK;EACL,IAAI,QAAQ,MAAM;EAClB,UAAU;GACR,IAAI,WAAW,MAAM,YAAY,CAAC,QAAQ,CAAC,WAAW,UACpD;GAEF,WAAW;GACX,IAAI;IACF,MAAM,WAAW,QAAQ,QAAQ;IACjC,IAAI,aAAa,QAAQ,UAAU,YAAY,OAAO,SAAS,SAAS,YACtE,MAAM,IAAI,UAAU,mDAAmD;IAEzE,MAAM,KAAK,aAAa,KAAK,aAAa,IAAI,QAAQ;GACxD,SACO,OAAO;IACZ,MAAM,MAAM,aAAa,KAAK,aAAa,EAAE;IAC7C,MAAM,OAAO,KAAK;GACpB;EACF;EACA,aAAa;GACX;GACA,eAAe;GACf,eAAe;GACf,eAAe;EACjB;EACA,mBAAmB;GACjB,MAAM,aAAa,MAAM;GACzB,IAAI,WAAW,QAAQ,UAAU,aAAa,CAAC,iBAAiB,CAAC,aAC5D,CAAC,YAAY,SAAS,CAAC,WAAW,QAAQ,WAAW,SAAS,MACjE;GAEF,YAAY;GACZ,AAAK,OAAO,CAAC,CAAC,MAAM,MAAM,MAAM;EAClC;EACA,OAAO;GACL,IAAI,SACF;GAEF,UAAU;GACV;GACA,aAAa;GACb,KAAK,MAAM,WAAW,UACpB,QAAQ;GAEV,SAAS,SAAS;GAClB,WAAW,SAAS;EACtB;CACF;CAEA,SAAS,oBAAoB;EAE3B,aAAa,QAAQ;EACrB,aAAa,KAAK;CACpB;CAEA,SAAS,KACP,cAAc,UAAU,cAAc,QAAQ,GAC9C,cAAc,UAAU,iBAAiB;EACvC,SAAS;EACT,gBAAgB;EAChB,aAAa;EACb,aAAa,iBAAiB;CAChC,CAAC,GACD,cAAc,UAAU,gBAAgB;EACtC,SAAS;EACT,UAAU;EACV,WAAW;CACb,CAAC,GACD,cAAc,UAAU,gBAAgB;EACtC,aAAa,QAAQ;EACrB,UAAU;EACV,aAAa,WAAW;CAC1B,CAAC,GACD,cAAc,UAAU,cAAc,iBAAiB,GACvD,cAAc,UAAU,YAAY,iBAAiB,CACvD;CACA,eAAe,iBAAiB;CAChC,SAAS;CACT,aAAa,iBAAiB;CAC9B,OAAO;EACL,WAAW,MAAM,WAAW,aAAa,CAAC,QAAQ;EAClD;EACA,aAAa;GACX,SAAS;GACT,IAAI,MACF,MAAM,MAAM,aAAa,KAAK,aAAa,EAAE;EAEjD;EACA,MAAM,aAAa;CACrB;AACF;;AAGA,SAAgB,qBAAuC,SAAkE;CACvH,OAAO,0BAA0B,OAAO;AAC1C"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Ref } from "../../reactivity/ref.mjs";
|
|
2
|
+
import "../../reactivity/index.mjs";
|
|
3
|
+
import { RouteLocationNormalizedLoaded, RouterNavigation } from "../types.mjs";
|
|
4
|
+
//#region src/router/scrollRestoration/types.d.ts
|
|
5
|
+
export interface ScrollRestorationController {
|
|
6
|
+
/** 当前宿主是否支持带 routeEventId 的自动路由关联。 */
|
|
7
|
+
readonly automatic: boolean;
|
|
8
|
+
/** 清除整个会话或指定路由 key 的快照,不注销组件。 */
|
|
9
|
+
clear: (key?: string) => void;
|
|
10
|
+
/** 注销宿主监听、组件注册和未完成的恢复,并清空会话。 */
|
|
11
|
+
dispose: () => void;
|
|
12
|
+
}
|
|
13
|
+
export interface ScrollRestorationOptions<TRouteMap extends object = object> {
|
|
14
|
+
router: RouterNavigation<TRouteMap>;
|
|
15
|
+
/** 自动捕获或恢复失败时调用;手动 scroll 的错误由调用者处理。 */
|
|
16
|
+
onError?: (error: unknown) => void;
|
|
17
|
+
}
|
|
18
|
+
export interface ScrollRestorationContext {
|
|
19
|
+
readonly route: Readonly<RouteLocationNormalizedLoaded>;
|
|
20
|
+
readonly routeEventId?: string;
|
|
21
|
+
/** 异步自定义恢复在每次 await 后、写入宿主前必须重新检查。 */
|
|
22
|
+
isActive: () => boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface ScrollRestorationRegistrationOptions {
|
|
25
|
+
controller?: ScrollRestorationController;
|
|
26
|
+
/** 默认使用包含 query 的 route.fullPath。 */
|
|
27
|
+
key?: string | ((route: Readonly<RouteLocationNormalizedLoaded>) => string);
|
|
28
|
+
/** 同一页面和路由 key 内的独立容器名,默认为 default。 */
|
|
29
|
+
id?: string;
|
|
30
|
+
/** 只捕获,不在原生路由完成后自动恢复。 */
|
|
31
|
+
manual?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface UseScrollRestorationOptions<T extends object> extends ScrollRestorationRegistrationOptions {
|
|
34
|
+
/** 同步返回独立快照;不能返回响应式活动对象或 Promise,null 表示清除。 */
|
|
35
|
+
capture: () => (T & {
|
|
36
|
+
then?: never;
|
|
37
|
+
}) | null;
|
|
38
|
+
restore: (snapshot: T | undefined, context: ScrollRestorationContext) => void | Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
export interface ScrollRestorationHandle {
|
|
41
|
+
readonly automatic: boolean;
|
|
42
|
+
/** 等待组件就绪及宿主提交后恢复;已离开或失效时返回 false。 */
|
|
43
|
+
scroll: () => Promise<boolean>;
|
|
44
|
+
/** 只清除当前 key/id 的快照。 */
|
|
45
|
+
clear: () => void;
|
|
46
|
+
/** 停止当前注册;保留已捕获快照。 */
|
|
47
|
+
stop: () => void;
|
|
48
|
+
}
|
|
49
|
+
export interface ScrollViewRestorationHandle extends ScrollRestorationHandle {
|
|
50
|
+
scrollTop: Ref<number>;
|
|
51
|
+
scrollLeft: Ref<number>;
|
|
52
|
+
/** 绑定 scroll-view 的 scroll 事件,只更新非响应式缓存。 */
|
|
53
|
+
onScroll: (event: {
|
|
54
|
+
detail: {
|
|
55
|
+
scrollTop: number;
|
|
56
|
+
scrollLeft: number;
|
|
57
|
+
};
|
|
58
|
+
}) => void;
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
//# sourceMappingURL=types.d.mts.map
|
package/dist/dev/router.d.mts
CHANGED
|
@@ -6,6 +6,10 @@ import { AddRoute, InitialNavigationMode, LocationQuery, LocationQueryRaw, Locat
|
|
|
6
6
|
import { createRouter } from "./router/createRouter.mjs";
|
|
7
7
|
import { createNavigationFailure, isNavigationFailure } from "./router/navigationCore.mjs";
|
|
8
8
|
import { resolveRouteLocation } from "./router/resolve.mjs";
|
|
9
|
+
import { ScrollRestorationContext, ScrollRestorationController, ScrollRestorationHandle, ScrollRestorationOptions, ScrollRestorationRegistrationOptions, ScrollViewRestorationHandle, UseScrollRestorationOptions } from "./router/scrollRestoration/types.mjs";
|
|
10
|
+
import { usePageScrollRestoration, useScrollViewRestoration } from "./router/scrollRestoration/adapters.mjs";
|
|
11
|
+
import { createScrollRestoration } from "./router/scrollRestoration/controller.mjs";
|
|
12
|
+
import { useScrollRestoration } from "./router/scrollRestoration/index.mjs";
|
|
9
13
|
import { UseRouteOptions, useNativePageRouter, useNativeRouter, useRoute } from "./router/useRoute.mjs";
|
|
10
14
|
import { useRouter } from "./router/useRouter.mjs";
|
|
11
15
|
import { StaticPageDeclaration, StaticPageDeclaration as StaticPageDeclaration$1, StaticRouteValue } from "@wevu/compiler/page-route";
|
|
@@ -22,5 +26,5 @@ export interface WevuNamedRouteMap {}
|
|
|
22
26
|
*/
|
|
23
27
|
export declare function definePage(route: StaticPageDeclaration$1): void;
|
|
24
28
|
//#endregion
|
|
25
|
-
export { type AddRoute, type InitialNavigationMode, type LocationQuery, type LocationQueryRaw, type LocationQueryValue, type LocationQueryValueRaw, type NamedRouteRecord, type NamedRoutes, type NavigationAfterEach, type NavigationAfterEachContext, type NavigationErrorContext, type NavigationErrorHandler, type NavigationFailure, NavigationFailureType, type NavigationFailureTypeValue, type NavigationGuard, type NavigationGuardContext, type NavigationGuardResult, type NavigationMode, type NavigationRedirect, type RouteLocationNamedRaw, type RouteLocationNormalizedByName, type RouteLocationNormalizedLoaded, type RouteLocationRaw, type RouteLocationRedirectedFrom, type RouteMeta, type RouteParamValue, type RouteParamValueRaw, type RouteParams, type RouteParamsMode, type RouteParamsRaw, type RouteQueryParser, type RouteQueryStringifier, type RouteRecordInput, type RouteRecordMatched, type RouteRecordRaw, type RouteRecordRedirect, type RouterNavigateToOption, type RouterNavigation, type RouterReLaunchOption, type RouterRedirectToOption, type RouterResolve, type RouterSwitchTabOption, type SetupContextRouter, type StaticPageDeclaration, type StaticRouteValue, type TypedRouterTabBarUrl, type TypedRouterUrl, type UseRouteOptions, type UseRouterOptions, type WevuAutoRoute, type WevuBroadRouteMap, type WevuNamedRouteDefinition, type WevuNamedRouteMeta, type WevuNamedRoutePath, type WevuRouteName, type WevuTypedRouterRouteMap, createNavigationFailure, createRouter, isNavigationFailure, parseQuery, resolveRouteLocation, stringifyQuery, useNativePageRouter, useNativeRouter, useRoute, useRouter };
|
|
29
|
+
export { type AddRoute, type InitialNavigationMode, type LocationQuery, type LocationQueryRaw, type LocationQueryValue, type LocationQueryValueRaw, type NamedRouteRecord, type NamedRoutes, type NavigationAfterEach, type NavigationAfterEachContext, type NavigationErrorContext, type NavigationErrorHandler, type NavigationFailure, NavigationFailureType, type NavigationFailureTypeValue, type NavigationGuard, type NavigationGuardContext, type NavigationGuardResult, type NavigationMode, type NavigationRedirect, type RouteLocationNamedRaw, type RouteLocationNormalizedByName, type RouteLocationNormalizedLoaded, type RouteLocationRaw, type RouteLocationRedirectedFrom, type RouteMeta, type RouteParamValue, type RouteParamValueRaw, type RouteParams, type RouteParamsMode, type RouteParamsRaw, type RouteQueryParser, type RouteQueryStringifier, type RouteRecordInput, type RouteRecordMatched, type RouteRecordRaw, type RouteRecordRedirect, type RouterNavigateToOption, type RouterNavigation, type RouterReLaunchOption, type RouterRedirectToOption, type RouterResolve, type RouterSwitchTabOption, type ScrollRestorationContext, type ScrollRestorationController, type ScrollRestorationHandle, type ScrollRestorationOptions, type ScrollRestorationRegistrationOptions, type ScrollViewRestorationHandle, type SetupContextRouter, type StaticPageDeclaration, type StaticRouteValue, type TypedRouterTabBarUrl, type TypedRouterUrl, type UseRouteOptions, type UseRouterOptions, type UseScrollRestorationOptions, type WevuAutoRoute, type WevuBroadRouteMap, type WevuNamedRouteDefinition, type WevuNamedRouteMeta, type WevuNamedRoutePath, type WevuRouteName, type WevuTypedRouterRouteMap, createNavigationFailure, createRouter, createScrollRestoration, isNavigationFailure, parseQuery, resolveRouteLocation, stringifyQuery, useNativePageRouter, useNativeRouter, usePageScrollRestoration, useRoute, useRouter, useScrollRestoration, useScrollViewRestoration };
|
|
26
30
|
//# sourceMappingURL=router.d.mts.map
|
package/dist/dev/router.mjs
CHANGED
|
@@ -4,6 +4,9 @@ import { createNavigationFailure, isNavigationFailure } from "./router/navigatio
|
|
|
4
4
|
import { resolveRouteLocation } from "./router/resolve.mjs";
|
|
5
5
|
import { useNativePageRouter, useNativeRouter, useRoute } from "./router/useRoute.mjs";
|
|
6
6
|
import { createRouter } from "./router/createRouter.mjs";
|
|
7
|
+
import { createScrollRestoration } from "./router/scrollRestoration/controller.mjs";
|
|
8
|
+
import { useScrollRestoration } from "./router/scrollRestoration/index.mjs";
|
|
9
|
+
import { usePageScrollRestoration, useScrollViewRestoration } from "./router/scrollRestoration/adapters.mjs";
|
|
7
10
|
import { useRouter } from "./router/useRouter.mjs";
|
|
8
11
|
|
|
9
|
-
export { NavigationFailureType, createNavigationFailure, createRouter, isNavigationFailure, parseQuery, resolveRouteLocation, stringifyQuery, useNativePageRouter, useNativeRouter, useRoute, useRouter };
|
|
12
|
+
export { NavigationFailureType, createNavigationFailure, createRouter, createScrollRestoration, isNavigationFailure, parseQuery, resolveRouteLocation, stringifyQuery, useNativePageRouter, useNativeRouter, usePageScrollRestoration, useRoute, useRouter, useScrollRestoration, useScrollViewRestoration };
|
|
@@ -116,18 +116,6 @@ function callHookList(target, name, args = []) {
|
|
|
116
116
|
list.apply(ctx, args);
|
|
117
117
|
} catch {}
|
|
118
118
|
}
|
|
119
|
-
function ensurePageHookOnInstance(target, name) {
|
|
120
|
-
var _ref2;
|
|
121
|
-
const bridges = (_ref2 = target).__wevuPageHookBridges ?? (_ref2.__wevuPageHookBridges = Object.create(null));
|
|
122
|
-
if (typeof bridges[name] === "function") return;
|
|
123
|
-
const original = target[name];
|
|
124
|
-
const bridge = function onWevuPageHookBridge(...args) {
|
|
125
|
-
callHookList(this, name, args);
|
|
126
|
-
if (typeof original === "function") return original.apply(this, args);
|
|
127
|
-
};
|
|
128
|
-
bridges[name] = bridge;
|
|
129
|
-
target[name] = bridge;
|
|
130
|
-
}
|
|
131
119
|
/**
|
|
132
120
|
* 调用返回值型 hook(框架内部调度入口)。
|
|
133
121
|
* @internal
|
|
@@ -153,5 +141,5 @@ function callHookReturn(target, name, args = []) {
|
|
|
153
141
|
}
|
|
154
142
|
|
|
155
143
|
//#endregion
|
|
156
|
-
export { assertInSetup, callHookList, callHookReturn,
|
|
144
|
+
export { assertInSetup, callHookList, callHookReturn, ensurePageShareMenusOnSetup, ensureSinglePageHookOnInstance, getCurrentInstance, getCurrentSetupContext, pushHook, setCurrentInstance, setCurrentSetupContext };
|
|
157
145
|
//# sourceMappingURL=base.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.mjs","names":[],"sources":["../../../../src/runtime/hooks/base.ts"],"sourcesContent":["import type { InternalRuntimeState } from '../types'\nimport { WEVU_CURRENT_SETUP_STATE_KEY, WEVU_HOOKS_KEY } from '@weapp-core/constants'\nimport { getCurrentMiniProgramGlobalObject, getCurrentMiniProgramRuntimeCapabilities, getMiniProgramRuntimeGlobalObject, supportsCurrentMiniProgramRuntimeCapability } from '../platform'\n\n// 仅供同步 setup() 调用期间使用的当前实例引用。wevu 的根入口与\n// `wevu/router` 可能被打包成多个模块副本,必须通过宿主全局共享状态。\ninterface CurrentSetupState {\n instance?: InternalRuntimeState\n context?: any\n}\n\nconst currentSetupState: CurrentSetupState = (() => {\n // Web 会在模块加载后安装宿主 API;可用时优先使用稳定的执行域全局,\n // 防止不同入口因导入时机不同而持有两份 setup 状态。\n const host = typeof globalThis !== 'undefined'\n ? globalThis as Record<string, any>\n : getMiniProgramRuntimeGlobalObject()\n return host ? host[WEVU_CURRENT_SETUP_STATE_KEY] ??= {} : {}\n})()\n\nexport function getCurrentInstance<T extends InternalRuntimeState = InternalRuntimeState>(): T | undefined {\n return currentSetupState.instance as T | undefined\n}\n\n/**\n * 设置当前运行时实例(框架内部使用)。\n * @internal\n */\nexport function setCurrentInstance(inst: InternalRuntimeState | undefined) {\n currentSetupState.instance = inst\n}\n\nexport function getCurrentSetupContext<T = any>(): T | undefined {\n return currentSetupState.context as T | undefined\n}\n\n/**\n * 设置当前 setup 上下文(框架内部使用)。\n * @internal\n */\nexport function setCurrentSetupContext(ctx: any | undefined) {\n currentSetupState.context = ctx\n}\n\nexport function assertInSetup(name: string): InternalRuntimeState {\n if (!currentSetupState.instance) {\n throw new Error(`${name}() 必须在 setup() 的同步阶段调用`)\n }\n return currentSetupState.instance\n}\n\nfunction ensureHookBucket(target: InternalRuntimeState): Record<string, any> {\n if (!target[WEVU_HOOKS_KEY]) {\n target[WEVU_HOOKS_KEY] = Object.create(null)\n }\n return target[WEVU_HOOKS_KEY] as Record<string, any>\n}\n\ntype ShareMenuName = 'shareAppMessage' | 'shareTimeline'\n\nfunction buildShareMenus(\n enableOnShareAppMessage: boolean,\n enableOnShareTimeline: boolean,\n): ShareMenuName[] {\n const runtimeCapabilities = getCurrentMiniProgramRuntimeCapabilities()\n const shouldShowShareAppMessage = runtimeCapabilities.shareTimelineRequiresShareAppMessage\n ? (enableOnShareAppMessage || enableOnShareTimeline)\n : enableOnShareAppMessage\n\n const menus: ShareMenuName[] = []\n if (shouldShowShareAppMessage) {\n menus.push('shareAppMessage')\n }\n if (enableOnShareTimeline) {\n menus.push('shareTimeline')\n }\n return menus\n}\n\nfunction tryShowShareMenu(showShareMenu: (...args: any[]) => unknown, menus: ShareMenuName[]) {\n const payloads = [\n { withShareTicket: true, menus },\n { menus },\n menus.includes('shareTimeline') ? { withShareTicket: true } : undefined,\n menus.includes('shareTimeline') ? {} : undefined,\n undefined,\n ]\n\n for (const payload of payloads) {\n try {\n if (payload === undefined) {\n showShareMenu()\n }\n else {\n showShareMenu(payload as any)\n }\n return\n }\n catch {\n // 继续尝试更保守的 payload,兼容不同宿主的 showShareMenu 参数形态。\n }\n }\n}\n\nexport function pushHook(\n target: InternalRuntimeState,\n name: string,\n handler: (...args: any[]) => any,\n { single = false } = {},\n) {\n const bucket = ensureHookBucket(target)\n if (single) {\n bucket[name] = handler\n }\n else {\n const list: Array<(...args: any[]) => any> = bucket[name] ?? (bucket[name] = [])\n list.push(handler)\n }\n}\n\nexport function ensureSinglePageHookOnInstance(target: InternalRuntimeState, name: 'onShareAppMessage' | 'onShareTimeline' | 'onAddToFavorites') {\n const bridges = ((target as any).__wevuShareHookBridges ??= Object.create(null)) as Record<string, (...args: any[]) => any>\n if (typeof bridges[name] === 'function') {\n return\n }\n\n const original = (target as any)[name]\n const bridge = function onWevuShareHookBridge(this: InternalRuntimeState, ...args: any[]) {\n const hooks = this[WEVU_HOOKS_KEY] as Record<string, any> | undefined\n const entry = hooks?.[name]\n const runtime = this.__wevu\n const ctx = runtime?.proxy ?? this\n let ret: any\n\n if (typeof entry === 'function') {\n try {\n ret = entry.apply(ctx, args)\n }\n catch {\n ret = undefined\n }\n }\n else if (Array.isArray(entry)) {\n for (const fn of entry) {\n try {\n ret = fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,继续执行后续 hook\n }\n }\n }\n\n if (ret !== undefined) {\n return ret\n }\n if (typeof original === 'function') {\n return original.apply(this, args)\n }\n return undefined\n }\n\n bridges[name] = bridge\n ;(target as any)[name] = bridge\n}\n\nexport function ensurePageShareMenusOnSetup(target: InternalRuntimeState) {\n if (!supportsCurrentMiniProgramRuntimeCapability('pageShareMenu')) {\n return\n }\n const miniProgramGlobal = getCurrentMiniProgramGlobalObject()\n if (!miniProgramGlobal || typeof miniProgramGlobal.showShareMenu !== 'function') {\n return\n }\n\n const hooks = (target[WEVU_HOOKS_KEY] ?? {}) as Record<string, any>\n const hasShareAppMessage = typeof hooks.onShareAppMessage === 'function'\n const hasShareTimeline = typeof hooks.onShareTimeline === 'function'\n\n if (!hasShareAppMessage && !hasShareTimeline) {\n return\n }\n\n const menus = buildShareMenus(hasShareAppMessage, hasShareTimeline)\n if (!menus.length) {\n return\n }\n\n tryShowShareMenu(miniProgramGlobal.showShareMenu.bind(miniProgramGlobal), menus)\n}\n\n/**\n * 调用批量 hook(框架内部调度入口)。\n * @internal\n */\nexport function callHookList(target: InternalRuntimeState, name: string, args: any[] = []) {\n const hooks = target[WEVU_HOOKS_KEY]\n if (!hooks) {\n return\n }\n const list = hooks[name]\n if (!list) {\n return\n }\n const runtime = target.__wevu\n const ctx = runtime?.proxy ?? target\n if (Array.isArray(list)) {\n for (const fn of list) {\n try {\n fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,防止阻塞其他监听\n }\n }\n }\n else if (typeof list === 'function') {\n try {\n list.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,防止阻塞其他监听\n }\n }\n}\n\nexport function ensurePageHookOnInstance(target: InternalRuntimeState, name: 'onPageScroll') {\n const bridges = ((target as any).__wevuPageHookBridges ??= Object.create(null)) as Record<string, (...args: any[]) => any>\n if (typeof bridges[name] === 'function') {\n return\n }\n\n const original = (target as any)[name]\n const bridge = function onWevuPageHookBridge(this: InternalRuntimeState, ...args: any[]) {\n callHookList(this, name, args)\n if (typeof original === 'function') {\n return original.apply(this, args)\n }\n return undefined\n }\n\n bridges[name] = bridge\n ;(target as any)[name] = bridge\n}\n\n/**\n * 调用返回值型 hook(框架内部调度入口)。\n * @internal\n */\nexport function callHookReturn(target: InternalRuntimeState, name: string, args: any[] = []) {\n const hooks = target[WEVU_HOOKS_KEY]\n if (!hooks) {\n return undefined\n }\n const entry = hooks[name]\n if (!entry) {\n return undefined\n }\n const runtime = target.__wevu\n const ctx = runtime?.proxy ?? target\n if (typeof entry === 'function') {\n try {\n return entry.apply(ctx, args)\n }\n catch {\n return undefined\n }\n }\n if (Array.isArray(entry)) {\n let out: any\n for (const fn of entry) {\n try {\n out = fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,继续执行后续 hook\n }\n }\n return out\n }\n return undefined\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base.mjs","names":[],"sources":["../../../../src/runtime/hooks/base.ts"],"sourcesContent":["import type { InternalRuntimeState } from '../types'\nimport { WEVU_CURRENT_SETUP_STATE_KEY, WEVU_HOOKS_KEY } from '@weapp-core/constants'\nimport { getCurrentMiniProgramGlobalObject, getCurrentMiniProgramRuntimeCapabilities, getMiniProgramRuntimeGlobalObject, supportsCurrentMiniProgramRuntimeCapability } from '../platform'\n\n// 仅供同步 setup() 调用期间使用的当前实例引用。wevu 的根入口与\n// `wevu/router` 可能被打包成多个模块副本,必须通过宿主全局共享状态。\ninterface CurrentSetupState {\n instance?: InternalRuntimeState\n context?: any\n}\n\nconst currentSetupState: CurrentSetupState = (() => {\n // Web 会在模块加载后安装宿主 API;可用时优先使用稳定的执行域全局,\n // 防止不同入口因导入时机不同而持有两份 setup 状态。\n const host = typeof globalThis !== 'undefined'\n ? globalThis as Record<string, any>\n : getMiniProgramRuntimeGlobalObject()\n return host ? host[WEVU_CURRENT_SETUP_STATE_KEY] ??= {} : {}\n})()\n\nexport function getCurrentInstance<T extends InternalRuntimeState = InternalRuntimeState>(): T | undefined {\n return currentSetupState.instance as T | undefined\n}\n\n/**\n * 设置当前运行时实例(框架内部使用)。\n * @internal\n */\nexport function setCurrentInstance(inst: InternalRuntimeState | undefined) {\n currentSetupState.instance = inst\n}\n\nexport function getCurrentSetupContext<T = any>(): T | undefined {\n return currentSetupState.context as T | undefined\n}\n\n/**\n * 设置当前 setup 上下文(框架内部使用)。\n * @internal\n */\nexport function setCurrentSetupContext(ctx: any | undefined) {\n currentSetupState.context = ctx\n}\n\nexport function assertInSetup(name: string): InternalRuntimeState {\n if (!currentSetupState.instance) {\n throw new Error(`${name}() 必须在 setup() 的同步阶段调用`)\n }\n return currentSetupState.instance\n}\n\nfunction ensureHookBucket(target: InternalRuntimeState): Record<string, any> {\n if (!target[WEVU_HOOKS_KEY]) {\n target[WEVU_HOOKS_KEY] = Object.create(null)\n }\n return target[WEVU_HOOKS_KEY] as Record<string, any>\n}\n\ntype ShareMenuName = 'shareAppMessage' | 'shareTimeline'\n\nfunction buildShareMenus(\n enableOnShareAppMessage: boolean,\n enableOnShareTimeline: boolean,\n): ShareMenuName[] {\n const runtimeCapabilities = getCurrentMiniProgramRuntimeCapabilities()\n const shouldShowShareAppMessage = runtimeCapabilities.shareTimelineRequiresShareAppMessage\n ? (enableOnShareAppMessage || enableOnShareTimeline)\n : enableOnShareAppMessage\n\n const menus: ShareMenuName[] = []\n if (shouldShowShareAppMessage) {\n menus.push('shareAppMessage')\n }\n if (enableOnShareTimeline) {\n menus.push('shareTimeline')\n }\n return menus\n}\n\nfunction tryShowShareMenu(showShareMenu: (...args: any[]) => unknown, menus: ShareMenuName[]) {\n const payloads = [\n { withShareTicket: true, menus },\n { menus },\n menus.includes('shareTimeline') ? { withShareTicket: true } : undefined,\n menus.includes('shareTimeline') ? {} : undefined,\n undefined,\n ]\n\n for (const payload of payloads) {\n try {\n if (payload === undefined) {\n showShareMenu()\n }\n else {\n showShareMenu(payload as any)\n }\n return\n }\n catch {\n // 继续尝试更保守的 payload,兼容不同宿主的 showShareMenu 参数形态。\n }\n }\n}\n\nexport function pushHook(\n target: InternalRuntimeState,\n name: string,\n handler: (...args: any[]) => any,\n { single = false } = {},\n) {\n const bucket = ensureHookBucket(target)\n if (single) {\n bucket[name] = handler\n }\n else {\n const list: Array<(...args: any[]) => any> = bucket[name] ?? (bucket[name] = [])\n list.push(handler)\n }\n}\n\nexport function ensureSinglePageHookOnInstance(target: InternalRuntimeState, name: 'onShareAppMessage' | 'onShareTimeline' | 'onAddToFavorites') {\n const bridges = ((target as any).__wevuShareHookBridges ??= Object.create(null)) as Record<string, (...args: any[]) => any>\n if (typeof bridges[name] === 'function') {\n return\n }\n\n const original = (target as any)[name]\n const bridge = function onWevuShareHookBridge(this: InternalRuntimeState, ...args: any[]) {\n const hooks = this[WEVU_HOOKS_KEY] as Record<string, any> | undefined\n const entry = hooks?.[name]\n const runtime = this.__wevu\n const ctx = runtime?.proxy ?? this\n let ret: any\n\n if (typeof entry === 'function') {\n try {\n ret = entry.apply(ctx, args)\n }\n catch {\n ret = undefined\n }\n }\n else if (Array.isArray(entry)) {\n for (const fn of entry) {\n try {\n ret = fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,继续执行后续 hook\n }\n }\n }\n\n if (ret !== undefined) {\n return ret\n }\n if (typeof original === 'function') {\n return original.apply(this, args)\n }\n return undefined\n }\n\n bridges[name] = bridge\n ;(target as any)[name] = bridge\n}\n\nexport function ensurePageShareMenusOnSetup(target: InternalRuntimeState) {\n if (!supportsCurrentMiniProgramRuntimeCapability('pageShareMenu')) {\n return\n }\n const miniProgramGlobal = getCurrentMiniProgramGlobalObject()\n if (!miniProgramGlobal || typeof miniProgramGlobal.showShareMenu !== 'function') {\n return\n }\n\n const hooks = (target[WEVU_HOOKS_KEY] ?? {}) as Record<string, any>\n const hasShareAppMessage = typeof hooks.onShareAppMessage === 'function'\n const hasShareTimeline = typeof hooks.onShareTimeline === 'function'\n\n if (!hasShareAppMessage && !hasShareTimeline) {\n return\n }\n\n const menus = buildShareMenus(hasShareAppMessage, hasShareTimeline)\n if (!menus.length) {\n return\n }\n\n tryShowShareMenu(miniProgramGlobal.showShareMenu.bind(miniProgramGlobal), menus)\n}\n\n/**\n * 调用批量 hook(框架内部调度入口)。\n * @internal\n */\nexport function callHookList(target: InternalRuntimeState, name: string, args: any[] = []) {\n const hooks = target[WEVU_HOOKS_KEY]\n if (!hooks) {\n return\n }\n const list = hooks[name]\n if (!list) {\n return\n }\n const runtime = target.__wevu\n const ctx = runtime?.proxy ?? target\n if (Array.isArray(list)) {\n for (const fn of list) {\n try {\n fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,防止阻塞其他监听\n }\n }\n }\n else if (typeof list === 'function') {\n try {\n list.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,防止阻塞其他监听\n }\n }\n}\n\n/**\n * 调用返回值型 hook(框架内部调度入口)。\n * @internal\n */\nexport function callHookReturn(target: InternalRuntimeState, name: string, args: any[] = []) {\n const hooks = target[WEVU_HOOKS_KEY]\n if (!hooks) {\n return undefined\n }\n const entry = hooks[name]\n if (!entry) {\n return undefined\n }\n const runtime = target.__wevu\n const ctx = runtime?.proxy ?? target\n if (typeof entry === 'function') {\n try {\n return entry.apply(ctx, args)\n }\n catch {\n return undefined\n }\n }\n if (Array.isArray(entry)) {\n let out: any\n for (const fn of entry) {\n try {\n out = fn.apply(ctx, args)\n }\n catch {\n // 忽略单个 hook 抛出的异常,继续执行后续 hook\n }\n }\n return out\n }\n return undefined\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { callHookList } from "./base.mjs";
|
|
2
|
+
import { WEVU_PAGE_HOOK_BRIDGES_KEY, WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY, WEVU_PAGE_SCROLL_OBSERVERS_KEY } from "@weapp-core/constants";
|
|
3
|
+
|
|
4
|
+
//#region src/runtime/hooks/pageScroll.ts
|
|
5
|
+
function runInPageScrollHook(target, task) {
|
|
6
|
+
const state = target;
|
|
7
|
+
const depth = Number(state[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] ?? 0);
|
|
8
|
+
state[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] = depth + 1;
|
|
9
|
+
try {
|
|
10
|
+
return task();
|
|
11
|
+
} finally {
|
|
12
|
+
if (depth === 0) delete state[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY];
|
|
13
|
+
else state[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] = depth;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** 原生方法和动态桥共用一次分发,框架观察器不参与用户 hook 的覆盖优先级。 */
|
|
17
|
+
function callPageScrollHooks(target, args, original) {
|
|
18
|
+
const nested = Number(target[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] ?? 0) > 0;
|
|
19
|
+
return runInPageScrollHook(target, () => {
|
|
20
|
+
if (!nested) {
|
|
21
|
+
callHookList(target, WEVU_PAGE_SCROLL_OBSERVERS_KEY, args);
|
|
22
|
+
callHookList(target, "onPageScroll", args);
|
|
23
|
+
}
|
|
24
|
+
return original?.apply(target, args);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
function ensurePageHookOnInstance(target, name) {
|
|
28
|
+
const page = target;
|
|
29
|
+
const bridges = page[WEVU_PAGE_HOOK_BRIDGES_KEY] ?? (page[WEVU_PAGE_HOOK_BRIDGES_KEY] = {});
|
|
30
|
+
if (typeof bridges[name] === "function") return;
|
|
31
|
+
const original = page[name];
|
|
32
|
+
const bridge = function onWevuPageHookBridge(...args) {
|
|
33
|
+
return callPageScrollHooks(this, args, original);
|
|
34
|
+
};
|
|
35
|
+
bridges[name] = bridge;
|
|
36
|
+
page[name] = bridge;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
//#endregion
|
|
40
|
+
export { callPageScrollHooks, ensurePageHookOnInstance, runInPageScrollHook };
|
|
41
|
+
//# sourceMappingURL=pageScroll.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageScroll.mjs","names":["state"],"sources":["../../../../src/runtime/hooks/pageScroll.ts"],"sourcesContent":["import type { InternalRuntimeState } from '../types'\nimport { WEVU_PAGE_HOOK_BRIDGES_KEY, WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY, WEVU_PAGE_SCROLL_OBSERVERS_KEY } from '@weapp-core/constants'\nimport { callHookList } from './base'\n\ntype PageScrollHandler = (this: InternalRuntimeState, ...args: unknown[]) => unknown\ntype PageScrollHookState = InternalRuntimeState & {\n [WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY]?: number\n [WEVU_PAGE_HOOK_BRIDGES_KEY]?: Partial<Record<'onPageScroll', PageScrollHandler>>\n onPageScroll?: PageScrollHandler\n}\n\nexport function runInPageScrollHook<T>(target: InternalRuntimeState, task: () => T): T {\n const state = target as PageScrollHookState\n const depth = Number(state[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] ?? 0)\n state[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] = depth + 1\n try {\n return task()\n }\n finally {\n if (depth === 0) {\n delete state[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY]\n }\n else {\n state[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] = depth\n }\n }\n}\n\n/** 原生方法和动态桥共用一次分发,框架观察器不参与用户 hook 的覆盖优先级。 */\nexport function callPageScrollHooks(target: InternalRuntimeState, args: unknown[], original?: PageScrollHandler) {\n const state = target as PageScrollHookState\n const nested = Number(state[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] ?? 0) > 0\n return runInPageScrollHook(target, () => {\n if (!nested) {\n // 先缓存真实位置,避免业务 hook 同步导航时读取上一次滚动。\n callHookList(target, WEVU_PAGE_SCROLL_OBSERVERS_KEY, args)\n callHookList(target, 'onPageScroll', args)\n }\n return original?.apply(target, args)\n })\n}\n\nexport function ensurePageHookOnInstance(target: InternalRuntimeState, name: 'onPageScroll') {\n const page = target as PageScrollHookState\n const bridges = page[WEVU_PAGE_HOOK_BRIDGES_KEY] ??= {}\n if (typeof bridges[name] === 'function') {\n return\n }\n const original = page[name]\n const bridge: PageScrollHandler = function onWevuPageHookBridge(...args) {\n return callPageScrollHooks(this, args, original)\n }\n bridges[name] = bridge\n page[name] = bridge\n}\n"],"mappings":";;;;AAWA,SAAgB,oBAAuB,QAA8B,MAAkB;CACrF,MAAM,QAAQ;CACd,MAAM,QAAQ,OAAO,MAAM,oCAAoC,CAAC;CAChE,MAAM,mCAAmC,QAAQ;CACjD,IAAI;EACF,OAAO,KAAK;CACd,UACQ;EACN,IAAI,UAAU,GACZ,OAAO,MAAM;OAGb,MAAM,mCAAmC;CAE7C;AACF;;AAGA,SAAgB,oBAAoB,QAA8B,MAAiB,UAA8B;CAE/G,MAAM,SAAS,OAAOA,OAAM,oCAAoC,CAAC,IAAI;CACrE,OAAO,oBAAoB,cAAc;EACvC,IAAI,CAAC,QAAQ;GAEX,aAAa,QAAQ,gCAAgC,IAAI;GACzD,aAAa,QAAQ,gBAAgB,IAAI;EAC3C;EACA,OAAO,UAAU,MAAM,QAAQ,IAAI;CACrC,CAAC;AACH;AAEA,SAAgB,yBAAyB,QAA8B,MAAsB;CAC3F,MAAM,OAAO;CACb,MAAM,UAAU,KAAK,gCAAL,KAAK,8BAAgC,CAAC;CACtD,IAAI,OAAO,QAAQ,UAAU,YAC3B;CAEF,MAAM,WAAW,KAAK;CACtB,MAAM,SAA4B,SAAS,qBAAqB,GAAG,MAAM;EACvE,OAAO,oBAAoB,MAAM,MAAM,QAAQ;CACjD;CACA,QAAQ,QAAQ;CAChB,KAAK,QAAQ;AACf"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { assertInSetup,
|
|
1
|
+
import { assertInSetup, ensurePageShareMenusOnSetup, ensureSinglePageHookOnInstance, pushHook } from "./base.mjs";
|
|
2
|
+
import { ensurePageHookOnInstance } from "./pageScroll.mjs";
|
|
2
3
|
|
|
3
4
|
//#region src/runtime/hooks/register.ts
|
|
4
5
|
function registerHook(name, handler, options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.mjs","names":[],"sources":["../../../../src/runtime/hooks/register.ts"],"sourcesContent":["import type {\n MiniProgramAddToFavoritesOption,\n MiniProgramLaunchOptions,\n MiniProgramMemoryWarningResult,\n MiniProgramPageLifetime,\n MiniProgramPageNotFoundOptions,\n MiniProgramPageResizeOption,\n MiniProgramPageScrollOption,\n MiniProgramSaveExitState,\n MiniProgramShareAppMessageOption,\n MiniProgramTabItemTapOption,\n MiniProgramThemeChangeResult,\n MiniProgramUnhandledRejectionResult,\n} from '../types'\nimport { assertInSetup,
|
|
1
|
+
{"version":3,"file":"register.mjs","names":[],"sources":["../../../../src/runtime/hooks/register.ts"],"sourcesContent":["import type {\n MiniProgramAddToFavoritesOption,\n MiniProgramLaunchOptions,\n MiniProgramMemoryWarningResult,\n MiniProgramPageLifetime,\n MiniProgramPageNotFoundOptions,\n MiniProgramPageResizeOption,\n MiniProgramPageScrollOption,\n MiniProgramSaveExitState,\n MiniProgramShareAppMessageOption,\n MiniProgramTabItemTapOption,\n MiniProgramThemeChangeResult,\n MiniProgramUnhandledRejectionResult,\n} from '../types'\nimport { assertInSetup, ensurePageShareMenusOnSetup, ensureSinglePageHookOnInstance, pushHook } from './base'\nimport { ensurePageHookOnInstance } from './pageScroll'\n\nfunction registerHook(name: string, handler: (...args: any[]) => any, options?: { single?: boolean }) {\n pushHook(assertInSetup(name), name, handler as any, options as any)\n}\n\n// 生命周期注册辅助方法:必须在 setup() 同步执行阶段调用\nexport function onLaunch(handler: (options: MiniProgramLaunchOptions) => void) {\n registerHook('onLaunch', handler as any)\n}\n\nexport function onPageNotFound(handler: (options: MiniProgramPageNotFoundOptions) => void) {\n registerHook('onPageNotFound', handler as any)\n}\n\nexport function onUnhandledRejection(handler: (options: MiniProgramUnhandledRejectionResult) => void) {\n registerHook('onUnhandledRejection', handler as any)\n}\n\nexport function onThemeChange(handler: (options: MiniProgramThemeChangeResult) => void) {\n registerHook('onThemeChange', handler as any)\n}\n\nexport function onMemoryWarning(handler: (options: MiniProgramMemoryWarningResult) => void) {\n registerHook('onMemoryWarning', handler as any)\n}\n\nexport function onShow(handler: () => void): void\nexport function onShow(handler: (options: MiniProgramLaunchOptions) => void): void\nexport function onShow(handler: ((options?: any) => void)) {\n registerHook('onShow', handler as any)\n}\n\nexport function onLoad(handler: MiniProgramPageLifetime['onLoad']) {\n registerHook('onLoad', handler as any)\n}\n\nexport function onHide(handler: () => void) {\n registerHook('onHide', handler as any)\n}\n\nexport function onUnload(handler: () => void) {\n registerHook('onUnload', handler as any)\n}\n\nexport function onReady(handler: () => void) {\n registerHook('onReady', handler as any)\n}\n\nexport function onPullDownRefresh(handler: MiniProgramPageLifetime['onPullDownRefresh']) {\n registerHook('onPullDownRefresh', handler as any)\n}\n\nexport function onReachBottom(handler: MiniProgramPageLifetime['onReachBottom']) {\n registerHook('onReachBottom', handler as any)\n}\n\nexport function onPageScroll(handler: (opt: MiniProgramPageScrollOption) => void) {\n const instance = assertInSetup('onPageScroll')\n pushHook(instance, 'onPageScroll', handler as any)\n ensurePageHookOnInstance(instance, 'onPageScroll')\n}\n\nexport function onRouteDone(handler: MiniProgramPageLifetime['onRouteDone'] | ((opt?: unknown) => void)) {\n registerHook('onRouteDone', handler as any)\n}\n\nexport function onTabItemTap(handler: (opt: MiniProgramTabItemTapOption) => void) {\n registerHook('onTabItemTap', handler as any)\n}\n\nexport function onResize(handler: (opt: MiniProgramPageResizeOption) => void) {\n registerHook('onResize', handler as any)\n}\n\nexport function onMoved(handler: () => void) {\n registerHook('onMoved', handler as any)\n}\n\nexport function onAttached(handler: () => void) {\n registerHook('onAttached', handler as any)\n}\n\nexport function onDetached(handler: () => void) {\n registerHook('onDetached', handler as any)\n}\n\nexport function onError(handler: (err: any) => void) {\n registerHook('onError', handler as any)\n}\n\nexport function onSaveExitState(handler: () => MiniProgramSaveExitState) {\n registerHook('onSaveExitState', handler as any, { single: true })\n}\n\nexport function onShareAppMessage(handler: (options: MiniProgramShareAppMessageOption) => Record<string, any> | void) {\n const instance = assertInSetup('onShareAppMessage')\n pushHook(instance, 'onShareAppMessage', handler as any, { single: true } as any)\n ensureSinglePageHookOnInstance(instance, 'onShareAppMessage')\n ensurePageShareMenusOnSetup(instance)\n}\n\nexport function onShareTimeline(handler: MiniProgramPageLifetime['onShareTimeline']) {\n const instance = assertInSetup('onShareTimeline')\n pushHook(instance, 'onShareTimeline', handler as any, { single: true } as any)\n ensureSinglePageHookOnInstance(instance, 'onShareTimeline')\n ensurePageShareMenusOnSetup(instance)\n}\n\nexport function onAddToFavorites(handler: (options: MiniProgramAddToFavoritesOption) => Record<string, any> | void) {\n const instance = assertInSetup('onAddToFavorites')\n pushHook(instance, 'onAddToFavorites', handler as any, { single: true } as any)\n ensureSinglePageHookOnInstance(instance, 'onAddToFavorites')\n}\n"],"mappings":";;;;AAiBA,SAAS,aAAa,MAAc,SAAkC,SAAgC;CACpG,SAAS,cAAc,IAAI,GAAG,MAAM,SAAgB,OAAc;AACpE;AAGA,SAAgB,SAAS,SAAsD;CAC7E,aAAa,YAAY,OAAc;AACzC;AAEA,SAAgB,eAAe,SAA4D;CACzF,aAAa,kBAAkB,OAAc;AAC/C;AAEA,SAAgB,qBAAqB,SAAiE;CACpG,aAAa,wBAAwB,OAAc;AACrD;AAEA,SAAgB,cAAc,SAA0D;CACtF,aAAa,iBAAiB,OAAc;AAC9C;AAEA,SAAgB,gBAAgB,SAA4D;CAC1F,aAAa,mBAAmB,OAAc;AAChD;AAIA,SAAgB,OAAO,SAAoC;CACzD,aAAa,UAAU,OAAc;AACvC;AAEA,SAAgB,OAAO,SAA4C;CACjE,aAAa,UAAU,OAAc;AACvC;AAEA,SAAgB,OAAO,SAAqB;CAC1C,aAAa,UAAU,OAAc;AACvC;AAEA,SAAgB,SAAS,SAAqB;CAC5C,aAAa,YAAY,OAAc;AACzC;AAEA,SAAgB,QAAQ,SAAqB;CAC3C,aAAa,WAAW,OAAc;AACxC;AAEA,SAAgB,kBAAkB,SAAuD;CACvF,aAAa,qBAAqB,OAAc;AAClD;AAEA,SAAgB,cAAc,SAAmD;CAC/E,aAAa,iBAAiB,OAAc;AAC9C;AAEA,SAAgB,aAAa,SAAqD;CAChF,MAAM,WAAW,cAAc,cAAc;CAC7C,SAAS,UAAU,gBAAgB,OAAc;CACjD,yBAAyB,UAAU,cAAc;AACnD;AAEA,SAAgB,YAAY,SAA6E;CACvG,aAAa,eAAe,OAAc;AAC5C;AAEA,SAAgB,aAAa,SAAqD;CAChF,aAAa,gBAAgB,OAAc;AAC7C;AAEA,SAAgB,SAAS,SAAqD;CAC5E,aAAa,YAAY,OAAc;AACzC;AAEA,SAAgB,QAAQ,SAAqB;CAC3C,aAAa,WAAW,OAAc;AACxC;AAEA,SAAgB,WAAW,SAAqB;CAC9C,aAAa,cAAc,OAAc;AAC3C;AAEA,SAAgB,WAAW,SAAqB;CAC9C,aAAa,cAAc,OAAc;AAC3C;AAEA,SAAgB,QAAQ,SAA6B;CACnD,aAAa,WAAW,OAAc;AACxC;AAEA,SAAgB,gBAAgB,SAAyC;CACvE,aAAa,mBAAmB,SAAgB,EAAE,QAAQ,KAAK,CAAC;AAClE;AAEA,SAAgB,kBAAkB,SAAoF;CACpH,MAAM,WAAW,cAAc,mBAAmB;CAClD,SAAS,UAAU,qBAAqB,SAAgB,EAAE,QAAQ,KAAK,CAAQ;CAC/E,+BAA+B,UAAU,mBAAmB;CAC5D,4BAA4B,QAAQ;AACtC;AAEA,SAAgB,gBAAgB,SAAqD;CACnF,MAAM,WAAW,cAAc,iBAAiB;CAChD,SAAS,UAAU,mBAAmB,SAAgB,EAAE,QAAQ,KAAK,CAAQ;CAC7E,+BAA+B,UAAU,iBAAiB;CAC1D,4BAA4B,QAAQ;AACtC;AAEA,SAAgB,iBAAiB,SAAmF;CAClH,MAAM,WAAW,cAAc,kBAAkB;CACjD,SAAS,UAAU,oBAAoB,SAAgB,EAAE,QAAQ,KAAK,CAAQ;CAC9E,+BAA+B,UAAU,kBAAkB;AAC7D"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { callHookList, callHookReturn } from "../../../hooks/base.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { callPageScrollHooks } from "../../../hooks/pageScroll.mjs";
|
|
3
3
|
import { WEVU_ROUTE_DONE_CALLED_KEY, WEVU_ROUTE_DONE_IN_TICK_KEY } from "@weapp-core/constants";
|
|
4
4
|
|
|
5
5
|
//#region src/runtime/register/component/lifecycle/optionalHooks.ts
|
|
@@ -19,10 +19,7 @@ function attachOptionalPageLifecycleHooks(pageLifecycleHooks, options) {
|
|
|
19
19
|
if (!hasHook(this, "onReachBottom")) return effectiveOnReachBottom.apply(this, args);
|
|
20
20
|
};
|
|
21
21
|
if (enableOnPageScroll) pageLifecycleHooks.onPageScroll = function onPageScroll(...args) {
|
|
22
|
-
return
|
|
23
|
-
callHookList(this, "onPageScroll", args);
|
|
24
|
-
if (!hasHook(this, "onPageScroll")) return effectiveOnPageScroll.apply(this, args);
|
|
25
|
-
});
|
|
22
|
+
return callPageScrollHooks(this, args, hasHook(this, "onPageScroll") ? void 0 : effectiveOnPageScroll);
|
|
26
23
|
};
|
|
27
24
|
if (enableOnRouteDone) pageLifecycleHooks.onRouteDone = function onRouteDone(...args) {
|
|
28
25
|
if (this[WEVU_ROUTE_DONE_IN_TICK_KEY]) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optionalHooks.mjs","names":[],"sources":["../../../../../../src/runtime/register/component/lifecycle/optionalHooks.ts"],"sourcesContent":["import type { InternalRuntimeState } from '../../../types'\nimport {\n WEVU_ROUTE_DONE_CALLED_KEY,\n WEVU_ROUTE_DONE_IN_TICK_KEY,\n} from '@weapp-core/constants'\nimport { callHookList, callHookReturn } from '../../../hooks'\nimport {
|
|
1
|
+
{"version":3,"file":"optionalHooks.mjs","names":[],"sources":["../../../../../../src/runtime/register/component/lifecycle/optionalHooks.ts"],"sourcesContent":["import type { InternalRuntimeState } from '../../../types'\nimport {\n WEVU_ROUTE_DONE_CALLED_KEY,\n WEVU_ROUTE_DONE_IN_TICK_KEY,\n} from '@weapp-core/constants'\nimport { callHookList, callHookReturn } from '../../../hooks'\nimport { callPageScrollHooks } from '../../../hooks/pageScroll'\n\nexport interface OptionalPageLifecycleHookOptions {\n enableOnSaveExitState: boolean\n enableOnPullDownRefresh: boolean\n enableOnReachBottom: boolean\n enableOnPageScroll: boolean\n enableOnRouteDone: boolean\n enableOnTabItemTap: boolean\n enableOnResize: boolean\n enableOnShareAppMessage: boolean\n enableOnShareTimeline: boolean\n enableOnAddToFavorites: boolean\n effectiveOnSaveExitState: (...args: any[]) => any\n effectiveOnPullDownRefresh: (...args: any[]) => any\n effectiveOnReachBottom: (...args: any[]) => any\n effectiveOnPageScroll: (...args: any[]) => any\n effectiveOnRouteDone: (...args: any[]) => any\n effectiveOnTabItemTap: (...args: any[]) => any\n effectiveOnResize: (...args: any[]) => any\n effectiveOnShareAppMessage: (...args: any[]) => any\n effectiveOnShareTimeline: (...args: any[]) => any\n effectiveOnAddToFavorites: (...args: any[]) => any\n hasHook: (target: InternalRuntimeState, name: string) => boolean\n}\n\nexport function attachOptionalPageLifecycleHooks(\n pageLifecycleHooks: Record<string, any>,\n options: OptionalPageLifecycleHookOptions,\n) {\n const {\n enableOnSaveExitState,\n enableOnPullDownRefresh,\n enableOnReachBottom,\n enableOnPageScroll,\n enableOnRouteDone,\n enableOnTabItemTap,\n enableOnResize,\n enableOnShareAppMessage,\n enableOnShareTimeline,\n enableOnAddToFavorites,\n effectiveOnSaveExitState,\n effectiveOnPullDownRefresh,\n effectiveOnReachBottom,\n effectiveOnPageScroll,\n effectiveOnRouteDone,\n effectiveOnTabItemTap,\n effectiveOnResize,\n effectiveOnShareAppMessage,\n effectiveOnShareTimeline,\n effectiveOnAddToFavorites,\n hasHook,\n } = options\n\n if (enableOnSaveExitState) {\n pageLifecycleHooks.onSaveExitState = function onSaveExitState(this: InternalRuntimeState, ...args: any[]) {\n const ret = callHookReturn(this, 'onSaveExitState', args)\n if (ret !== undefined) {\n return ret\n }\n return effectiveOnSaveExitState.apply(this, args)\n }\n }\n if (enableOnPullDownRefresh) {\n pageLifecycleHooks.onPullDownRefresh = function onPullDownRefresh(this: InternalRuntimeState, ...args: any[]) {\n callHookList(this, 'onPullDownRefresh', args)\n if (!hasHook(this, 'onPullDownRefresh')) {\n return effectiveOnPullDownRefresh.apply(this, args)\n }\n }\n }\n if (enableOnReachBottom) {\n pageLifecycleHooks.onReachBottom = function onReachBottom(this: InternalRuntimeState, ...args: any[]) {\n callHookList(this, 'onReachBottom', args)\n if (!hasHook(this, 'onReachBottom')) {\n return effectiveOnReachBottom.apply(this, args)\n }\n }\n }\n if (enableOnPageScroll) {\n pageLifecycleHooks.onPageScroll = function onPageScroll(this: InternalRuntimeState, ...args: any[]) {\n return callPageScrollHooks(this, args, hasHook(this, 'onPageScroll') ? undefined : effectiveOnPageScroll)\n }\n }\n if (enableOnRouteDone) {\n pageLifecycleHooks.onRouteDone = function onRouteDone(this: InternalRuntimeState, ...args: any[]) {\n if ((this as any)[WEVU_ROUTE_DONE_IN_TICK_KEY]) {\n return\n }\n ;(this as any)[WEVU_ROUTE_DONE_IN_TICK_KEY] = true\n Promise.resolve().then(() => {\n ;(this as any)[WEVU_ROUTE_DONE_IN_TICK_KEY] = false\n })\n ;(this as any)[WEVU_ROUTE_DONE_CALLED_KEY] = true\n callHookList(this, 'onRouteDone', args)\n if (!hasHook(this, 'onRouteDone')) {\n return effectiveOnRouteDone.apply(this, args)\n }\n }\n }\n if (enableOnTabItemTap) {\n pageLifecycleHooks.onTabItemTap = function onTabItemTap(this: InternalRuntimeState, ...args: any[]) {\n callHookList(this, 'onTabItemTap', args)\n if (!hasHook(this, 'onTabItemTap')) {\n return effectiveOnTabItemTap.apply(this, args)\n }\n }\n }\n if (enableOnResize) {\n pageLifecycleHooks.onResize = function onResize(this: InternalRuntimeState, ...args: any[]) {\n callHookList(this, 'onResize', args)\n if (!hasHook(this, 'onResize')) {\n return effectiveOnResize.apply(this, args)\n }\n }\n }\n if (enableOnShareAppMessage) {\n pageLifecycleHooks.onShareAppMessage = function onShareAppMessage(this: InternalRuntimeState, ...args: any[]) {\n const ret = callHookReturn(this, 'onShareAppMessage', args)\n if (ret !== undefined) {\n return ret\n }\n return effectiveOnShareAppMessage.apply(this, args)\n }\n }\n if (enableOnShareTimeline) {\n pageLifecycleHooks.onShareTimeline = function onShareTimeline(this: InternalRuntimeState, ...args: any[]) {\n const ret = callHookReturn(this, 'onShareTimeline', args)\n if (ret !== undefined) {\n return ret\n }\n return effectiveOnShareTimeline.apply(this, args)\n }\n }\n if (enableOnAddToFavorites) {\n pageLifecycleHooks.onAddToFavorites = function onAddToFavorites(this: InternalRuntimeState, ...args: any[]) {\n const ret = callHookReturn(this, 'onAddToFavorites', args)\n if (ret !== undefined) {\n return ret\n }\n return effectiveOnAddToFavorites.apply(this, args)\n }\n }\n}\n"],"mappings":";;;;;AAgCA,SAAgB,iCACd,oBACA,SACA;CACA,MAAM,EACJ,uBACA,yBACA,qBACA,oBACA,mBACA,oBACA,gBACA,yBACA,uBACA,wBACA,0BACA,4BACA,wBACA,uBACA,sBACA,uBACA,mBACA,4BACA,0BACA,2BACA,YACE;CAEJ,IAAI,uBACF,mBAAmB,kBAAkB,SAAS,gBAA4C,GAAG,MAAa;EACxG,MAAM,MAAM,eAAe,MAAM,mBAAmB,IAAI;EACxD,IAAI,QAAQ,QACV,OAAO;EAET,OAAO,yBAAyB,MAAM,MAAM,IAAI;CAClD;CAEF,IAAI,yBACF,mBAAmB,oBAAoB,SAAS,kBAA8C,GAAG,MAAa;EAC5G,aAAa,MAAM,qBAAqB,IAAI;EAC5C,IAAI,CAAC,QAAQ,MAAM,mBAAmB,GACpC,OAAO,2BAA2B,MAAM,MAAM,IAAI;CAEtD;CAEF,IAAI,qBACF,mBAAmB,gBAAgB,SAAS,cAA0C,GAAG,MAAa;EACpG,aAAa,MAAM,iBAAiB,IAAI;EACxC,IAAI,CAAC,QAAQ,MAAM,eAAe,GAChC,OAAO,uBAAuB,MAAM,MAAM,IAAI;CAElD;CAEF,IAAI,oBACF,mBAAmB,eAAe,SAAS,aAAyC,GAAG,MAAa;EAClG,OAAO,oBAAoB,MAAM,MAAM,QAAQ,MAAM,cAAc,IAAI,SAAY,qBAAqB;CAC1G;CAEF,IAAI,mBACF,mBAAmB,cAAc,SAAS,YAAwC,GAAG,MAAa;EAChG,IAAK,KAAa,8BAChB;EAED,AAAC,KAAa,+BAA+B;EAC9C,QAAQ,QAAQ,CAAC,CAAC,WAAW;GAC1B,AAAC,KAAa,+BAA+B;EAChD,CAAC;EACA,AAAC,KAAa,8BAA8B;EAC7C,aAAa,MAAM,eAAe,IAAI;EACtC,IAAI,CAAC,QAAQ,MAAM,aAAa,GAC9B,OAAO,qBAAqB,MAAM,MAAM,IAAI;CAEhD;CAEF,IAAI,oBACF,mBAAmB,eAAe,SAAS,aAAyC,GAAG,MAAa;EAClG,aAAa,MAAM,gBAAgB,IAAI;EACvC,IAAI,CAAC,QAAQ,MAAM,cAAc,GAC/B,OAAO,sBAAsB,MAAM,MAAM,IAAI;CAEjD;CAEF,IAAI,gBACF,mBAAmB,WAAW,SAAS,SAAqC,GAAG,MAAa;EAC1F,aAAa,MAAM,YAAY,IAAI;EACnC,IAAI,CAAC,QAAQ,MAAM,UAAU,GAC3B,OAAO,kBAAkB,MAAM,MAAM,IAAI;CAE7C;CAEF,IAAI,yBACF,mBAAmB,oBAAoB,SAAS,kBAA8C,GAAG,MAAa;EAC5G,MAAM,MAAM,eAAe,MAAM,qBAAqB,IAAI;EAC1D,IAAI,QAAQ,QACV,OAAO;EAET,OAAO,2BAA2B,MAAM,MAAM,IAAI;CACpD;CAEF,IAAI,uBACF,mBAAmB,kBAAkB,SAAS,gBAA4C,GAAG,MAAa;EACxG,MAAM,MAAM,eAAe,MAAM,mBAAmB,IAAI;EACxD,IAAI,QAAQ,QACV,OAAO;EAET,OAAO,yBAAyB,MAAM,MAAM,IAAI;CAClD;CAEF,IAAI,wBACF,mBAAmB,mBAAmB,SAAS,iBAA6C,GAAG,MAAa;EAC1G,MAAM,MAAM,eAAe,MAAM,oBAAoB,IAAI;EACzD,IAAI,QAAQ,QACV,OAAO;EAET,OAAO,0BAA0B,MAAM,MAAM,IAAI;CACnD;AAEJ"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { getCurrentMiniProgramGlobalObject, getCurrentMiniProgramRuntimeCapabilities } from "../../../platform/current.mjs";
|
|
2
2
|
import { getCurrentMiniProgramPages, supportsCurrentMiniProgramRuntimeCapability } from "../../../platform.mjs";
|
|
3
3
|
import { callHookList } from "../../../hooks/base.mjs";
|
|
4
|
-
import {
|
|
4
|
+
import { runInPageScrollHook } from "../../../hooks/pageScroll.mjs";
|
|
5
|
+
import { WEVU_PAGE_SCROLL_EVENT_CONTRACT_KEY } from "@weapp-core/constants";
|
|
5
6
|
|
|
6
7
|
//#region src/runtime/register/component/lifecycle/platform.ts
|
|
7
8
|
let miniProgramGlobalPatched = false;
|
|
@@ -15,17 +16,6 @@ function bindCurrentPageInstance(target) {
|
|
|
15
16
|
function releaseCurrentPageInstance(target) {
|
|
16
17
|
if (currentPageInstance === target) currentPageInstance = void 0;
|
|
17
18
|
}
|
|
18
|
-
function runInPageScrollHook(target, task) {
|
|
19
|
-
const currentDepth = Number(target[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] ?? 0);
|
|
20
|
-
target[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] = currentDepth + 1;
|
|
21
|
-
try {
|
|
22
|
-
return task();
|
|
23
|
-
} finally {
|
|
24
|
-
const nextDepth = Number(target[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] ?? 1) - 1;
|
|
25
|
-
if (nextDepth <= 0) delete target[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY];
|
|
26
|
-
else target[WEVU_PAGE_SCROLL_HOOK_DEPTH_KEY] = nextDepth;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
19
|
function resolvePageOptions(target) {
|
|
30
20
|
const direct = target.options;
|
|
31
21
|
if (direct && typeof direct === "object") return direct;
|
|
@@ -48,16 +38,14 @@ function ensureMiniProgramGlobalPatched() {
|
|
|
48
38
|
return result;
|
|
49
39
|
};
|
|
50
40
|
}
|
|
51
|
-
if (supportsCurrentMiniProgramRuntimeCapability("pageScrollApi")) {
|
|
41
|
+
if (supportsCurrentMiniProgramRuntimeCapability("pageScrollApi") && miniProgramGlobal[WEVU_PAGE_SCROLL_EVENT_CONTRACT_KEY] !== 1) {
|
|
52
42
|
const rawPageScrollTo = miniProgramGlobal.pageScrollTo;
|
|
53
43
|
if (typeof rawPageScrollTo === "function") miniProgramGlobal.pageScrollTo = function pageScrollToPatched(options, ...rest) {
|
|
44
|
+
const pageInstance = currentPageInstance;
|
|
54
45
|
const result = rawPageScrollTo.apply(this, [options, ...rest]);
|
|
55
|
-
if (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
callHookList(pageInstance, "onPageScroll", [options ?? {}]);
|
|
59
|
-
});
|
|
60
|
-
}
|
|
46
|
+
if (pageInstance) runInPageScrollHook(pageInstance, () => {
|
|
47
|
+
callHookList(pageInstance, "onPageScroll", [options ?? {}]);
|
|
48
|
+
});
|
|
61
49
|
return result;
|
|
62
50
|
};
|
|
63
51
|
}
|
|
@@ -91,5 +79,5 @@ function ensurePageShareMenus(options) {
|
|
|
91
79
|
}
|
|
92
80
|
|
|
93
81
|
//#endregion
|
|
94
|
-
export { bindCurrentPageInstance, ensureMiniProgramGlobalPatched, ensurePageShareMenus, getCurrentPageInstance, releaseCurrentPageInstance, resolvePageOptions
|
|
82
|
+
export { bindCurrentPageInstance, ensureMiniProgramGlobalPatched, ensurePageShareMenus, getCurrentPageInstance, releaseCurrentPageInstance, resolvePageOptions };
|
|
95
83
|
//# sourceMappingURL=platform.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.mjs","names":[],"sources":["../../../../../../src/runtime/register/component/lifecycle/platform.ts"],"sourcesContent":["import type { InternalRuntimeState } from '../../../types'\nimport {
|
|
1
|
+
{"version":3,"file":"platform.mjs","names":[],"sources":["../../../../../../src/runtime/register/component/lifecycle/platform.ts"],"sourcesContent":["import type { InternalRuntimeState } from '../../../types'\nimport { WEVU_PAGE_SCROLL_EVENT_CONTRACT_KEY } from '@weapp-core/constants'\nimport { callHookList } from '../../../hooks'\nimport { runInPageScrollHook } from '../../../hooks/pageScroll'\nimport {\n getCurrentMiniProgramGlobalObject,\n getCurrentMiniProgramPages,\n getCurrentMiniProgramRuntimeCapabilities,\n supportsCurrentMiniProgramRuntimeCapability,\n} from '../../../platform'\n\nlet miniProgramGlobalPatched = false\nlet currentPageInstance: InternalRuntimeState | undefined\ntype ShareMenuName = 'shareAppMessage' | 'shareTimeline'\nexport function getCurrentPageInstance() {\n return currentPageInstance\n}\n\nexport function bindCurrentPageInstance(target: InternalRuntimeState) {\n currentPageInstance = target\n}\n\nexport function releaseCurrentPageInstance(target: InternalRuntimeState) {\n if (currentPageInstance === target) {\n currentPageInstance = undefined\n }\n}\n\nexport function resolvePageOptions(target: InternalRuntimeState) {\n const direct = (target as any).options\n if (direct && typeof direct === 'object') {\n return direct\n }\n const pages = getCurrentMiniProgramPages()\n const page = pages[pages.length - 1]\n const options = page && typeof page === 'object' ? (page as any).options : undefined\n if (options && typeof options === 'object') {\n return options\n }\n return {}\n}\n\nexport function ensureMiniProgramGlobalPatched() {\n if (miniProgramGlobalPatched) {\n return\n }\n miniProgramGlobalPatched = true\n const miniProgramGlobal = getCurrentMiniProgramGlobalObject()\n if (!miniProgramGlobal || typeof miniProgramGlobal !== 'object') {\n return\n }\n if (supportsCurrentMiniProgramRuntimeCapability('pullDownRefreshApi')) {\n const rawStartPullDownRefresh = miniProgramGlobal.startPullDownRefresh as ((...args: any[]) => any) | undefined\n if (typeof rawStartPullDownRefresh === 'function') {\n miniProgramGlobal.startPullDownRefresh = function startPullDownRefreshPatched(...args: any[]) {\n const result = rawStartPullDownRefresh.apply(this, args)\n if (currentPageInstance) {\n callHookList(currentPageInstance, 'onPullDownRefresh', [])\n }\n return result\n }\n }\n }\n if (supportsCurrentMiniProgramRuntimeCapability('pageScrollApi') && miniProgramGlobal[WEVU_PAGE_SCROLL_EVENT_CONTRACT_KEY] !== 1) {\n const rawPageScrollTo = miniProgramGlobal.pageScrollTo as ((...args: any[]) => any) | undefined\n if (typeof rawPageScrollTo === 'function') {\n miniProgramGlobal.pageScrollTo = function pageScrollToPatched(options: any, ...rest: any[]) {\n const pageInstance = currentPageInstance\n const result = rawPageScrollTo.apply(this, [options, ...rest])\n if (pageInstance) {\n runInPageScrollHook(pageInstance, () => {\n callHookList(pageInstance, 'onPageScroll', [options ?? {}])\n })\n }\n return result\n }\n }\n }\n}\n\nexport function ensurePageShareMenus(options: {\n enableOnShareAppMessage: boolean\n enableOnShareTimeline: boolean\n}) {\n const { enableOnShareAppMessage, enableOnShareTimeline } = options\n if (!enableOnShareAppMessage && !enableOnShareTimeline) {\n return\n }\n\n if (!supportsCurrentMiniProgramRuntimeCapability('pageShareMenu')) {\n return\n }\n\n const miniProgramGlobal = getCurrentMiniProgramGlobalObject()\n if (!miniProgramGlobal || typeof miniProgramGlobal.showShareMenu !== 'function') {\n return\n }\n\n const runtimeCapabilities = getCurrentMiniProgramRuntimeCapabilities()\n const shouldShowShareAppMessage = runtimeCapabilities.shareTimelineRequiresShareAppMessage\n ? (enableOnShareAppMessage || enableOnShareTimeline)\n : enableOnShareAppMessage\n\n if (!shouldShowShareAppMessage && !enableOnShareTimeline) {\n return\n }\n\n const menus: ShareMenuName[] = []\n if (shouldShowShareAppMessage) {\n menus.push('shareAppMessage')\n }\n if (enableOnShareTimeline) {\n menus.push('shareTimeline')\n }\n\n const payloads = [\n { withShareTicket: true, menus },\n { menus },\n enableOnShareTimeline ? { withShareTicket: true } : undefined,\n enableOnShareTimeline ? {} : undefined,\n undefined,\n ]\n\n for (const payload of payloads) {\n try {\n if (payload === undefined) {\n miniProgramGlobal.showShareMenu()\n }\n else {\n miniProgramGlobal.showShareMenu(payload as any)\n }\n break\n }\n catch {\n // 继续尝试更保守的 payload,兼容不同宿主的 showShareMenu 参数形态。\n }\n }\n}\n"],"mappings":";;;;;;;AAWA,IAAI,2BAA2B;AAC/B,IAAI;AAEJ,SAAgB,yBAAyB;CACvC,OAAO;AACT;AAEA,SAAgB,wBAAwB,QAA8B;CACpE,sBAAsB;AACxB;AAEA,SAAgB,2BAA2B,QAA8B;CACvE,IAAI,wBAAwB,QAC1B,sBAAsB;AAE1B;AAEA,SAAgB,mBAAmB,QAA8B;CAC/D,MAAM,SAAU,OAAe;CAC/B,IAAI,UAAU,OAAO,WAAW,UAC9B,OAAO;CAET,MAAM,QAAQ,2BAA2B;CACzC,MAAM,OAAO,MAAM,MAAM,SAAS;CAClC,MAAM,UAAU,QAAQ,OAAO,SAAS,WAAY,KAAa,UAAU;CAC3E,IAAI,WAAW,OAAO,YAAY,UAChC,OAAO;CAET,OAAO,CAAC;AACV;AAEA,SAAgB,iCAAiC;CAC/C,IAAI,0BACF;CAEF,2BAA2B;CAC3B,MAAM,oBAAoB,kCAAkC;CAC5D,IAAI,CAAC,qBAAqB,OAAO,sBAAsB,UACrD;CAEF,IAAI,4CAA4C,oBAAoB,GAAG;EACrE,MAAM,0BAA0B,kBAAkB;EAClD,IAAI,OAAO,4BAA4B,YACrC,kBAAkB,uBAAuB,SAAS,4BAA4B,GAAG,MAAa;GAC5F,MAAM,SAAS,wBAAwB,MAAM,MAAM,IAAI;GACvD,IAAI,qBACF,aAAa,qBAAqB,qBAAqB,CAAC,CAAC;GAE3D,OAAO;EACT;CAEJ;CACA,IAAI,4CAA4C,eAAe,KAAK,kBAAkB,yCAAyC,GAAG;EAChI,MAAM,kBAAkB,kBAAkB;EAC1C,IAAI,OAAO,oBAAoB,YAC7B,kBAAkB,eAAe,SAAS,oBAAoB,SAAc,GAAG,MAAa;GAC1F,MAAM,eAAe;GACrB,MAAM,SAAS,gBAAgB,MAAM,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;GAC7D,IAAI,cACF,oBAAoB,oBAAoB;IACtC,aAAa,cAAc,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;GAC5D,CAAC;GAEH,OAAO;EACT;CAEJ;AACF;AAEA,SAAgB,qBAAqB,SAGlC;CACD,MAAM,EAAE,yBAAyB,0BAA0B;CAC3D,IAAI,CAAC,2BAA2B,CAAC,uBAC/B;CAGF,IAAI,CAAC,4CAA4C,eAAe,GAC9D;CAGF,MAAM,oBAAoB,kCAAkC;CAC5D,IAAI,CAAC,qBAAqB,OAAO,kBAAkB,kBAAkB,YACnE;CAIF,MAAM,4BADsB,yCACwB,CAAC,CAAC,uCACjD,2BAA2B,wBAC5B;CAEJ,IAAI,CAAC,6BAA6B,CAAC,uBACjC;CAGF,MAAM,QAAyB,CAAC;CAChC,IAAI,2BACF,MAAM,KAAK,iBAAiB;CAE9B,IAAI,uBACF,MAAM,KAAK,eAAe;CAG5B,MAAM,WAAW;EACf;GAAE,iBAAiB;GAAM;EAAM;EAC/B,EAAE,MAAM;EACR,wBAAwB,EAAE,iBAAiB,KAAK,IAAI;EACpD,wBAAwB,CAAC,IAAI;EAC7B;CACF;CAEA,KAAK,MAAM,WAAW,UACpB,IAAI;EACF,IAAI,YAAY,QACd,kBAAkB,cAAc;OAGhC,kBAAkB,cAAc,OAAc;EAEhD;CACF,QACM,CAEN;AAEJ"}
|
|
@@ -83,6 +83,7 @@ function registerComponentDefinition(options) {
|
|
|
83
83
|
if (isPage && layoutHooks) layoutHooks?.attachPageSetter(instance);
|
|
84
84
|
};
|
|
85
85
|
if (isPage) for (const hookName of [
|
|
86
|
+
"onPageScroll",
|
|
86
87
|
"onPullDownRefresh",
|
|
87
88
|
"onReachBottom",
|
|
88
89
|
"onShareAppMessage",
|
|
@@ -301,6 +302,8 @@ function registerComponentDefinition(options) {
|
|
|
301
302
|
attachPageLayoutSetter(instance);
|
|
302
303
|
attachRuntimeLayoutHosts(instance);
|
|
303
304
|
enableDeferredSetData(instance, { rehydrateSetupState: true });
|
|
305
|
+
}, (instance) => {
|
|
306
|
+
runTeardownSteps([() => activeLayoutHosts && layoutHooks?.detachHosts(activeLayoutHosts, instance), () => teardownRuntimeInstance(instance, { skipHooks: true })]);
|
|
304
307
|
});
|
|
305
308
|
if (!statefulHmrBridge.isApplying()) registerNativeComponentDefinition(definition, isPage);
|
|
306
309
|
return definition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerDefinition.mjs","names":[],"sources":["../../../../../src/runtime/register/component/registerDefinition.ts"],"sourcesContent":["import type { LayoutHostBinding, TemplateRefBinding } from '../../capabilities'\nimport type {\n ComponentPropsOptions,\n ComputedDefinitions,\n DefineComponentOptions,\n InternalRuntimeState,\n MethodDefinitions,\n RuntimeApp,\n} from '../../types'\nimport type { WatchMap } from '../watch'\nimport {\n WEAPP_VITE_STATEFUL_HMR_BRIDGE_KEY,\n WEVU_PUBLIC_RUNTIME_KEY,\n WEVU_READY_CALLED_KEY,\n WEVU_RESOLVE_PUBLIC_INSTANCE_METHOD,\n WEVU_RUNTIME_KEY,\n} from '@weapp-core/constants'\nimport { requireRuntimeCapability, runtimeCapabilityRegistry } from '../../capabilities'\nimport { callHookList } from '../../hooks'\nimport { ensureInitialNavigation } from '../../navigationLifecycle'\nimport { getMiniProgramRuntimeGlobalObject } from '../../platform'\nimport { runTeardownSteps } from '../../teardown'\nimport { enableDeferredSetData, mountRuntimeInstance, refreshRuntimeInstance, setRuntimeSetDataVisibility, teardownRuntimeInstance } from '../runtimeInstance'\nimport { registerNativeComponentDefinition } from './registerNativeDefinition'\n\nexport function registerComponentDefinition<D extends object, C extends ComputedDefinitions, M extends MethodDefinitions>(options: {\n runtimeApp: RuntimeApp<D, C, M>\n watch: WatchMap | undefined\n setup: DefineComponentOptions<ComponentPropsOptions, D, C, M>['setup']\n restOptions: Record<string, any>\n pageLifecycleHooks: Record<string, any>\n finalObservers: Record<string, any>\n userLifetimes: Record<string, any>\n userPageLifetimes: Record<string, any>\n finalMethods: Record<string, (...args: any[]) => any>\n finalOptions: Record<string, any>\n applyExtraInstanceFields: (instance: InternalRuntimeState) => void\n templateRefs: TemplateRefBinding[] | undefined\n layoutHosts: LayoutHostBinding[] | undefined\n attachWevuPropKeys: (instance: InternalRuntimeState) => void\n setupLifecycle: 'created' | 'attached'\n syncWevuPropsFromInstance: (instance: InternalRuntimeState) => void\n syncWevuPropsFromValues: (instance: InternalRuntimeState, values: Record<string, unknown> | undefined) => void\n directPropsDerivedKeys: string[]\n isPage: boolean\n vueLifecycles: Record<string, unknown>\n getRuntimeOwnerLabel: (instance: InternalRuntimeState) => string\n registerNative?: boolean\n}) {\n const {\n runtimeApp,\n watch,\n setup,\n restOptions,\n pageLifecycleHooks,\n finalObservers,\n userLifetimes,\n userPageLifetimes,\n finalMethods,\n finalOptions,\n applyExtraInstanceFields,\n templateRefs,\n layoutHosts,\n attachWevuPropKeys,\n setupLifecycle,\n syncWevuPropsFromInstance,\n directPropsDerivedKeys,\n isPage,\n vueLifecycles,\n getRuntimeOwnerLabel,\n registerNative = true,\n } = options\n const activeTemplateRefs = Array.isArray(templateRefs) && templateRefs.length > 0\n ? templateRefs\n : undefined\n const pendingAttachment = new WeakSet<InternalRuntimeState>()\n if (activeTemplateRefs) {\n requireRuntimeCapability('templateRefs', 'registerComponentDefinition(template refs)')\n }\n const activeLayoutHosts = Array.isArray(layoutHosts) && layoutHosts.length > 0\n ? layoutHosts\n : undefined\n const layoutHooks = activeLayoutHosts\n ? requireRuntimeCapability('layout', 'registerComponentDefinition(layout hosts)')\n : undefined\n\n const scheduleTemplateRefs = (instance: InternalRuntimeState, onResolved?: () => void) => {\n if (activeTemplateRefs) {\n runtimeCapabilityRegistry.templateRefs?.schedule(instance, onResolved)\n return\n }\n onResolved?.()\n }\n\n const resolveRuntime = (instance: InternalRuntimeState) => {\n const directRuntime = (instance as any).__wevu ?? (instance as any)[WEVU_PUBLIC_RUNTIME_KEY]\n if (directRuntime) {\n return directRuntime\n }\n const runtimeState = (instance as any).$state\n if (runtimeState && typeof runtimeState === 'object') {\n return (runtimeState as any)[WEVU_RUNTIME_KEY]\n }\n return undefined\n }\n\n const resolveLifecycleContext = (instance: InternalRuntimeState) => {\n const runtimeProxy = resolveRuntime(instance)?.proxy\n if (runtimeProxy) {\n return runtimeProxy\n }\n return runtimeCapabilityRegistry.scopedSlots?.resolveLifecycleProxy(instance) ?? instance\n }\n\n const mountMissingRuntime = (instance: InternalRuntimeState) => {\n const existing = resolveRuntime(instance)\n if (existing) {\n return { runtime: existing, mounted: false }\n }\n applyExtraInstanceFields(instance)\n attachWevuPropKeys(instance)\n mountRuntimeInstance(instance, runtimeApp, watch, setup, {\n deferSetData: true,\n snapshotOmitKeys: directPropsDerivedKeys,\n })\n syncWevuPropsFromInstance(instance)\n enableDeferredSetData(instance)\n return { runtime: resolveRuntime(instance), mounted: true }\n }\n\n const callVueLifecycle = (instance: InternalRuntimeState, name: string, args: any[]) => {\n const hook = vueLifecycles[name]\n if (typeof hook === 'function') {\n return hook.apply(resolveLifecycleContext(instance), args)\n }\n return undefined\n }\n\n const deferPageUntilNavigation = (instance: InternalRuntimeState, task: () => void) => {\n if (!isPage) {\n task()\n return\n }\n const initialNavigationPromise = ensureInitialNavigation(instance as any, undefined, {\n start: false,\n onComplete: (shouldMount) => {\n if (shouldMount) {\n task()\n }\n },\n })\n if (!initialNavigationPromise) {\n task()\n }\n }\n\n const ensureReadyRuntime = (instance: InternalRuntimeState) => {\n if (resolveRuntime(instance) || typeof vueLifecycles.mounted !== 'function') {\n return\n }\n const result = mountMissingRuntime(instance)\n if (result.mounted) {\n callVueLifecycle(instance, 'created', [])\n callVueLifecycle(instance, 'beforeMount', [])\n }\n }\n\n const pageMethodBridges: Record<string, (...args: any[]) => any> = {}\n const attachRuntimeLayoutHosts = (instance: InternalRuntimeState) => {\n if (activeLayoutHosts) {\n layoutHooks?.attachHosts(activeLayoutHosts, instance)\n }\n }\n const attachPageLayoutSetter = (instance: InternalRuntimeState) => {\n if (isPage && layoutHooks) {\n layoutHooks?.attachPageSetter(instance)\n }\n }\n if (isPage) {\n const methodBridgeHookNames = ['onPullDownRefresh', 'onReachBottom', 'onShareAppMessage', 'onShareTimeline', 'onAddToFavorites']\n for (const hookName of methodBridgeHookNames) {\n const pageHook = (pageLifecycleHooks as any)[hookName]\n if (typeof pageHook !== 'function') {\n continue\n }\n if (typeof (finalMethods as any)[hookName] === 'function') {\n continue\n }\n pageMethodBridges[hookName] = function pageMethodBridge(this: InternalRuntimeState, ...args: any[]) {\n return pageHook.apply(this, args)\n }\n }\n }\n\n const componentDefinition = {\n ...restOptions,\n ...(isPage ? pageLifecycleHooks : {}),\n observers: finalObservers,\n lifetimes: {\n ...userLifetimes,\n created: function created(this: InternalRuntimeState, ...args: any[]) {\n pendingAttachment.add(this)\n applyExtraInstanceFields(this)\n attachWevuPropKeys(this)\n if (activeTemplateRefs) {\n runtimeCapabilityRegistry.templateRefs?.attachBindings(this, activeTemplateRefs)\n }\n const runCreated = () => {\n callVueLifecycle(this, 'beforeCreate', args)\n if (setupLifecycle === 'created') {\n try {\n mountRuntimeInstance(this, runtimeApp, watch, setup, {\n deferSetData: true,\n snapshotOmitKeys: directPropsDerivedKeys,\n })\n }\n catch (error) {\n const label = getRuntimeOwnerLabel(this)\n throw new Error(`[wevu] mount runtime failed in created (${label}): ${error instanceof Error ? error.message : String(error)}`)\n }\n syncWevuPropsFromInstance(this)\n attachPageLayoutSetter(this)\n }\n if (typeof (userLifetimes as any).created === 'function') {\n ;(userLifetimes as any).created.apply(this, args)\n }\n }\n deferPageUntilNavigation(this, runCreated)\n },\n moved: function moved(this: InternalRuntimeState, ...args: any[]) {\n callHookList(this, 'onMoved', args)\n if (typeof (userLifetimes as any).moved === 'function') {\n ;(userLifetimes as any).moved.apply(this, args)\n }\n },\n attached: function attached(this: InternalRuntimeState, ...args: any[]) {\n pendingAttachment.delete(this)\n applyExtraInstanceFields(this)\n attachWevuPropKeys(this)\n if (activeTemplateRefs && !runtimeCapabilityRegistry.templateRefs?.hasBindings(this)) {\n runtimeCapabilityRegistry.templateRefs?.attachBindings(this, activeTemplateRefs)\n }\n deferPageUntilNavigation(this, () => {\n if (setupLifecycle !== 'created' || !(this as any).__wevu) {\n try {\n mountRuntimeInstance(this, runtimeApp, watch, setup, {\n deferSetData: true,\n snapshotOmitKeys: directPropsDerivedKeys,\n })\n }\n catch (error) {\n const label = getRuntimeOwnerLabel(this)\n throw new Error(`[wevu] mount runtime failed in attached (${label}): ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n syncWevuPropsFromInstance(this)\n callVueLifecycle(this, 'created', args)\n callVueLifecycle(this, 'beforeMount', args)\n attachPageLayoutSetter(this)\n attachRuntimeLayoutHosts(this)\n enableDeferredSetData(this)\n callHookList(this, 'onAttached', args)\n if (typeof (userLifetimes as any).attached === 'function') {\n ;(userLifetimes as any).attached.apply(this, args)\n }\n })\n },\n ready: function ready(this: InternalRuntimeState, ...args: any[]) {\n // 微信可能向初始条件分支中已被替换、从未 attached 的实例发送 ready。\n // 此时保留原生回调,不得将它当作已挂载实例的 wrapper 丢失而补挂载。\n if (pendingAttachment.has(this)) {\n return userLifetimes.ready?.apply(this, args)\n }\n if (isPage && !(this as any)[WEVU_READY_CALLED_KEY]) {\n const initialNavigationPromise = ensureInitialNavigation(this as any, undefined, {\n start: true,\n onComplete: (shouldMount) => {\n if (shouldMount && !(this as any).__wevuInitialNavigationReady) {\n ;(this as any).__wevuInitialNavigationReady = true\n componentDefinition.lifetimes.ready.call(this, ...args)\n }\n },\n })\n if (initialNavigationPromise && !(this as any).__wevuInitialNavigationReady) {\n return\n }\n }\n ensureReadyRuntime(this)\n if (isPage && typeof (pageLifecycleHooks as any).onReady === 'function') {\n const wasReadyCalled = Boolean((this as any)[WEVU_READY_CALLED_KEY])\n ;(pageLifecycleHooks as any).onReady.call(this, ...args)\n if (!wasReadyCalled) {\n const callMounted = () => callVueLifecycle(this, 'mounted', args)\n const initialNavigationPromise = ensureInitialNavigation(this as any, undefined, {\n start: false,\n onComplete: (shouldMount) => {\n if (shouldMount) {\n callMounted()\n }\n },\n })\n if (!initialNavigationPromise) {\n callMounted()\n }\n }\n if (typeof (userLifetimes as any).ready === 'function') {\n ;(userLifetimes as any).ready.apply(this, args)\n }\n return\n }\n if (!(this as any)[WEVU_READY_CALLED_KEY]) {\n ;(this as any)[WEVU_READY_CALLED_KEY] = true\n syncWevuPropsFromInstance(this)\n runtimeCapabilityRegistry.templateRefs?.scheduleOwner(this)\n scheduleTemplateRefs(this, () => {\n callHookList(this, 'onReady', args)\n callVueLifecycle(this, 'mounted', args)\n if (typeof (userLifetimes as any).ready === 'function') {\n ;(userLifetimes as any).ready.apply(this, args)\n }\n })\n return\n }\n if (typeof (userLifetimes as any).ready === 'function') {\n ;(userLifetimes as any).ready.apply(this, args)\n }\n },\n detached: function detached(this: InternalRuntimeState, ...args: any[]) {\n if (isPage && typeof (pageLifecycleHooks as any).onUnload === 'function') {\n runTeardownSteps([\n () => callVueLifecycle(this, 'beforeUnmount', args),\n () => callVueLifecycle(this, 'beforeDestroy', args),\n () => runtimeCapabilityRegistry.templateRefs?.scheduleOwner(this),\n () => callHookList(this, 'onDetached', args),\n () => (pageLifecycleHooks as any).onUnload.call(this, ...args),\n () => {\n if (typeof (userLifetimes as any).detached === 'function') {\n ;(userLifetimes as any).detached.apply(this, args)\n }\n },\n () => callVueLifecycle(this, 'unmounted', args),\n () => callVueLifecycle(this, 'destroyed', args),\n ])\n return\n }\n runTeardownSteps([\n () => callVueLifecycle(this, 'beforeUnmount', args),\n () => callVueLifecycle(this, 'beforeDestroy', args),\n () => runtimeCapabilityRegistry.templateRefs?.scheduleOwner(this),\n () => callHookList(this, 'onDetached', args),\n () => {\n if (activeLayoutHosts) {\n layoutHooks?.detachHosts(activeLayoutHosts, this)\n }\n },\n () => teardownRuntimeInstance(this),\n () => callVueLifecycle(this, 'unmounted', args),\n () => callVueLifecycle(this, 'destroyed', args),\n () => {\n if (typeof (userLifetimes as any).detached === 'function') {\n ;(userLifetimes as any).detached.apply(this, args)\n }\n },\n ])\n },\n error: function error(this: InternalRuntimeState, ...args: any[]) {\n callHookList(this, 'onError', args)\n if (typeof (userLifetimes as any).error === 'function') {\n ;(userLifetimes as any).error.apply(this, args)\n }\n },\n },\n pageLifetimes: {\n ...userPageLifetimes,\n show: function show(this: InternalRuntimeState, ...args: any[]) {\n if (isPage && typeof (pageLifecycleHooks as any).onShow === 'function') {\n ;(pageLifecycleHooks as any).onShow.call(this, ...args)\n if (typeof (userPageLifetimes as any).show === 'function') {\n ;(userPageLifetimes as any).show.apply(this, args)\n }\n return\n }\n setRuntimeSetDataVisibility(this, true)\n callHookList(this, 'onShow', args)\n if (typeof (userPageLifetimes as any).show === 'function') {\n ;(userPageLifetimes as any).show.apply(this, args)\n }\n },\n hide: function hide(this: InternalRuntimeState, ...args: any[]) {\n if (isPage && typeof (pageLifecycleHooks as any).onHide === 'function') {\n ;(pageLifecycleHooks as any).onHide.call(this, ...args)\n if (typeof (userPageLifetimes as any).hide === 'function') {\n ;(userPageLifetimes as any).hide.apply(this, args)\n }\n return\n }\n setRuntimeSetDataVisibility(this, false)\n callHookList(this, 'onHide', args)\n if (typeof (userPageLifetimes as any).hide === 'function') {\n ;(userPageLifetimes as any).hide.apply(this, args)\n }\n },\n resize: function resize(this: InternalRuntimeState, ...args: any[]) {\n if (isPage && typeof (pageLifecycleHooks as any).onResize === 'function') {\n ;(pageLifecycleHooks as any).onResize.call(this, ...args)\n if (typeof (userPageLifetimes as any).resize === 'function') {\n ;(userPageLifetimes as any).resize.apply(this, args)\n }\n return\n }\n callHookList(this, 'onResize', args)\n if (typeof (userPageLifetimes as any).resize === 'function') {\n ;(userPageLifetimes as any).resize.apply(this, args)\n }\n },\n routeDone: function routeDone(this: InternalRuntimeState, ...args: any[]) {\n if (isPage && typeof (pageLifecycleHooks as any).onRouteDone === 'function') {\n ;(pageLifecycleHooks as any).onRouteDone.call(this, ...args)\n if (typeof (userPageLifetimes as any).routeDone === 'function') {\n ;(userPageLifetimes as any).routeDone.apply(this, args)\n }\n return\n }\n callHookList(this, 'onRouteDone', args)\n if (typeof (userPageLifetimes as any).routeDone === 'function') {\n ;(userPageLifetimes as any).routeDone.apply(this, args)\n }\n },\n },\n methods: {\n ...pageMethodBridges,\n ...finalMethods,\n [WEVU_RESOLVE_PUBLIC_INSTANCE_METHOD]: function resolvePublicInstance(this: InternalRuntimeState) {\n const result = mountMissingRuntime(this)\n if (result.mounted) {\n callVueLifecycle(this, 'created', [])\n callVueLifecycle(this, 'beforeMount', [])\n }\n return result.runtime?.proxy\n },\n },\n options: finalOptions,\n }\n if (!registerNative) {\n return componentDefinition\n }\n\n const statefulHmrBridge = getMiniProgramRuntimeGlobalObject()?.[WEAPP_VITE_STATEFUL_HMR_BRIDGE_KEY]\n if (typeof statefulHmrBridge?.trackWevuComponent === 'function') {\n const definition = statefulHmrBridge.trackWevuComponent(componentDefinition, (\n instance: InternalRuntimeState,\n stateSnapshot?: Record<string, any>,\n ) => {\n refreshRuntimeInstance(instance, runtimeApp, watch, setup, {\n snapshotOmitKeys: directPropsDerivedKeys,\n stateSnapshot,\n })\n syncWevuPropsFromInstance(instance)\n attachPageLayoutSetter(instance)\n attachRuntimeLayoutHosts(instance)\n enableDeferredSetData(instance, { rehydrateSetupState: true })\n })\n if (!statefulHmrBridge.isApplying()) {\n registerNativeComponentDefinition(definition, isPage)\n }\n return definition\n }\n registerNativeComponentDefinition(componentDefinition, isPage)\n return componentDefinition\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registerDefinition.mjs","names":[],"sources":["../../../../../src/runtime/register/component/registerDefinition.ts"],"sourcesContent":["import type { LayoutHostBinding, TemplateRefBinding } from '../../capabilities'\nimport type {\n ComponentPropsOptions,\n ComputedDefinitions,\n DefineComponentOptions,\n InternalRuntimeState,\n MethodDefinitions,\n RuntimeApp,\n} from '../../types'\nimport type { WatchMap } from '../watch'\nimport {\n WEAPP_VITE_STATEFUL_HMR_BRIDGE_KEY,\n WEVU_PUBLIC_RUNTIME_KEY,\n WEVU_READY_CALLED_KEY,\n WEVU_RESOLVE_PUBLIC_INSTANCE_METHOD,\n WEVU_RUNTIME_KEY,\n} from '@weapp-core/constants'\nimport { requireRuntimeCapability, runtimeCapabilityRegistry } from '../../capabilities'\nimport { callHookList } from '../../hooks'\nimport { ensureInitialNavigation } from '../../navigationLifecycle'\nimport { getMiniProgramRuntimeGlobalObject } from '../../platform'\nimport { runTeardownSteps } from '../../teardown'\nimport { enableDeferredSetData, mountRuntimeInstance, refreshRuntimeInstance, setRuntimeSetDataVisibility, teardownRuntimeInstance } from '../runtimeInstance'\nimport { registerNativeComponentDefinition } from './registerNativeDefinition'\n\nexport function registerComponentDefinition<D extends object, C extends ComputedDefinitions, M extends MethodDefinitions>(options: {\n runtimeApp: RuntimeApp<D, C, M>\n watch: WatchMap | undefined\n setup: DefineComponentOptions<ComponentPropsOptions, D, C, M>['setup']\n restOptions: Record<string, any>\n pageLifecycleHooks: Record<string, any>\n finalObservers: Record<string, any>\n userLifetimes: Record<string, any>\n userPageLifetimes: Record<string, any>\n finalMethods: Record<string, (...args: any[]) => any>\n finalOptions: Record<string, any>\n applyExtraInstanceFields: (instance: InternalRuntimeState) => void\n templateRefs: TemplateRefBinding[] | undefined\n layoutHosts: LayoutHostBinding[] | undefined\n attachWevuPropKeys: (instance: InternalRuntimeState) => void\n setupLifecycle: 'created' | 'attached'\n syncWevuPropsFromInstance: (instance: InternalRuntimeState) => void\n syncWevuPropsFromValues: (instance: InternalRuntimeState, values: Record<string, unknown> | undefined) => void\n directPropsDerivedKeys: string[]\n isPage: boolean\n vueLifecycles: Record<string, unknown>\n getRuntimeOwnerLabel: (instance: InternalRuntimeState) => string\n registerNative?: boolean\n}) {\n const {\n runtimeApp,\n watch,\n setup,\n restOptions,\n pageLifecycleHooks,\n finalObservers,\n userLifetimes,\n userPageLifetimes,\n finalMethods,\n finalOptions,\n applyExtraInstanceFields,\n templateRefs,\n layoutHosts,\n attachWevuPropKeys,\n setupLifecycle,\n syncWevuPropsFromInstance,\n directPropsDerivedKeys,\n isPage,\n vueLifecycles,\n getRuntimeOwnerLabel,\n registerNative = true,\n } = options\n const activeTemplateRefs = Array.isArray(templateRefs) && templateRefs.length > 0\n ? templateRefs\n : undefined\n const pendingAttachment = new WeakSet<InternalRuntimeState>()\n if (activeTemplateRefs) {\n requireRuntimeCapability('templateRefs', 'registerComponentDefinition(template refs)')\n }\n const activeLayoutHosts = Array.isArray(layoutHosts) && layoutHosts.length > 0\n ? layoutHosts\n : undefined\n const layoutHooks = activeLayoutHosts\n ? requireRuntimeCapability('layout', 'registerComponentDefinition(layout hosts)')\n : undefined\n\n const scheduleTemplateRefs = (instance: InternalRuntimeState, onResolved?: () => void) => {\n if (activeTemplateRefs) {\n runtimeCapabilityRegistry.templateRefs?.schedule(instance, onResolved)\n return\n }\n onResolved?.()\n }\n\n const resolveRuntime = (instance: InternalRuntimeState) => {\n const directRuntime = (instance as any).__wevu ?? (instance as any)[WEVU_PUBLIC_RUNTIME_KEY]\n if (directRuntime) {\n return directRuntime\n }\n const runtimeState = (instance as any).$state\n if (runtimeState && typeof runtimeState === 'object') {\n return (runtimeState as any)[WEVU_RUNTIME_KEY]\n }\n return undefined\n }\n\n const resolveLifecycleContext = (instance: InternalRuntimeState) => {\n const runtimeProxy = resolveRuntime(instance)?.proxy\n if (runtimeProxy) {\n return runtimeProxy\n }\n return runtimeCapabilityRegistry.scopedSlots?.resolveLifecycleProxy(instance) ?? instance\n }\n\n const mountMissingRuntime = (instance: InternalRuntimeState) => {\n const existing = resolveRuntime(instance)\n if (existing) {\n return { runtime: existing, mounted: false }\n }\n applyExtraInstanceFields(instance)\n attachWevuPropKeys(instance)\n mountRuntimeInstance(instance, runtimeApp, watch, setup, {\n deferSetData: true,\n snapshotOmitKeys: directPropsDerivedKeys,\n })\n syncWevuPropsFromInstance(instance)\n enableDeferredSetData(instance)\n return { runtime: resolveRuntime(instance), mounted: true }\n }\n\n const callVueLifecycle = (instance: InternalRuntimeState, name: string, args: any[]) => {\n const hook = vueLifecycles[name]\n if (typeof hook === 'function') {\n return hook.apply(resolveLifecycleContext(instance), args)\n }\n return undefined\n }\n\n const deferPageUntilNavigation = (instance: InternalRuntimeState, task: () => void) => {\n if (!isPage) {\n task()\n return\n }\n const initialNavigationPromise = ensureInitialNavigation(instance as any, undefined, {\n start: false,\n onComplete: (shouldMount) => {\n if (shouldMount) {\n task()\n }\n },\n })\n if (!initialNavigationPromise) {\n task()\n }\n }\n\n const ensureReadyRuntime = (instance: InternalRuntimeState) => {\n if (resolveRuntime(instance) || typeof vueLifecycles.mounted !== 'function') {\n return\n }\n const result = mountMissingRuntime(instance)\n if (result.mounted) {\n callVueLifecycle(instance, 'created', [])\n callVueLifecycle(instance, 'beforeMount', [])\n }\n }\n\n const pageMethodBridges: Record<string, (...args: any[]) => any> = {}\n const attachRuntimeLayoutHosts = (instance: InternalRuntimeState) => {\n if (activeLayoutHosts) {\n layoutHooks?.attachHosts(activeLayoutHosts, instance)\n }\n }\n const attachPageLayoutSetter = (instance: InternalRuntimeState) => {\n if (isPage && layoutHooks) {\n layoutHooks?.attachPageSetter(instance)\n }\n }\n if (isPage) {\n const methodBridgeHookNames = ['onPageScroll', 'onPullDownRefresh', 'onReachBottom', 'onShareAppMessage', 'onShareTimeline', 'onAddToFavorites']\n for (const hookName of methodBridgeHookNames) {\n const pageHook = (pageLifecycleHooks as any)[hookName]\n if (typeof pageHook !== 'function') {\n continue\n }\n if (typeof (finalMethods as any)[hookName] === 'function') {\n continue\n }\n pageMethodBridges[hookName] = function pageMethodBridge(this: InternalRuntimeState, ...args: any[]) {\n return pageHook.apply(this, args)\n }\n }\n }\n\n const componentDefinition = {\n ...restOptions,\n ...(isPage ? pageLifecycleHooks : {}),\n observers: finalObservers,\n lifetimes: {\n ...userLifetimes,\n created: function created(this: InternalRuntimeState, ...args: any[]) {\n pendingAttachment.add(this)\n applyExtraInstanceFields(this)\n attachWevuPropKeys(this)\n if (activeTemplateRefs) {\n runtimeCapabilityRegistry.templateRefs?.attachBindings(this, activeTemplateRefs)\n }\n const runCreated = () => {\n callVueLifecycle(this, 'beforeCreate', args)\n if (setupLifecycle === 'created') {\n try {\n mountRuntimeInstance(this, runtimeApp, watch, setup, {\n deferSetData: true,\n snapshotOmitKeys: directPropsDerivedKeys,\n })\n }\n catch (error) {\n const label = getRuntimeOwnerLabel(this)\n throw new Error(`[wevu] mount runtime failed in created (${label}): ${error instanceof Error ? error.message : String(error)}`)\n }\n syncWevuPropsFromInstance(this)\n attachPageLayoutSetter(this)\n }\n if (typeof (userLifetimes as any).created === 'function') {\n ;(userLifetimes as any).created.apply(this, args)\n }\n }\n deferPageUntilNavigation(this, runCreated)\n },\n moved: function moved(this: InternalRuntimeState, ...args: any[]) {\n callHookList(this, 'onMoved', args)\n if (typeof (userLifetimes as any).moved === 'function') {\n ;(userLifetimes as any).moved.apply(this, args)\n }\n },\n attached: function attached(this: InternalRuntimeState, ...args: any[]) {\n pendingAttachment.delete(this)\n applyExtraInstanceFields(this)\n attachWevuPropKeys(this)\n if (activeTemplateRefs && !runtimeCapabilityRegistry.templateRefs?.hasBindings(this)) {\n runtimeCapabilityRegistry.templateRefs?.attachBindings(this, activeTemplateRefs)\n }\n deferPageUntilNavigation(this, () => {\n if (setupLifecycle !== 'created' || !(this as any).__wevu) {\n try {\n mountRuntimeInstance(this, runtimeApp, watch, setup, {\n deferSetData: true,\n snapshotOmitKeys: directPropsDerivedKeys,\n })\n }\n catch (error) {\n const label = getRuntimeOwnerLabel(this)\n throw new Error(`[wevu] mount runtime failed in attached (${label}): ${error instanceof Error ? error.message : String(error)}`)\n }\n }\n syncWevuPropsFromInstance(this)\n callVueLifecycle(this, 'created', args)\n callVueLifecycle(this, 'beforeMount', args)\n attachPageLayoutSetter(this)\n attachRuntimeLayoutHosts(this)\n enableDeferredSetData(this)\n callHookList(this, 'onAttached', args)\n if (typeof (userLifetimes as any).attached === 'function') {\n ;(userLifetimes as any).attached.apply(this, args)\n }\n })\n },\n ready: function ready(this: InternalRuntimeState, ...args: any[]) {\n // 微信可能向初始条件分支中已被替换、从未 attached 的实例发送 ready。\n // 此时保留原生回调,不得将它当作已挂载实例的 wrapper 丢失而补挂载。\n if (pendingAttachment.has(this)) {\n return userLifetimes.ready?.apply(this, args)\n }\n if (isPage && !(this as any)[WEVU_READY_CALLED_KEY]) {\n const initialNavigationPromise = ensureInitialNavigation(this as any, undefined, {\n start: true,\n onComplete: (shouldMount) => {\n if (shouldMount && !(this as any).__wevuInitialNavigationReady) {\n ;(this as any).__wevuInitialNavigationReady = true\n componentDefinition.lifetimes.ready.call(this, ...args)\n }\n },\n })\n if (initialNavigationPromise && !(this as any).__wevuInitialNavigationReady) {\n return\n }\n }\n ensureReadyRuntime(this)\n if (isPage && typeof (pageLifecycleHooks as any).onReady === 'function') {\n const wasReadyCalled = Boolean((this as any)[WEVU_READY_CALLED_KEY])\n ;(pageLifecycleHooks as any).onReady.call(this, ...args)\n if (!wasReadyCalled) {\n const callMounted = () => callVueLifecycle(this, 'mounted', args)\n const initialNavigationPromise = ensureInitialNavigation(this as any, undefined, {\n start: false,\n onComplete: (shouldMount) => {\n if (shouldMount) {\n callMounted()\n }\n },\n })\n if (!initialNavigationPromise) {\n callMounted()\n }\n }\n if (typeof (userLifetimes as any).ready === 'function') {\n ;(userLifetimes as any).ready.apply(this, args)\n }\n return\n }\n if (!(this as any)[WEVU_READY_CALLED_KEY]) {\n ;(this as any)[WEVU_READY_CALLED_KEY] = true\n syncWevuPropsFromInstance(this)\n runtimeCapabilityRegistry.templateRefs?.scheduleOwner(this)\n scheduleTemplateRefs(this, () => {\n callHookList(this, 'onReady', args)\n callVueLifecycle(this, 'mounted', args)\n if (typeof (userLifetimes as any).ready === 'function') {\n ;(userLifetimes as any).ready.apply(this, args)\n }\n })\n return\n }\n if (typeof (userLifetimes as any).ready === 'function') {\n ;(userLifetimes as any).ready.apply(this, args)\n }\n },\n detached: function detached(this: InternalRuntimeState, ...args: any[]) {\n if (isPage && typeof (pageLifecycleHooks as any).onUnload === 'function') {\n runTeardownSteps([\n () => callVueLifecycle(this, 'beforeUnmount', args),\n () => callVueLifecycle(this, 'beforeDestroy', args),\n () => runtimeCapabilityRegistry.templateRefs?.scheduleOwner(this),\n () => callHookList(this, 'onDetached', args),\n () => (pageLifecycleHooks as any).onUnload.call(this, ...args),\n () => {\n if (typeof (userLifetimes as any).detached === 'function') {\n ;(userLifetimes as any).detached.apply(this, args)\n }\n },\n () => callVueLifecycle(this, 'unmounted', args),\n () => callVueLifecycle(this, 'destroyed', args),\n ])\n return\n }\n runTeardownSteps([\n () => callVueLifecycle(this, 'beforeUnmount', args),\n () => callVueLifecycle(this, 'beforeDestroy', args),\n () => runtimeCapabilityRegistry.templateRefs?.scheduleOwner(this),\n () => callHookList(this, 'onDetached', args),\n () => {\n if (activeLayoutHosts) {\n layoutHooks?.detachHosts(activeLayoutHosts, this)\n }\n },\n () => teardownRuntimeInstance(this),\n () => callVueLifecycle(this, 'unmounted', args),\n () => callVueLifecycle(this, 'destroyed', args),\n () => {\n if (typeof (userLifetimes as any).detached === 'function') {\n ;(userLifetimes as any).detached.apply(this, args)\n }\n },\n ])\n },\n error: function error(this: InternalRuntimeState, ...args: any[]) {\n callHookList(this, 'onError', args)\n if (typeof (userLifetimes as any).error === 'function') {\n ;(userLifetimes as any).error.apply(this, args)\n }\n },\n },\n pageLifetimes: {\n ...userPageLifetimes,\n show: function show(this: InternalRuntimeState, ...args: any[]) {\n if (isPage && typeof (pageLifecycleHooks as any).onShow === 'function') {\n ;(pageLifecycleHooks as any).onShow.call(this, ...args)\n if (typeof (userPageLifetimes as any).show === 'function') {\n ;(userPageLifetimes as any).show.apply(this, args)\n }\n return\n }\n setRuntimeSetDataVisibility(this, true)\n callHookList(this, 'onShow', args)\n if (typeof (userPageLifetimes as any).show === 'function') {\n ;(userPageLifetimes as any).show.apply(this, args)\n }\n },\n hide: function hide(this: InternalRuntimeState, ...args: any[]) {\n if (isPage && typeof (pageLifecycleHooks as any).onHide === 'function') {\n ;(pageLifecycleHooks as any).onHide.call(this, ...args)\n if (typeof (userPageLifetimes as any).hide === 'function') {\n ;(userPageLifetimes as any).hide.apply(this, args)\n }\n return\n }\n setRuntimeSetDataVisibility(this, false)\n callHookList(this, 'onHide', args)\n if (typeof (userPageLifetimes as any).hide === 'function') {\n ;(userPageLifetimes as any).hide.apply(this, args)\n }\n },\n resize: function resize(this: InternalRuntimeState, ...args: any[]) {\n if (isPage && typeof (pageLifecycleHooks as any).onResize === 'function') {\n ;(pageLifecycleHooks as any).onResize.call(this, ...args)\n if (typeof (userPageLifetimes as any).resize === 'function') {\n ;(userPageLifetimes as any).resize.apply(this, args)\n }\n return\n }\n callHookList(this, 'onResize', args)\n if (typeof (userPageLifetimes as any).resize === 'function') {\n ;(userPageLifetimes as any).resize.apply(this, args)\n }\n },\n routeDone: function routeDone(this: InternalRuntimeState, ...args: any[]) {\n if (isPage && typeof (pageLifecycleHooks as any).onRouteDone === 'function') {\n ;(pageLifecycleHooks as any).onRouteDone.call(this, ...args)\n if (typeof (userPageLifetimes as any).routeDone === 'function') {\n ;(userPageLifetimes as any).routeDone.apply(this, args)\n }\n return\n }\n callHookList(this, 'onRouteDone', args)\n if (typeof (userPageLifetimes as any).routeDone === 'function') {\n ;(userPageLifetimes as any).routeDone.apply(this, args)\n }\n },\n },\n methods: {\n ...pageMethodBridges,\n ...finalMethods,\n [WEVU_RESOLVE_PUBLIC_INSTANCE_METHOD]: function resolvePublicInstance(this: InternalRuntimeState) {\n const result = mountMissingRuntime(this)\n if (result.mounted) {\n callVueLifecycle(this, 'created', [])\n callVueLifecycle(this, 'beforeMount', [])\n }\n return result.runtime?.proxy\n },\n },\n options: finalOptions,\n }\n if (!registerNative) {\n return componentDefinition\n }\n\n const statefulHmrBridge = getMiniProgramRuntimeGlobalObject()?.[WEAPP_VITE_STATEFUL_HMR_BRIDGE_KEY]\n if (typeof statefulHmrBridge?.trackWevuComponent === 'function') {\n const definition = statefulHmrBridge.trackWevuComponent(componentDefinition, (\n instance: InternalRuntimeState,\n stateSnapshot?: Record<string, any>,\n ) => {\n refreshRuntimeInstance(instance, runtimeApp, watch, setup, {\n snapshotOmitKeys: directPropsDerivedKeys,\n stateSnapshot,\n })\n syncWevuPropsFromInstance(instance)\n attachPageLayoutSetter(instance)\n attachRuntimeLayoutHosts(instance)\n enableDeferredSetData(instance, { rehydrateSetupState: true })\n }, (instance: InternalRuntimeState) => {\n // HMR 仅抑制用户卸载钩子;被宿主替换的实例仍须停止响应式任务和原生数据写入。\n runTeardownSteps([\n () => activeLayoutHosts && layoutHooks?.detachHosts(activeLayoutHosts, instance),\n () => teardownRuntimeInstance(instance, { skipHooks: true }),\n ])\n })\n if (!statefulHmrBridge.isApplying()) {\n registerNativeComponentDefinition(definition, isPage)\n }\n return definition\n }\n registerNativeComponentDefinition(componentDefinition, isPage)\n return componentDefinition\n}\n"],"mappings":"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"}
|