{"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\";\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  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, 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","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","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","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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"}