| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- const fs = require('fs');
- const path = require('path');
- const t = require('@babel/types');
- const { parse } = require('@babel/parser');
- const originCode = fs.readFileSync(
- path.join(__dirname, '../src/router/index.js'),
- 'utf-8',
- );
- const originAST = parse(originCode, { sourceType: 'module' });
- const expDefNode = originAST.program.body.find((node) =>
- t.isExportDefaultDeclaration(node),
- );
- const rootNode = expDefNode.declaration.elements[0];
- const pagesNodeArr = rootNode.properties.find(
- (node) => node.key && node.key.name === 'children',
- );
- function getChildrenArr(rootNode) {
- const result = rootNode.properties.find(
- (node) => node.key && node.key.name === 'children',
- );
- if (result) {
- return result.value;
- } else {
- return null;
- }
- }
- function getValueByKey(rootNode, key) {
- if (t.isObjectExpression(rootNode)) {
- const asminode = rootNode.properties.find(
- (node) => node.key && node.key.name === key,
- );
- if (!asminode) {
- return null;
- }
- if (
- t.isStringLiteral(asminode.value) ||
- t.isNumericLiteral(asminode.value)
- ) {
- return asminode.value.value;
- } else if (t.isObjectExpression(asminode.value)) {
- return getObjValue(asminode.value);
- } else {
- return null;
- }
- } else {
- return null;
- }
- }
- function getObjValue(ObjectExpression) {
- if (t.isObjectExpression(ObjectExpression)) {
- const _obj = {};
- ObjectExpression.properties.forEach((n) => {
- _obj[n.key.name] = getValueByKey(ObjectExpression, n.key.name);
- });
- return _obj;
- } else {
- return null;
- }
- }
- const mapTree = (dataArr) => {
- return dataArr.elements.map((item) => {
- const name = getValueByKey(item, 'name');
- const path = getValueByKey(item, 'path');
- const redirect = getValueByKey(item, 'redirect');
- const meta = getValueByKey(item, 'meta');
- let children = [];
- if (getChildrenArr(item)) {
- children = mapTree(getChildrenArr(item));
- } else {
- children = null;
- }
- return { name, path, redirect, meta, children };
- });
- };
- module.exports = () => mapTree(pagesNodeArr.value);
|