@mypaas/hcm-cli
Version:
Vant Cli 是一个 Vue 组件库构建工具,通过 Vant Cli 可以快速搭建一套功能完备的 Vue 组件库。
103 lines (100 loc) • 3.44 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.genSiteDesktopShared = void 0;
const fast_glob_1 = __importDefault(require("fast-glob"));
const path_1 = require("path");
const fs_extra_1 = require("fs-extra");
const common_1 = require("../common");
const constant_1 = require("../common/constant");
function formatName(component, lang) {
component = common_1.pascalize(component);
if (lang) {
return `${component}_${lang.replace('-', '_')}`;
}
return component;
}
/**
* i18n mode:
* - action-sheet/README.md => ActionSheet_EnUS
* - action-sheet/README.zh-CN.md => ActionSheet_ZhCN
*
* default mode:
* - action-sheet/README.md => ActionSheet
*/
function resolveDocuments(components) {
const vantConfig = common_1.getVantConfig();
const { locales, defaultLang } = vantConfig.site;
const docs = [];
if (locales) {
const langs = Object.keys(locales);
langs.forEach((lang) => {
const fileName = lang === defaultLang ? 'README.md' : `README.${lang}.md`;
components.forEach((component) => {
docs.push({
name: formatName(component, lang),
path: path_1.join(constant_1.SRC_DIR, component, fileName),
});
});
});
}
else {
components.forEach((component) => {
docs.push({
name: formatName(component),
path: path_1.join(constant_1.SRC_DIR, component, 'README.md'),
});
});
}
const staticDocs = fast_glob_1.default
.sync(common_1.normalizePath(path_1.join(constant_1.DOCS_DIR, '**/*.md')))
.map((path) => {
const pairs = path_1.parse(path).name.split('.');
return {
name: formatName(pairs[0], pairs[1] || defaultLang),
path,
};
});
return [...staticDocs, ...docs.filter((item) => fs_extra_1.existsSync(item.path))];
}
function genInstall() {
return `import Vue from 'vue';
import PackageEntry from './package-entry';
import './package-style';
`;
}
function genImportDocuments(items) {
return items
.map((item) => `import ${item.name} from '${common_1.normalizePath(item.path)}';`)
.join('\n');
}
function genExportDocuments(items) {
return `export const documents = {
${items.map((item) => item.name).join(',\n ')}
};`;
}
function genImportConfig() {
return `import config from '${common_1.removeExt(common_1.normalizePath(constant_1.VANT_CONFIG_FILE))}';`;
}
function genExportConfig() {
return 'export { config };';
}
function genExportVersion() {
return `export const packageVersion = '${constant_1.getPackageJson().version}';`;
}
function genSiteDesktopShared() {
const dirs = fs_extra_1.readdirSync(constant_1.SRC_DIR).filter(common_1.getIgnoreComponentFilter((dir, ignores) => !ignores.includes(dir)));
const documents = resolveDocuments(dirs);
const code = `${genInstall()}
${genImportConfig()}
${genImportDocuments(documents)}
Vue.use(PackageEntry);
${genExportConfig()}
${genExportDocuments(documents)}
${genExportVersion()}
`;
common_1.smartOutputFile(constant_1.SITE_DESKTOP_SHARED_FILE, code);
}
exports.genSiteDesktopShared = genSiteDesktopShared;