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) }