@xnomi/router-guard
Version:
1 lines • 4.87 kB
Source Map (JSON)
{"version":3,"file":"router-guard.mjs","sources":["../src/index.ts"],"sourcesContent":["/**\n * @module router-guard 路由拦截器\n */\n\nimport { NavigationGuardNext, RouteLocationNormalized, Router } from 'vue-router'\n\nexport type BeforeMiddlewareFn = (\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n next: NavigationGuardNext\n) => void\n\nexport type AfterMiddlewareFn = (\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n next: (flag?: boolean) => void\n) => void\n\ntype Hook = 'beforeEach' | 'beforeResolve' | 'afterEach'\n\nclass LifecycleHook {\n constructor(private hook: Hook) {}\n\n /**\n * 收集前置路由守卫中间件\n */\n private beforeQueue: BeforeMiddlewareFn[] = []\n /**\n * 收集后置路由守卫中间件\n */\n private afterQueue: AfterMiddlewareFn[] = []\n\n // 是否已经注册\n private registered = false\n\n /**\n * 运行前置钩子中间件\n */\n private runBefore(\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n next: NavigationGuardNext,\n middleware: BeforeMiddlewareFn[]\n ) {\n if (middleware.length === 0) {\n next()\n } else {\n const fn = middleware.shift()\n if (fn) {\n fn(to, from, (params?: any) => {\n if (typeof params !== 'undefined') {\n if (params === false) {\n next()\n } else {\n next(params)\n }\n } else {\n this.runBefore(to, from, next, middleware)\n }\n })\n }\n }\n }\n\n /**\n * 运行后置钩子中间件\n */\n private runAfter(\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n next: (flag?: boolean) => void,\n middleware: AfterMiddlewareFn[]\n ) {\n if (middleware.length === 0) {\n next()\n } else {\n const fn = middleware.shift()\n if (fn) {\n fn(to, from, (flag?: boolean) => {\n if (typeof flag === 'undefined' || flag) {\n this.runAfter(to, from, next, middleware)\n }\n })\n }\n }\n }\n\n /**\n * 采集中间件\n */\n use(...args: BeforeMiddlewareFn[] | AfterMiddlewareFn[]) {\n if (this.hook === 'beforeEach' || this.hook === 'beforeResolve') {\n this.beforeQueue = this.beforeQueue.concat(args as BeforeMiddlewareFn[])\n } else {\n this.afterQueue = this.afterQueue.concat(args as AfterMiddlewareFn[])\n }\n }\n\n /**\n * 注册路由守卫\n */\n register(router: Router) {\n if (!this.registered) {\n if (this.hook === 'beforeEach' || this.hook === 'beforeResolve') {\n router[this.hook](\n (\n to: RouteLocationNormalized,\n from: RouteLocationNormalized,\n next: NavigationGuardNext\n ) => {\n this.runBefore(to, from, next, [...this.beforeQueue])\n }\n )\n } else {\n router[this.hook]((to: RouteLocationNormalized, from: RouteLocationNormalized) => {\n this.runAfter(to, from, () => {}, [...this.afterQueue])\n })\n }\n this.registered = true\n }\n }\n}\n\n/**\n * 导出路由守卫处理器\n */\nexport const beforeEachHook = new LifecycleHook('beforeEach')\nexport const beforeResolveHook = new LifecycleHook('beforeResolve')\nexport const afterEachHook = new LifecycleHook('afterEach')\n"],"names":["LifecycleHook","hook","beforeQueue","afterQueue","this","registered","runBefore","to","from","next","middleware","_this","length","fn","shift","params","_proto","runAfter","_this2","flag","use","slice","call","arguments","concat","args","register","router","_this3","beforeEachHook","afterEachHook"],"mappings":"AAoBMA,IAAAA,0BACJ,SAAoBC,EAAAA,GAAAA,KAAAA,iBAKZC,YAAoC,GAIpCC,KAAAA,WAAkC,GAAEC,KAGpCC,YAAa,EAZDD,KAAIH,KAAJA,CAAa,CAAC,IAiB1BK,EAAAA,EAAAA,UAkFP,OAlFOA,EAAAA,UAAA,SACNC,EACAC,EACAC,EACAC,GAEA,IAAAC,EAAAP,KAAA,GAA0B,IAAtBM,EAAWE,OACbH,QACK,CACL,IAAMI,EAAKH,EAAWI,QAClBD,GACFA,EAAGN,EAAIC,EAAM,SAACO,QACU,IAALA,GACA,IAAXA,EACFN,IAEAA,EAAKM,GAGPJ,EAAKL,UAAUC,EAAIC,EAAMC,EAAMC,EAEnC,EAEH,CACH,EAACM,EAKOC,SAAA,SACNV,EACAC,EACAC,EACAC,GAA+B,IAAAQ,EAAAd,KAE/B,GAA0B,IAAtBM,EAAWE,OACbH,QACK,CACL,MAAWC,EAAWI,QAClBD,GACFA,EAAGN,EAAIC,EAAM,SAACW,SACQ,IAATA,GAAwBA,IACjCD,EAAKD,SAASV,EAAIC,EAAMC,EAAMC,EAElC,EAEH,CACH,EAKAU,EAAAA,IAAA,WAAuD,MACrD,GAAAC,MAAAC,KAAAC,WAAkB,eAAdnB,KAAKH,MAAuC,kBAAdG,KAAKH,KACrCG,KAAKF,YAAcE,KAAKF,YAAYsB,OAAOC,GAE3CrB,KAAKD,WAAaC,KAAKD,WAAWqB,OAAOC,EAE7C,EAKAC,EAAAA,SAAA,SAASC,GACP,IAAAC,EAAAxB,KAAKA,KAAKC,aAENsB,EAAOvB,KAAKH,MADI,eAAdG,KAAKH,MAAuC,kBAAdG,KAAKH,KAEnC,SACEM,EACAC,EACAC,GAEAmB,EAAKtB,UAAUC,EAAIC,EAAMC,YAAUmB,EAAK1B,aAC1C,EAGgB,SAACK,EAA6BC,GAC9CoB,EAAKX,SAASV,EAAIC,EAAM,WAAQ,EAAA,GAAAgB,OAAMI,EAAKzB,YAC7C,GAEFC,KAAKC,YAAa,EAEtB,EAACL,CAAA,IAMU6B,EAAiB,IAAI7B,EAAc,gBACf,MAAkB,iBACzB8B,EAAG,IAAiB9B,EAAC"}