@wgoo/cli
Version:
Wgoo Cli 是一个 React 组件库构建工具,通过 Wgoo Cli 可以快速搭建一套功能完备的 React 组件库。
111 lines (93 loc) • 2.19 kB
JavaScript
import { isMobile, decamelize } from '../common';
import { config, documents } from 'site-desktop-shared';
import { getLang, setDefaultLang } from '../common/locales';
import '../common/iframe-router';
if (isMobile) {
location.replace('mobile.html' + location.hash);
}
const { locales, defaultLang } = config.site;
setDefaultLang(defaultLang);
function parseName(name) {
if (name.indexOf('_') !== -1) {
const pairs = name.split('_');
const component = pairs.shift();
return {
component: `${decamelize(component)}`,
lang: pairs.join('-'),
};
}
return {
component: `${decamelize(name)}`,
lang: '',
};
}
function getLangFromRoute(route) {
const lang = route.path.split('/')[1];
const langs = Object.keys(locales);
if (langs.indexOf(lang) !== -1) {
return lang;
}
return getLang();
}
function getRoutes() {
const routes = [];
const names = Object.keys(documents);
if (locales) {
routes.push({
name: 'notFound',
path: '/:path(.*)+',
redirect: (route) => ({
name: getLangFromRoute(route),
}),
});
} else {
routes.push({
name: 'notFound',
path: '/:path(.*)+',
redirect: {
name: 'home',
},
});
}
function addHomeRoute(Home, lang) {
routes.push({
name: lang || 'home',
path: `/${lang || ''}`,
hash: `#/${lang || ''}`,
component: Home,
meta: { lang },
});
}
names.forEach((name) => {
const { component, lang } = parseName(name);
if (component === 'home') {
addHomeRoute(documents[name], lang);
}
if (lang) {
routes.push({
name: `${lang}/${component}`,
path: `/${lang}/${component}`,
hash: `#/${lang}/${component}`,
component: documents[name],
meta: {
lang,
name: component,
},
});
} else {
routes.push({
name: `${component}`,
path: `/${component}`,
hash: `#/${component}`,
component: documents[name],
meta: {
name: component,
},
});
}
});
return routes;
}
export const router = {
routes: getRoutes()
}