auto-router-vue3
Version:
228 lines (220 loc) • 6.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DFS = DFS;
exports.GUID = GUID;
exports.basename = void 0;
exports.excludeCheck = excludeCheck;
exports.getConfig = getConfig;
exports.getJsonFile = getJsonFile;
exports.getSrcInfo = getSrcInfo;
exports.setConfig = setConfig;
exports.setJsonFile = setJsonFile;
exports.traverseFolder = traverseFolder;
var _url = require("url");
var _path = _interopRequireDefault(require("path"));
var _fs = _interopRequireDefault(require("fs"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } // 获取路径信息
var srcInfo = getSrcInfo();
var filename = srcInfo.filename;
var dirname = srcInfo.dirname;
var basename = exports.basename = _path["default"].join(dirname, "../../");
/**
* 设置配置
* @param options
*/
function setConfig(options) {
var config = getConfig();
if (options.version) {
options.version = Number(options.version);
}
config = Object.assign(config, options);
if (options.excludeReg) {
config.excludeDir = null;
} else if (options.excludeDir) {
config.excludeReg = null;
}
_fs["default"].writeFileSync(_path["default"].join(basename, "bin/config.json"), JSON.stringify(config), {
encoding: 'utf-8'
});
return config;
}
/**
* 获取配置
* @return {any}
*/
function getConfig() {
var cfgPath = _path["default"].join(basename, "bin/config.json");
var cfg = getJsonFile(cfgPath);
if (cfg == null) {
var res = {
"excludeDir": null,
"excludeReg": "((component(s)?)|(utils)|(route(r)?))",
"excludePath": null,
"pagePath": "pages",
"type": "simple",
defaultRedirect: "^list$"
};
setJsonFile(cfgPath, res);
return res;
}
return cfg;
}
/**
* 从Json文件中获取JSON数据
* @param dir 路径
* @return {JSON}
*/
function getJsonFile(dir) {
try {
var res = _fs["default"].readFileSync(dir, {
encoding: 'utf-8'
});
return JSON.parse(res);
} catch (e) {
return null;
}
}
/**
* 从Json文件中获取JSON数据
* @param dir 路径
* @param data 数据
* @return {JSON}
*/
function setJsonFile(dir, data) {
try {
if (typeof data !== "string") {
data = JSON.stringify(data);
}
_fs["default"].writeFileSync(dir, data, {
encoding: 'utf-8'
});
return true;
} catch (e) {
return false;
}
}
/**
* 获取基础路径信息
* @return {{filename: string, dir: string, dirname: string}}
*/
function getSrcInfo() {
return {
filename: __filename,
dirname: __dirname,
dir: _path["default"].resolve()
};
}
/**
* @desc 生成GUID
* @param format 格式
* @return {string}
*/
function GUID() {
var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
var _char = ['A', 'B', 'C', 'D', 'E', 'F', 1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
var len = 0;
for (var i in format) if (format[i] === 'x') len += 1;
var random = function random() {
var i = parseInt(Math.random() * 15);
return _char[i];
};
return format.replace(/x/g, function (res) {
return random();
});
}
var config = getConfig();
function excludeCheck(fullPath) {
var name = _path["default"].basename(fullPath);
if (name.split(".").length > 1) {
name = _path["default"].basename(_path["default"].dirname(fullPath));
}
if (config.excludePath && config.excludePath.filter(function (e) {
return fullPath.includes(_path["default"].join(e));
}).length) {
return {
flag: true,
msg: "Traversal complete. The src <" + fullPath + ">was excluded."
};
}
if (config.excludeReg && new RegExp(config.excludeReg).test(name)) {
return {
flag: true,
msg: "Traversal complete. The src <" + fullPath + ">was excluded."
};
} else if (config.excludeDir && config.excludeDir.includes(name)) {
return {
flag: true,
msg: "Traversal complete. The src <" + fullPath + ">was excluded."
};
}
return {
flag: false
};
}
/**
* 遍历文件夹
* @param dir 文件夹路径
* @param callback 回调 , 包含三个参数 status:(-1 ,错误 , 0 文件夹 , 1 文件 2.遍历完成) , info(-1 ,错误信息 , 0,1 文件 , 2 完成信息) , fullPath:当状态为0,1时有此参数 , result 上一级递归的回调值(当状态为0,1时有此参数)
* @param result 回调结果
*/
function traverseFolder(dir, callback, result) {
_fs["default"].readdir(dir, {
withFileTypes: true
}, function (err, dirs) {
if (err) return callback(-1, err);
dirs.forEach(function (dirent) {
var fullPath = _path["default"].join(dir, dirent.name);
if (dirent.isDirectory()) {
var check = excludeCheck(fullPath);
if (check.flag) return callback(2, check.msg);
var res = callback(0, dirent, fullPath, result);
traverseFolder(fullPath, callback, res);
} else {
var extname = _path["default"].extname(fullPath);
if (extname === ".vue") return callback(1, dirent, fullPath, result);else return callback(2, "Traversal complete. The src <" + fullPath + ">is not a vue file.");
}
});
// 可以在此处添加一个回调来通知整个目录遍历完成
callback(2, 'Traversal complete');
});
}
/**
* @description 深度优先遍历
* @param {Array,JSON} data 数据
* @param callback 回调
* @param options 配置
* @constructor
*/
function DFS(data) {
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var _options = Object.assign({}, {
child: "data"
}, options);
var child = _options.child;
if (!!data) {
var stack = [];
if (Array.isArray(data)) for (var i = data.length - 1; i >= 0; i--) {
var item = data[i];
item._tier = 0;
stack.push(item);
} else if (_typeof(data) === "object") {
data._tier = 0;
stack.push(data);
}
while (stack.length > 0) {
var _item = stack.pop();
var tier = _item._tier;
tier++;
callback(_item);
var children = _item[child] || [];
for (var _i = children.length - 1; _i >= 0; _i--) {
children[_i]._tier = tier;
stack.push(children[_i]);
}
}
}
}