@vitjs/vit
Version:
🛠React application framework inspired by UmiJS.
51 lines (50 loc) • 2.06 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
const path_1 = require("path");
const utils_1 = require("@vitjs/utils");
const mustache_1 = __importDefault(require("mustache"));
const utils_2 = require("./utils");
function generateRoutes(service) {
const routesTpl = (0, fs_1.readFileSync)((0, path_1.resolve)(__dirname, './routes.tpl'), 'utf-8');
let moduleMap = {};
if (!service.route.dynamicImport) {
moduleMap = service.route.resolveRoutes();
}
const modules = Object.keys(moduleMap).map((modulePath) => {
return {
name: moduleMap[modulePath],
path: modulePath,
};
});
const iconsMap = (0, utils_2.resolveIcons)(service.route.routes);
service.writeTmpFile({
path: 'routes.ts',
content: mustache_1.default.render(routesTpl, {
routes: service.route.dumpRoutes({
extraReplace: (route) => {
if (route.icon && iconsMap[route.icon]) {
route.icon = `React.createElement(${iconsMap[route.icon]})`;
}
},
postDump: (content) => content.replace(/\"icon\": (\"(.+?)\")/g, (global, m1, m2) => {
return `"icon": ${m2.replace(/\^/g, '"')}`;
}),
}),
imports: Object.values(iconsMap)
.map((icon) => {
return `import ${icon} from '@ant-design/icons/${icon}'`;
})
.join('\n'),
dynamic: !!service.route.dynamicImport,
modules,
loadingComponent: service.route.dynamicImport &&
service.route.dynamicImport.loading &&
(0, utils_1.winPath)((0, path_1.resolve)(process.cwd(), './src/', service.route.dynamicImport.loading)),
}),
});
}
exports.default = generateRoutes;