| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import Vue from 'vue'
- import Router from 'vue-router'
- Vue.use(Router)
- const KAIFAIN = 'kaifain'
- const JISHUIN = 'jishuin'
- const RE_IPV4 = /^(\d+.)+\d+$/
- const getServerHostname = ({ req }) => {
- const { host, referer } = req.headers
- let hostname = host.split(':')[0]
- if (RE_IPV4.test(hostname)) {
- hostname = referer && new URL(referer).hostname
- }
- return hostname
- }
- const filterAndRemapRoutesByScope = (routes, scope) => {
- return [
- ...routes
- .filter(r => r.path.startsWith('/' + scope))
- .map(r => {
- const clone = { ...r }
- clone.path = r.path.replace('/' + scope, '') || '/'
- if (r.name) {
- clone.name = r.name + '_$'
- }
- return clone
- }),
- ...routes
- ]
- }
- export function createRouter(ssrContext, createDefaultRouter, routerOptions) {
- const options = routerOptions || createDefaultRouter(ssrContext).options
- const hostname = ssrContext ? getServerHostname(ssrContext) : location.host
- return new Router({
- ...options,
- routes: fixRoutes(options.routes, hostname),
- })
- }
- function fixRoutes(defaultRoutes, hostname) {
- if (hostname && hostname.includes(KAIFAIN)) return kaifainRoutes(defaultRoutes)
- if (hostname && hostname.includes(JISHUIN)) return jishuinRoutes(defaultRoutes)
- return defaultRoutes
- }
- function kaifainRoutes(defaultRoutes) {
- return filterAndRemapRoutesByScope(defaultRoutes, KAIFAIN)
- }
- function jishuinRoutes(defaultRoutes) {
- return filterAndRemapRoutesByScope(defaultRoutes, JISHUIN)
- }
|