@mypaas/hcm-cli
Version:
Vant Cli 是一个 Vue 组件库构建工具,通过 Vant Cli 可以快速搭建一套功能完备的 Vue 组件库。
66 lines (65 loc) • 2.31 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.traversalDir = void 0;
const path_1 = __importDefault(require("path"));
const fs_extra_1 = require("fs-extra");
function traversalDir(prefix, filter, options = {}) {
if (filter && typeof filter !== 'function') {
options = filter;
filter = options.filter;
}
const { includeDirs = false, throwError = true, relativePath = false } = options;
const filterFn = filter || ((arg) => arg);
const formatPath = (filePath = '') => {
if (relativePath) {
return filePath.replace(path_1.default.join(prefix, '/'), '');
}
return filePath;
};
const walker = (uri, parent = '') => {
let data = [];
const walkerDir = (dir) => {
return fs_extra_1.readdir(dir)
.then((children) => Promise.all(children.map((child) => walker(path_1.default.join(dir, child), dir))))
.then(async (items) => {
if (includeDirs) {
const item = await filterFn(uri, parent, true);
if (item === false) {
return data;
}
if (item !== undefined) {
data.push(formatPath(item));
}
}
data = items.reduce((array, item) => array.concat(item), data);
return data;
});
};
return fs_extra_1.stat(uri)
.then(async (stats) => {
const isDirectory = stats.isDirectory();
if (isDirectory) {
return walkerDir(uri);
}
const item = await filterFn(uri, parent, false);
if (item === false) {
return data;
}
if (item !== undefined) {
data.push(formatPath(item));
}
return data;
})
.catch((error) => {
if (throwError) {
throw error;
}
return data;
});
};
return walker(prefix);
}
exports.traversalDir = traversalDir;