From 239ccd31421f381390ad624a8c9607532ab326c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E8=B4=A7=E6=9C=BA=E5=99=A8=E4=BA=BA?= Date: Fri, 21 Oct 2022 11:42:16 +0800 Subject: [PATCH] docs: Update doc --- scripts/migrate.js | 110 ++++++++++++++++++++++++++++++++------------- 1 file changed, 80 insertions(+), 30 deletions(-) diff --git a/scripts/migrate.js b/scripts/migrate.js index e5b1215ef1..fe107e717e 100644 --- a/scripts/migrate.js +++ b/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```/, ''); } // 重新生成所有的 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 }`;