Browse Source

docs: Update doc

pull/38162/head
二货机器人 2 years ago
parent
commit
239ccd3142
  1. 110
      scripts/migrate.js

110
scripts/migrate.js

@ -1,12 +1,51 @@
/* eslint-disable no-console */
const fs = require('fs-extra');
const glob = require('glob');
const chalk = require('chalk');
const path = require('path');
const yaml = require('dumi/node_modules/js-yaml');
// 检查 ~demo 文件夹是否存在,存在则说明是来自 next 的合并
const tmpFolder = `~demo`;
// ==============================================================================
// Log 先记录,flush 后才打印,以免打印过多无用信息
let consoleLines = [];
let consoleOffset = 0;
function logCache(...args) {
consoleLines.push(args);
}
function logClear() {
consoleLines = [];
}
function logFlush() {
consoleLines.forEach(args => {
const txt = args
.map(arg => (arg && typeof arg === 'object' ? JSON.stringify(arg, null, 2) : arg))
.join(' ');
const lines = txt.split(/[\n\r]+/);
lines.forEach(line => {
console.log(' '.repeat(consoleOffset), line);
});
});
logClear();
}
function log(...args) {
logCache(...args);
logFlush();
}
function logOffset(offset) {
consoleOffset = offset;
}
// ==============================================================================
// 执行迁移
if (fs.existsSync(tmpFolder)) {
let demoFileCount = 0;
let apiFileCount = 0;
@ -14,7 +53,7 @@ if (fs.existsSync(tmpFolder)) {
const files = glob
.sync(path.join(tmpFolder, `components/**`))
.filter(file => file.endsWith('.md'));
console.log('存在 ~demo 文件夹,先做迁移', files.length, '个文件');
log('存在 ~demo 文件夹,先做迁移', files.length, '个文件');
files.forEach(file => {
const filePath = file.split(path.sep).splice(1).join(path.sep);
@ -27,15 +66,17 @@ if (fs.existsSync(tmpFolder)) {
}
fs.ensureDirSync(path.dirname(filePath));
if (filePath.startsWith('components/overview')) {
// overview 文件不需要迁移
return;
}
if (filePath.endsWith('.en-US.md') || filePath.endsWith('.zh-CN.md')) {
// 保留 meta 信息
const md = fs.readFileSync(filePath, 'utf-8');
const [, frontmatter] = md.match(/^(---[^]+?\n---)/);
const legacyMD = fs.readFileSync(file, 'utf-8');
fs.writeFileSync(filePath, legacyMD.replace(/^(---[^]+?\n---)/, frontmatter));
} else if (filePath.startsWith('components/overview')) {
// overview 文件不需要迁移
return;
} else {
fs.copyFileSync(file, filePath);
}
@ -47,7 +88,13 @@ if (fs.existsSync(tmpFolder)) {
}
});
console.log('迁移完成,共迁移文件数:', apiFileCount, '个介绍文档', demoFileCount, '个 demo');
log('迁移完成,共迁移文件数:', apiFileCount, '个介绍文档', demoFileCount, '个 demo');
}
// ==============================================================================
// 有一部分转换需要 hardcode,这里就不做分析简单替换了
function hardcodeMD(content) {
return content.replace(/```.*\n.*IconDisplay.*\n.*mountNode.*\n```/, '<IconSearch></IconSearch>');
}
// 重新生成所有的 Demo 文件
@ -98,46 +145,49 @@ components.forEach(component => {
en = en.replace(/(\n---)/, '\ndemo:\n cols: 2$1');
}
console.log('写入', component, 'md...');
fs.writeFileSync(
zhPath,
zh
.replace(
/(\n## api)/i,
`
logOffset(0);
log();
log(chalk.yellow('Update', component, ':'));
logOffset(1);
// 中文
const zhContent = zh
.replace(
/(\n## api)/i,
`
## 代码演示
${codes.map(code => code.html['zh-CN']).join('\n')}
$1`,
)
.replace(/\ncols: 2(.*?)(\n---)/, '$1\ndemo:\n cols: 2$2')
.replace(/\ncols: 1/, ''),
'utf-8',
);
fs.writeFileSync(
enPath,
en
.replace(
/(\n## api)/i,
`
)
.replace(/\ncols: 2(.*?)(\n---)/, '$1\ndemo:\n cols: 2$2')
.replace(/\ncols: 1/, '');
fs.writeFileSync(zhPath, hardcodeMD(zhContent), 'utf-8');
// 英文
const enContent = en
.replace(
/(\n## api)/i,
`
## Examples
${codes.map(code => code.html['en-US']).join('\n')}
$1`,
)
.replace(/\ncols: 2(.*?)(\n---)/, '$1\ndemo:\n cols: 2$2')
.replace(/\ncols: 1/, ''),
'utf-8',
);
)
.replace(/\ncols: 2(.*?)(\n---)/, '$1\ndemo:\n cols: 2$2')
.replace(/\ncols: 1/, '');
fs.writeFileSync(enPath, hardcodeMD(enContent), 'utf-8');
console.log('写入', component, 'demo & demo md...');
log('写入', component, 'demo & demo md...');
codes.forEach(code => {
const extraMeta = Object.keys(code.meta).filter(
key => !['title', 'order', 'debug'].includes(key),
);
if (extraMeta.length) {
console.log('写入额外的 meta', code.meta);
log('写入额外的 meta', code.meta);
code.code = `/*\n${extraMeta.map(key => ` * ${key}: ${code.meta[key]}`).join('\n')}\n */\n\n${
code.code
}`;

Loading…
Cancel
Save