@mptool/enhance
Version:
Lifetime enhance for QQ/Wechat miniapp
1 lines • 47.3 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,a,l;e[e.length-1]===\"=\"&&(t--,e[e.length-2]===\"=\"&&t--);var s=new ArrayBuffer(t),p=new Uint8Array(s);for(n=0;n<r;n+=4)i=d[e.charCodeAt(n)],u=d[e.charCodeAt(n+1)],a=d[e.charCodeAt(n+2)],l=d[e.charCodeAt(n+3)],p[o++]=i<<2|u>>4,p[o++]=(u&15)<<4|a>>2,p[o++]=(a&3)<<6|l&63;return s};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{a(r.next(l))}catch(s){o(s)}},u=l=>{try{a(r.throw(l))}catch(s){o(s)}},a=l=>l.done?n(l.value):Promise.resolve(l.value).then(i,u);a((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(null,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\";\nexport const ON_PAGE_NAVIGATE = \"n\";\nexport const ON_PAGE_PRELOAD = \"p\";\nexport const ON_PAGE_READY = \"r\";\nexport const ON_PAGE_UNLOAD = \"u\";\n","import type { EmitterInstance } from \"@mptool/shared\";\nimport { Emitter } from \"@mptool/shared\";\n\nimport type {\n ON_APP_AWAKE,\n ON_APP_LAUNCH,\n ON_PAGE_READY,\n ON_PAGE_UNLOAD,\n} from \"../constant.js\";\nimport type { PageQuery } from \"../page/index.js\";\n\nexport interface AppEventType {\n [ON_APP_LAUNCH]: WechatMiniprogram.App.LaunchShowOption;\n [ON_APP_AWAKE]: number;\n [ON_PAGE_READY]: void;\n [ON_PAGE_UNLOAD]: void;\n}\n\nexport type RouteEventType = Record<string, PageQuery>;\n\nexport const appEmitter = Emitter<AppEventType>();\n\nexport const routeEmitter = Emitter<RouteEventType>();\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 // 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 * 获得页面路径\n *\n * @param pageName 页面简称\n * @returns 页面路径\n */\n getPath: (pageName: string) => string;\n}\n\nlet appConfig: Config | null;\n\nexport const $Config = (config: AppConfigOptions): void => {\n const {\n defaultPage: defaultPage,\n pages: pages = [],\n getPath,\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 let routeToNameMap: 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 routeToNameMap[actualRoute] = name;\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 routeToNameMap = Object.fromEntries(\n Object.keys(pages).map((route) => [pages[route], route]),\n );\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 { query } from \"@mptool/shared\";\n\nimport { getConfig } from \"../config/index.js\";\nimport {\n ON_PAGE_NAVIGATE,\n ON_PAGE_READY,\n ON_PAGE_UNLOAD,\n} from \"../constant.js\";\nimport { appEmitter, routeEmitter } from \"../emitter/index.js\";\nimport type { PageQuery } from \"../page/index.js\";\n\nexport interface NavigatorTriggerOptions {\n fullPath: string;\n pageName: string;\n url: string;\n query: PageQuery;\n}\n\nlet canNavigate = true;\n\nexport type NavigatorType =\n | \"navigateTo\"\n | \"redirectTo\"\n | \"switchTab\"\n | \"reLaunch\";\n\nexport interface PathDetails {\n path: string;\n query: PageQuery;\n url: string;\n}\n\nexport const getPathDetail = (pageNameWithArg: string): PathDetails => {\n const config = getConfig();\n const [pageName, queryString] = pageNameWithArg.split(\"?\");\n const path = pageName.startsWith(\"/\") ? pageName : config.getPath(pageName);\n\n return {\n path,\n query: query.parse(queryString),\n url: `${path}${queryString ? `?${queryString}` : \"\"}`,\n };\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 if (canNavigate) {\n // set navigate lock\n canNavigate = false;\n\n const { path, url, query } = getPathDetail(pageNameWithArg);\n\n return Promise.race([\n routeEmitter.emitAsync(`${ON_PAGE_NAVIGATE}:${path}`, query),\n // 等待最小延迟\n new Promise<void>((resolve) => {\n setTimeout(() => resolve(), getConfig().maxDelay ?? 200);\n }),\n ]).then(() => {\n // release navigate lock\n canNavigate = true;\n\n // @ts-expect-error: argument can not union\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return wx[type]({ url });\n });\n }\n };\n}\n\n// release navigate lock with $minInterval ms delay after pageReady triggers\nappEmitter.on(ON_PAGE_READY, () => {\n setTimeout(() => {\n canNavigate = true;\n }, getConfig().minInterval ?? 100);\n});\n\n// release navigate lock on page unload\nappEmitter.on(ON_PAGE_UNLOAD, () => {\n canNavigate = true;\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 { ON_PAGE_PRELOAD } from \"./constant.js\";\nimport { routeEmitter, userEmitter } from \"./emitter/index.js\";\nimport { getPathDetail, 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\n/**\n * 预加载\n *\n * @param pageNameWithArg 需要预加载的地址\n */\nconst preload = (pageNameWithArg: string): void => {\n /** 页面名称 */\n const { path, query } = getPathDetail(pageNameWithArg);\n\n routeEmitter.emit(`${ON_PAGE_PRELOAD}:${path}`, query);\n};\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.$preload = preload;\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 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, PageQuery } from \"./typings.js\";\nimport { appState } from \"../app/index.js\";\nimport { mount } from \"../bridge.js\";\nimport { getConfig } from \"../config/index.js\";\nimport {\n ON_APP_AWAKE,\n ON_APP_LAUNCH,\n ON_PAGE_NAVIGATE,\n ON_PAGE_PRELOAD,\n ON_PAGE_READY,\n ON_PAGE_UNLOAD,\n} from \"../constant.js\";\nimport { appEmitter, routeEmitter } 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 { getPath: getRoute, extendPage, injectPage } = getConfig();\n const route = getRoute(name);\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 if (options.onAppLaunch) {\n if (appState.launch) {\n const { lOpt: onLaunchOptions } = appState;\n\n callLog(\"onAppLaunch\");\n\n void options.onAppLaunch(\n onLaunchOptions as WechatMiniprogram.App.LaunchShowOption,\n );\n } else {\n appEmitter.on(ON_APP_LAUNCH, (onLaunchOptions) => {\n callLog(\"onAppLaunch\");\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n void options.onAppLaunch!(onLaunchOptions);\n });\n }\n\n registerLog(\"onAppLaunch\");\n }\n\n if (options.onNavigate) {\n routeEmitter.on(\n `${ON_PAGE_NAVIGATE}:${route}`,\n (query: PageQuery): Promise<void> | void => {\n callLog(\"onNavigate\", query);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return options.onNavigate!(query);\n },\n );\n\n registerLog(\"onNavigate\");\n }\n\n if (options.onPreload) {\n routeEmitter.on(\n `${ON_PAGE_PRELOAD}:${route}`,\n (query: PageQuery): void | Promise<void> => {\n callLog(\"onPreload\", query);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return options.onPreload!(query);\n },\n );\n\n registerLog(\"onPreload\");\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 options.onReady = wrapFunction(options.onReady, () =>\n appEmitter.emit(ON_PAGE_READY),\n );\n\n options.onUnload = wrapFunction(options.onUnload, () =>\n appEmitter.emit(ON_PAGE_UNLOAD),\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","e","t","r","n","A","u","a","l","p","h","C","O","_","E","M","P$3","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","ON_PAGE_NAVIGATE","ON_PAGE_PRELOAD","ON_PAGE_READY","ON_PAGE_UNLOAD","appEmitter","Emitter","routeEmitter","userEmitter","appState","appLaunchHandler","options","appShowHandler","appHideHandler","$App","appOptions","wrapFunction","time","logger","componentRefs","getRef","id","setRef","value","removeRef","P","s","o","appConfig","$Config","config","_a","defaultPage","pages","getPath","__objRest","isFunction","__spreadProps","__spreadValues","nameToRouteMap","routeToNameMap","addRoute","name","route","actualRoute","item","getConfig","canNavigate","getPathDetail","pageNameWithArg","pageName","queryString","path","query","getTrigger","type","url","resolve","go","redirect","switchTab","reLaunch","clickHandlerFactory","action","event","before","after","bindGo","bindRedirect","bindSwitch","bindRelaunch","back","delta","home","bindBack","getPage","preload","bind","touchEvent","args","ref","refName","method","mount","ctx","componentIndex","handleProperties","oldProps","props","propertyName","advancedValue","$Component","extendComponent","injectComponent","$refs","parent","shouldBeFirstPage","$Page","getRoute","extendPage","injectPage","callLog","lifeCycle","registerLog","onLaunchOptions"],"mappings":"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"}