@mptool/skyline-enhance
Version:
Lifetime enhance for Wechat dist 3.0 miniapp
1 lines • 40.9 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../shared/dist/index.mjs","../src/constant.ts","../src/emitter/emitter.ts","../src/app/app.ts","../src/component/store.ts","../src/config/config.ts","../src/navigator/navigator.ts","../src/bridge.ts","../src/component/component.ts","../src/page/page.ts"],"sourcesContent":["for(var f=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",d=typeof Uint8Array==\"undefined\"?[]:new Uint8Array(256),g=0;g<f.length;g++)d[f.charCodeAt(g)]=g;var j=function(e){var t=new Uint8Array(e),r,n=t.length,o=\"\";for(r=0;r<n;r+=3)o+=f[t[r]>>2],o+=f[(t[r]&3)<<4|t[r+1]>>4],o+=f[(t[r+1]&15)<<2|t[r+2]>>6],o+=f[t[r+2]&63];return n%3===2?o=o.substring(0,o.length-1)+\"=\":n%3===1&&(o=o.substring(0,o.length-2)+\"==\"),o},A=function(e){var t=e.length*.75,r=e.length,n,o=0,i,u,s,l;e[e.length-1]===\"=\"&&(t--,e[e.length-2]===\"=\"&&t--);var a=new ArrayBuffer(t),p=new Uint8Array(a);for(n=0;n<r;n+=4)i=d[e.charCodeAt(n)],u=d[e.charCodeAt(n+1)],s=d[e.charCodeAt(n+2)],l=d[e.charCodeAt(n+3)],p[o++]=i<<2|u>>4,p[o++]=(u&15)<<4|s>>2,p[o++]=(s&3)<<6|l&63;return a};const h=typeof qq==\"object\"?\"qq\":typeof wx==\"object\"?\"miniapp\"in wx?\"donut\":\"wx\":\"js\";var C=(e,t,r)=>new Promise((n,o)=>{var i=l=>{try{s(r.next(l))}catch(a){o(a)}},u=l=>{try{s(r.throw(l))}catch(a){o(a)}},s=l=>l.done?n(l.value):Promise.resolve(l.value).then(i,u);s((r=r.apply(e,t)).next())});function O(e=new Map){return{all:e,on:(t,r)=>{const n=e.get(t);n?n.push(r):e.set(t,[r])},off:(t,r)=>{const n=e.get(t);n&&(r?n.splice(n.indexOf(r)>>>0,1):e.set(t,[]))},emit:(t,r)=>{let n=e.get(t);n&&n.slice().map(o=>o(r)),n=e.get(\"*\"),n&&n.slice().map(o=>o(t,r))},emitAsync:(t,r)=>C(this,null,function*(){var n,o;yield Promise.all(((n=e.get(t))!=null?n:[]).slice().map(i=>i(r))),yield Promise.all(((o=e.get(\"*\"))!=null?o:[]).slice().map(i=>i(t,r)))})}}var _=Object.defineProperty,E=(e,t,r)=>t in e?_(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,M=(e,t,r)=>E(e,t+\"\",r);class P extends Error{constructor({code:t,message:r}){super(r),M(this,\"code\"),this.code=t!=null?t:null}toString(){return`code: ${this.code}, message: ${this.message}`}}var v;const c=h===\"js\"?console:((v=wx.getRealtimeLogManager)==null?void 0:v.call(wx))||wx.getLogManager({level:1}),y=h!==\"js\"&&\"getRealtimeLogManager\"in wx,Q=(...e)=>{wx.env.DEBUG&&(y?c.info(\"debug\",...e):c.debug(...e)),c!==console&&console.debug(...e)},U=(...e)=>{c.info(...e),c!==console&&console.info(...e)},$=(...e)=>{c.warn(...e),c!==console&&console.warn(...e)},q=(...e)=>{y?c.error(...e):c.warn(\"error\",...e),c!==console&&console.error(...e)},L=e=>{y&&c.setFilterMsg(e)};var B=Object.freeze({__proto__:null,debug:Q,error:q,filter:L,info:U,warn:$});const k=(e=\"\",t=\"&\")=>{const r={},n=e?e.split(t):void 0;return n&&n.length>0&&n.forEach(o=>{const[i,u]=o.split(\"=\");r[i]=u}),r},w=(e={},t=\"&\",r=!1)=>Object.keys(e).map(n=>{const o=e[n];return`${n}=${r?o:encodeURIComponent(o)}`}).join(t),F=(e,t,r=!1)=>{const n=w(t,\"&\",r);return n?`${e}${/[?&]$/u.test(e)?\"\":e.includes(\"?\")?\"&\":\"?\"}${n}`:e};var R=Object.freeze({__proto__:null,join:F,parse:k,stringify:w});const m=e=>{if(e===void 0)return\"undefined\";const t=typeof e;if(t===\"object\"){if(e===null)return\"null\";const r=/\\[object (\\w+)\\]/u.exec(Object.prototype.toString.call(e));return r?r[1].toLowerCase():\"\"}return t},z=e=>m(e)===\"function\";var S=Object.defineProperty,D=(e,t,r)=>t in e?S(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,b=(e,t,r)=>D(e,typeof t!=\"symbol\"?t+\"\":t,r);function G(e,t){return function(...r){if(t.apply(this,r),e)return e.apply(this,r)}}const I=(e,t)=>{let r;return function(...n){if(!r)return r=!0,e.apply(t!=null?t:this,[()=>{r=!1},...n])}},H=(e,t)=>{let r;return function(...n){if(!r)return r=!0,e.apply(t!=null?t:null,n)}};class x{constructor(t=1){this.capacity=t,b(this,\"funcQueue\",[]),b(this,\"running\",0)}next(){const t=this.funcQueue.shift();if(t){const{func:r,ctx:n,args:o}=t,i=()=>{r.apply(n,[()=>{this.running-=1,this.next()},...[].slice.call(o,0)])};this.running+=1,i()}}add(t,r,...n){this.funcQueue.push({func:t,ctx:r,args:[].slice.call(n,0)}),this.running<this.capacity&&this.next()}clear(){this.funcQueue=[]}}const J=(e,t=1)=>{const r=new x(t);return function(...n){r.add(e,this,...n)}};export{O as Emitter,P as MpError,x as Queue,A as decodeBase64,j as encodeBase64,h as env,J as funcQueue,z as isFunction,I as lock,B as logger,H as once,R as query,m as type,G as wrapFunction};\n//# sourceMappingURL=index.mjs.map\n","// App\nexport const ON_APP_AWAKE = \"a\";\n\n// Page\nexport const ON_APP_LAUNCH = \"al\";\n","import type { EmitterInstance } from \"@mptool/shared\";\nimport { Emitter } from \"@mptool/shared\";\n\nimport type { ON_APP_AWAKE, ON_APP_LAUNCH } from \"../constant.js\";\n\nexport interface AppEventType {\n [ON_APP_LAUNCH]: WechatMiniprogram.App.LaunchShowOption;\n [ON_APP_AWAKE]: number;\n}\n\nexport const appEmitter = Emitter<AppEventType>();\n\nexport type UserEmitter = EmitterInstance<WechatMiniprogram.IAnyObject>;\n\nexport const userEmitter: UserEmitter = Emitter();\n","import { logger, wrapFunction } from \"@mptool/shared\";\n\nimport type { AppConstructor, AppOptions } from \"./typings.js\";\nimport { ON_APP_AWAKE, ON_APP_LAUNCH } from \"../constant.js\";\nimport { appEmitter, userEmitter } from \"../emitter/index.js\";\n\nexport const appState = {\n /** 是否已启动 */\n launch: false,\n /** 启动参数 */\n lOpt: {},\n /** 切入后台时的时间戳 */\n hide: 0,\n};\n\nconst appLaunchHandler = (\n options: WechatMiniprogram.App.LaunchShowOption,\n): void => {\n appState.launch = true;\n appState.lOpt = options;\n\n appEmitter.emit(ON_APP_LAUNCH, options);\n};\n\nconst appShowHandler = (): void => {\n // emit onAwake lifeCycle\n if (appState.hide) {\n appEmitter.emit(ON_APP_AWAKE, new Date().getTime() - appState.hide);\n\n // reset timeStamp\n appState.hide = 0;\n }\n};\n\nconst appHideHandler = (): void => {\n appState.hide = new Date().getTime();\n};\n\n/**\n * Application wrapper\n *\n * @param appOptions App Option\n */\nexport const $App: AppConstructor = <\n Custom extends WechatMiniprogram.IAnyObject,\n>(\n appOptions: AppOptions<Custom>,\n): void => {\n appOptions.onLaunch = wrapFunction(appOptions.onLaunch, appLaunchHandler);\n appOptions.onShow = wrapFunction(appOptions.onShow, appShowHandler);\n appOptions.onHide = wrapFunction(appOptions.onHide, appHideHandler);\n\n // 注册 onAwake 监听\n if (appOptions.onAwake) {\n appEmitter.on(ON_APP_AWAKE, (time) => {\n logger.debug(`App: awake after ${time}ms`);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n appOptions.onAwake!(time);\n });\n logger.debug(\"App: registered onAwake\");\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n appOptions.$on = userEmitter.on;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n appOptions.$off = userEmitter.off;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n appOptions.$emit = userEmitter.emit;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n appOptions.$emitAsync = userEmitter.emitAsync;\n\n /**\n * Use app config\n */\n App(appOptions);\n};\n","import type { TrivialComponentInstance } from \"./typings.js\";\n\nconst componentRefs: Record<number, TrivialComponentInstance> = {};\n\nexport const getRef = (id: number): TrivialComponentInstance =>\n componentRefs[id];\n\nexport const setRef = (id: number, value: TrivialComponentInstance): void => {\n componentRefs[id] = value;\n};\n\nexport const removeRef = (id: number): void => {\n delete componentRefs[id];\n};\n","import { isFunction } from \"@mptool/shared\";\n\nimport type {\n AppConfigCommonOptions,\n AppConfigOptions,\n RouteCustomConfig,\n RoutePathConfig,\n} from \"./typings.js\";\n\nexport interface Config\n extends Omit<AppConfigOptions, \"defaultPage\" | \"pages\"> {\n /**\n * @returns route\n */\n getPath: (pageName: string) => string;\n}\n\nlet appConfig: Config | null;\n\nexport const $Config = (config: AppConfigOptions): void => {\n const {\n defaultPage,\n getPath,\n pages = [],\n ...options\n } = config as Required<\n AppConfigCommonOptions & RoutePathConfig & RouteCustomConfig\n >;\n\n if (isFunction(getPath)) {\n appConfig = {\n ...options,\n getPath,\n };\n\n return;\n }\n\n let nameToRouteMap: Record<string, string> = {};\n\n const addRoute = (name: string, route: string): void => {\n const actualRoute = route.replace(/\\$name/g, name);\n\n nameToRouteMap[name] = actualRoute;\n };\n\n if (Array.isArray(pages)) {\n pages.forEach(([name, route]) => {\n if (typeof name === \"string\") addRoute(name, route);\n else name.forEach((item) => addRoute(item, route));\n });\n } else if (typeof pages === \"object\") {\n nameToRouteMap = pages;\n }\n\n appConfig = {\n ...options,\n\n getPath: (name: string): string =>\n nameToRouteMap[name] || defaultPage.replace(/\\$name/g, name),\n };\n};\n\nexport const getConfig = (): Config => {\n if (!appConfig) throw new Error(\"$Config is not called\");\n\n return appConfig;\n};\n","import { getConfig } from \"../config/index.js\";\n\nexport type NavigatorType =\n | \"navigateTo\"\n | \"redirectTo\"\n | \"switchTab\"\n | \"reLaunch\";\n\nexport const getFullPath = (pageNameWithArg: string): string => {\n const config = getConfig();\n const [pageName, queryString] = pageNameWithArg.split(\"?\");\n const path = pageName.startsWith(\"/\") ? pageName : config.getPath(pageName);\n\n return `${path}${queryString ? `?${queryString}` : \"\"}`;\n};\n\nexport function getTrigger(\n type: \"navigateTo\",\n): (\n pageName: string,\n) => Promise<WechatMiniprogram.NavigateToSuccessCallbackResult>;\nexport function getTrigger(\n type: \"redirectTo\" | \"switchTab\" | \"reLaunch\",\n): (pageName: string) => Promise<WechatMiniprogram.GeneralCallbackResult>;\n\n/**\n * Navigation trigger\n */\nexport function getTrigger(\n type: NavigatorType,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): (pageNameWithArg: string) => any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (pageNameWithArg: string): any => {\n // @ts-expect-error: argument can not union\n\n return wx[type]({ url: getFullPath(pageNameWithArg) });\n };\n}\n","import type {\n ComponentOptions,\n InferPropTypes,\n PropsOptions,\n TrivialComponentInstance,\n} from \"./component/index.js\";\nimport { getRef } from \"./component/store\";\nimport { getConfig } from \"./config/index.js\";\nimport { userEmitter } from \"./emitter/index.js\";\nimport { getTrigger } from \"./navigator/index.js\";\nimport type {\n ExtendedPageMethods,\n PageInstance,\n PageOptions,\n TrivialPageInstance,\n} from \"./page/index.js\";\n\nexport type NavigatorType =\n | \"navigateTo\"\n | \"reLaunch\"\n | \"switchTab\"\n | \"redirectTo\";\n\nexport type NavigatorOptionsType =\n | WechatMiniprogram.NavigateToOption\n | WechatMiniprogram.ReLaunchOption\n | WechatMiniprogram.RedirectToOption\n | WechatMiniprogram.SwitchTabOption;\n\nexport const go = getTrigger(\"navigateTo\");\nexport const redirect = getTrigger(\"redirectTo\");\nexport const switchTab = getTrigger(\"switchTab\");\nexport const reLaunch = getTrigger(\"reLaunch\");\n\nfunction clickHandlerFactory(\n action: (pageName: string) => Promise<unknown>,\n): (event: WechatMiniprogram.Touch) => Promise<void> | void {\n return function touchHandler(\n this: TrivialPageInstance,\n event?: WechatMiniprogram.TouchEvent<\n WechatMiniprogram.IAnyObject,\n WechatMiniprogram.IAnyObject,\n { before?: string; after?: string; url?: string }\n >,\n ): Promise<void> | void {\n if (event) {\n const { before, after, url } = event.currentTarget.dataset as {\n before?: string;\n after?: string;\n url?: string;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this && before && typeof this[before] === \"function\")\n (this[before] as (event: WechatMiniprogram.Touch) => void)(event);\n\n if (url)\n return action(url).then(() => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this && after && typeof this[after] === \"function\")\n (this[after] as (event: WechatMiniprogram.Touch) => void)(event);\n });\n }\n };\n}\n\nconst bindGo = clickHandlerFactory(go);\nconst bindRedirect = clickHandlerFactory(redirect);\nconst bindSwitch = clickHandlerFactory(switchTab);\nconst bindRelaunch = clickHandlerFactory(reLaunch);\n\n/**\n * 返回,默认返回上一页\n *\n * @param [delta=1] 后退层数\n */\nconst back = (delta = 1): Promise<WechatMiniprogram.GeneralCallbackResult> => {\n const { home } = getConfig();\n\n return getCurrentPages().length <= delta && home\n ? reLaunch(home)\n : wx.navigateBack({ delta });\n};\n\nconst bindBack = function touchHandler(\n this: TrivialPageInstance,\n event?: WechatMiniprogram.TouchEvent<\n WechatMiniprogram.IAnyObject,\n WechatMiniprogram.IAnyObject,\n { before?: string; after?: string; delta?: number }\n >,\n): Promise<void> | void {\n if (event) {\n const { before, after, delta = 1 } = event.currentTarget.dataset;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this && before && typeof this[before] === \"function\")\n (this[before] as (event: WechatMiniprogram.Touch) => void)(event);\n\n return Promise.resolve(back(Number(delta))).then(() => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this && after && typeof this[after] === \"function\")\n (this[after] as (event: WechatMiniprogram.Touch) => void)(event);\n });\n }\n};\n\n/**\n * 获得页面实例\n *\n * @returns 页面实例对象\n */\nconst getPage = <\n Data extends WechatMiniprogram.IAnyObject = WechatMiniprogram.IAnyObject,\n Custom extends WechatMiniprogram.IAnyObject = WechatMiniprogram.IAnyObject,\n>(): PageInstance<Data, Custom> =>\n getCurrentPages().slice(0).pop() as PageInstance<Data, Custom>;\n\nexport function bind(\n this: TrivialComponentInstance,\n touchEvent: WechatMiniprogram.Touch<{\n id: number;\n event: string;\n args: unknown[];\n }>,\n): void {\n const { args, event, id } = touchEvent.detail;\n\n switch (event) {\n // run private attach\n case \"$attached\": {\n const ref = getRef(id) as TrivialComponentInstance | undefined;\n\n if (!ref) break;\n\n const refName = ref.$refID;\n\n if (refName) this.$refs[refName] = ref;\n\n ref.$attached(this);\n break;\n }\n default: {\n const method = this[event] as\n | ((...args: unknown[]) => unknown)\n | undefined;\n\n if (method) method.apply(this, args);\n }\n }\n}\n\n/**\n * 挂载页面方法\n *\n * @param ctx 需要挂载页面的指针\n */\nexport function mount<\n Data extends WechatMiniprogram.IAnyObject,\n Custom extends WechatMiniprogram.IAnyObject,\n>(\n ctx: PageOptions<Data, Custom> & Partial<ExtendedPageMethods<Data, Custom>>,\n): void;\n\n/**\n * 挂载组件方法\n *\n * @param ctx 需要挂载组件的指针\n */\nexport function mount<\n Data extends WechatMiniprogram.Component.DataOption,\n Property extends PropsOptions,\n Method extends WechatMiniprogram.Component.MethodOption,\n Behavior extends WechatMiniprogram.Component.BehaviorOption,\n InstanceProps extends WechatMiniprogram.IAnyObject = Record<never, never>,\n IsPage extends boolean = false,\n>(\n ctx: ComponentOptions<\n Data,\n Property,\n Method,\n Behavior,\n InstanceProps,\n IsPage\n > &\n Partial<\n ExtendedPageMethods<\n Data & InferPropTypes<Property>,\n InstanceProps &\n Method &\n (IsPage extends true\n ? WechatMiniprogram.Page.ILifetime\n : Record<never, never>)\n >\n >,\n): void;\n\nexport function mount(\n ctx: Partial<\n ExtendedPageMethods<\n WechatMiniprogram.IAnyObject,\n WechatMiniprogram.IAnyObject\n >\n > &\n WechatMiniprogram.IAnyObject,\n): void {\n const config = getConfig();\n\n ctx.$ = bind;\n\n // 实例引用集合\n ctx.$refs = {};\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ctx.$on = userEmitter.on;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ctx.$off = userEmitter.off;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ctx.$emit = userEmitter.emit;\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ctx.$emitAsync = userEmitter.emitAsync;\n\n // 路由方法\n ctx.$go = go;\n ctx.$redirect = redirect;\n ctx.$switch = switchTab;\n ctx.$reLaunch = reLaunch;\n ctx.$back = back;\n\n // 页面信息\n ctx.$currentPage = getPage;\n ctx.$getPath = config.getPath;\n\n // 点击跳转代理\n ctx.$bindGo = bindGo;\n ctx.$bindRedirect = bindRedirect;\n ctx.$bindSwitch = bindSwitch;\n ctx.$bindRelaunch = bindRelaunch;\n ctx.$bindBack = bindBack;\n}\n","import { logger, wrapFunction } from \"@mptool/shared\";\n\nimport { getRef, removeRef, setRef } from \"./store.js\";\nimport type {\n ComponentConstructor,\n ComponentInstance,\n ComponentOptions,\n PropsOptions,\n TrivialComponentInstance,\n TrivialComponentOptions,\n} from \"./typings.js\";\nimport { bind, mount } from \"../bridge.js\";\nimport { getConfig } from \"../config/index.js\";\nimport type { TrivialPageInstance } from \"../page/index.js\";\n\nlet componentIndex = 0;\n\nexport const handleProperties = (\n oldProps: PropsOptions = {},\n): WechatMiniprogram.Component.PropertyOption => {\n const props: WechatMiniprogram.Component.PropertyOption = {};\n\n Object.keys(oldProps).forEach((propertyName) => {\n const advancedValue = oldProps[propertyName];\n\n // Constructor or null\n if (advancedValue === null || typeof advancedValue === \"function\") {\n props[propertyName] =\n advancedValue as WechatMiniprogram.Component.ShortProperty;\n } else {\n const { type } = advancedValue;\n\n // null type\n if (type === null)\n props[propertyName] = {\n type: null,\n value: advancedValue.default,\n };\n // array type, should push rest into `optionalTypes`\n else if (Array.isArray(type))\n // array type syntax\n props[propertyName] = {\n // @ts-expect-error: Force set prop config\n type: type[0],\n value: advancedValue.default,\n\n // @ts-expect-error: Force set prop config\n optionalTypes: type.slice(1),\n };\n else\n props[propertyName] = {\n // @ts-expect-error: Force set prop config\n type,\n value: advancedValue.default,\n };\n }\n });\n\n return {\n ...props,\n // add ref\n ref: { type: String, value: \"\" },\n };\n};\n\n/**\n * 组件注册器\n *\n * @param options 注册选项\n */\nexport const $Component: ComponentConstructor = <\n Data extends WechatMiniprogram.Component.DataOption,\n Property extends PropsOptions,\n Method extends WechatMiniprogram.Component.MethodOption,\n Behavior extends WechatMiniprogram.Component.BehaviorOption,\n InstanceProps extends WechatMiniprogram.IAnyObject = Record<never, never>,\n IsPage extends boolean = false,\n>(\n options: ComponentOptions<\n Data,\n Property,\n Method,\n Behavior,\n InstanceProps,\n IsPage\n >,\n): string => {\n // extend page config\n const { extendComponent, injectComponent } = getConfig();\n\n if (extendComponent)\n extendComponent(options as unknown as TrivialComponentOptions);\n\n // ensure lifetimes\n if (!options.lifetimes) options.lifetimes = {};\n\n options.lifetimes.created = wrapFunction(\n options.lifetimes.created,\n function init(\n this: ComponentInstance<\n Data,\n Property,\n Method,\n Behavior,\n InstanceProps,\n IsPage\n >,\n ) {\n mount(this);\n if (injectComponent)\n injectComponent(options as unknown as TrivialComponentOptions);\n },\n );\n\n options.lifetimes.attached = wrapFunction(\n options.lifetimes.attached,\n // set id and save ref\n function (\n this: ComponentInstance<\n Data,\n Property,\n Method,\n Behavior,\n InstanceProps,\n IsPage\n >,\n ) {\n const id = (componentIndex += 1);\n\n this.$id = id;\n setRef(id, this);\n this.$refID = this.data.ref as string;\n\n this.triggerEvent(\"ing\", { id: this.$id, event: \"$attached\" });\n },\n );\n\n options.lifetimes.detached = wrapFunction(\n options.lifetimes.detached,\n // remove saved ref\n function (\n this: ComponentInstance<\n Data,\n Property,\n Method,\n Behavior,\n InstanceProps,\n IsPage\n >,\n ) {\n removeRef(this.$id);\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const $refs = this.$parent?.$refs;\n const refName = this.$refID;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (refName && $refs) delete $refs[refName];\n\n // @ts-expect-error: $parent is not optional\n delete this.$parent;\n },\n );\n\n // @ts-expect-error: Force adding methods\n options.methods = {\n ...options.methods,\n\n // inject methods\n\n $call(\n this: ComponentInstance<\n Data,\n Property,\n Method,\n Behavior,\n InstanceProps,\n IsPage\n >,\n method: string,\n ...args: any[]\n ): void {\n logger.debug(`Component ${this.$id} call ${method}:`, args);\n this.triggerEvent(\"ing\", {\n id: this.$id,\n event: method,\n args,\n });\n },\n\n $getRef: getRef,\n\n // Setting $root and $parent, called by parent\n $attached(\n this: ComponentInstance<\n Data,\n Property,\n Method,\n Behavior,\n InstanceProps,\n IsPage\n >,\n parent: TrivialComponentInstance | TrivialPageInstance,\n ): void {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this.$root = (parent.$root as TrivialPageInstance) || parent;\n this.$parent = parent;\n },\n\n $: bind,\n };\n\n options.observers = {\n ...options.observers,\n // add ref observer to support dynamic ref\n ref(\n this: ComponentInstance<\n Data,\n Property,\n Method,\n Behavior,\n InstanceProps,\n IsPage\n >,\n value: string,\n ): void {\n if (this.$refID && this.$refID !== value) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.$parent?.$refs) delete this.$parent.$refs[this.$refID];\n\n this.$refID = value;\n logger.debug(`Component ${this.$id} ref: ${value}`);\n }\n },\n };\n\n // @ts-expect-error: convert prop config\n options.properties = handleProperties(options.props);\n delete options.props;\n\n // we cast properties into syntax that miniprogram can handle\n return Component(\n options as unknown as WechatMiniprogram.Component.Options<\n Data,\n WechatMiniprogram.Component.PropertyOption,\n Method,\n Behavior,\n InstanceProps,\n IsPage\n >,\n );\n};\n","import { logger, wrapFunction } from \"@mptool/shared\";\n\nimport type { PageConstructor, PageOptions } from \"./typings.js\";\nimport { mount } from \"../bridge.js\";\nimport { getConfig } from \"../config/index.js\";\nimport { ON_APP_AWAKE } from \"../constant.js\";\nimport { appEmitter } from \"../emitter/index.js\";\n\nlet shouldBeFirstPage = true;\n\nexport const $Page: PageConstructor = <\n Data extends WechatMiniprogram.IAnyObject,\n Custom extends WechatMiniprogram.IAnyObject,\n>(\n name: string,\n options: PageOptions<Data, Custom>,\n): void => {\n const { extendPage, injectPage } = getConfig();\n\n const callLog = (lifeCycle: string, args?: unknown): void =>\n logger.debug(`Page ${name}: ${lifeCycle} has been invoked`, args || \"\");\n const registerLog = (lifeCycle: string): void =>\n logger.debug(`Page ${name}: registered ${lifeCycle}`);\n\n // extend page config\n if (extendPage) extendPage(name, options);\n\n options.$name = name;\n\n options.$state = {\n /** 是否是首个启动页面 */\n firstOpen: false,\n };\n\n options.onLoad = wrapFunction(options.onLoad, (): void => {\n // After onLoad, onAwake is valid if defined\n if (options.onAwake) {\n appEmitter.on(ON_APP_AWAKE, (time: number) => {\n callLog(\"onAwake\");\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n void options.onAwake!(time);\n });\n registerLog(\"onAwake\");\n }\n\n if (shouldBeFirstPage) {\n shouldBeFirstPage = false;\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n options.$state!.firstOpen = true;\n }\n });\n\n mount(options);\n\n // extend page config\n if (injectPage) injectPage(name, options);\n\n // called before register\n if (options.onRegister) {\n callLog(\"onRegister\");\n options.onRegister();\n }\n\n // register page\n Page(options as WechatMiniprogram.Page.Options<Data, Custom>);\n\n logger.debug(`Registered: Page ${name}`);\n};\n"],"names":["f","d","g","j","r","n","o","A","i","u","s","l","a","p","h","C","O","_","E","M","P$2","v","c","y","Q","U","$","q","L","B","k","w","F","R","m","z","S","D","b","G","I","H","x","J","ON_APP_AWAKE","ON_APP_LAUNCH","appEmitter","Emitter","userEmitter","appState","appLaunchHandler","options","appShowHandler","appHideHandler","$App","appOptions","wrapFunction","time","logger","componentRefs","getRef","id","setRef","value","removeRef","P","appConfig","$Config","config","_a","defaultPage","getPath","pages","__objRest","isFunction","__spreadProps","__spreadValues","nameToRouteMap","addRoute","name","route","actualRoute","item","getConfig","getFullPath","pageNameWithArg","pageName","queryString","getTrigger","type","go","redirect","switchTab","reLaunch","clickHandlerFactory","action","event","before","after","url","bindGo","bindRedirect","bindSwitch","bindRelaunch","back","delta","home","bindBack","getPage","bind","touchEvent","args","ref","refName","method","mount","ctx","componentIndex","handleProperties","oldProps","props","propertyName","advancedValue","$Component","extendComponent","injectComponent","$refs","parent","shouldBeFirstPage","$Page","extendPage","injectPage","callLog","lifeCycle","registerLog"],"mappings":"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"}