From 0b328f81cc23e938ce8d716b16f93a362c4c5072 Mon Sep 17 00:00:00 2001 From: Benjy Cui Date: Tue, 8 Mar 2016 15:35:03 +0800 Subject: [PATCH] refactor: refactor build scripts --- scripts/build-common.js | 4 ++-- scripts/build-demos-list.js | 41 +++++-------------------------------- scripts/build-website.js | 13 ++---------- scripts/utils.js | 22 -------------------- 4 files changed, 9 insertions(+), 71 deletions(-) diff --git a/scripts/build-common.js b/scripts/build-common.js index 49ae50ee97..9715bc0256 100644 --- a/scripts/build-common.js +++ b/scripts/build-common.js @@ -9,8 +9,8 @@ module.exports = function buildCommon(dirs, outputFile) { .filter((file) => !/install_en\.md$/gi.test(file)); // TODO let content = 'module.exports = {'; - mds.forEach((md) => { - content += `\n '${md}': require('antd-md!../../${md}'),`; + mds.forEach((fileName) => { + content += `\n '${fileName}': require('antd-md?fileName=${fileName}!../../${fileName}'),`; }); content += '\n};'; diff --git a/scripts/build-demos-list.js b/scripts/build-demos-list.js index dba6499762..6bbc37904a 100644 --- a/scripts/build-demos-list.js +++ b/scripts/build-demos-list.js @@ -3,48 +3,18 @@ const fs = require('fs'); const path = require('path'); const R = require('ramda'); -const devil = require('./devil'); // TODO: extract as a module? const utils = require('./utils'); -const isIntro = function isIntro(element) { - const type = element.type; - return type !== 'h1' && type !== 'ul' && type !== 'code' && type !== 'hr'; -}; -const isCode = R.whereEq({ type: 'code', props: { lang: 'jsx' } }); -const isStyle = R.whereEq({ type: 'code', props: { lang: 'css' } }); -const getChildren = R.compose(R.prop('children'), R.defaultTo({})); -const sortByOrder = R.sortBy(R.prop('order')); -const parseDemosList = function parseDemosList(demoList) { - const demos = R.map((fileName) => { - const data = utils.parseFileContent(fileName); - const parts = fileName.split(path.sep); - - const demo = {}; - demo.order = parseInt(utils.parseMeta(data).order); - const demoIndex = parts.indexOf('demo'); - demo.parent = parts.slice(0, demoIndex).join('/') + '/index.md'; - demo.id = 'components-' + demo.parent + '-demo-' + path.basename(fileName, '.md'); - demo.title = data[0].children; - demo.intro = data.filter(isIntro); - demo.code = getChildren(data.find(isCode)); - demo.preview = devil(demo.code, ['React', 'ReactDOM', '_antd', 'BrowserDemo']); - demo.style = getChildren(data.find(isStyle)); - - return demo; - }, demoList); - - const demosList = R.groupBy((demo) => demo.parent.replace('-', ''), demos); - const sortedDemosList = R.mapObjIndexed(sortByOrder, demosList); - return sortedDemosList; -}; - -module.exports = function buildDemosList(demoList, outputPath) { +const isDemo = R.compose(R.test(/\/demo$/i), path.dirname); +module.exports = function buildDemosList(dirs, outputPath) { + const mds = utils.findMDFile(dirs); + const demos = R.filter(isDemo, mds); const groupedDemos = R.groupBy((fileName) => { const parts = fileName.split(path.sep); const demoIndex = parts.indexOf('demo'); const relativeIndex = path.join(parts.slice(0, demoIndex).join(path.sep), 'index.md'); return relativeIndex; - }, demoList); + }, demos); let content = 'module.exports = {'; Object.keys(groupedDemos).forEach((key) => { @@ -58,4 +28,3 @@ module.exports = function buildDemosList(demoList, outputPath) { fs.writeFile(outputPath, content); }; -module.exports.parse = parseDemosList; diff --git a/scripts/build-website.js b/scripts/build-website.js index 1b93d46e9c..fc44f01dd0 100755 --- a/scripts/build-website.js +++ b/scripts/build-website.js @@ -5,24 +5,15 @@ // Ensure that data directory exist. require('mkdirp').sync('./_site/data'); -const fs = require('fs'); -const path = require('path'); -const R = require('ramda'); -const utils = require('./utils'); const buildDemosList = require('./build-demos-list'); +buildDemosList(['./components', './docs'], './_site/data/demos-list.js'); + const buildCommon = require('./build-common'); - -const mds = utils.findMDFile(['./components', './docs']); -const isDemo = R.compose(R.test(/\/demo$/i), path.dirname); -const demos = R.filter(isDemo, mds); -buildDemosList(demos, './_site/data/demos-list.js'); - buildCommon([ './components', './docs/react', './CHANGELOG.md', ], './_site/data/react-components.js'); - buildCommon('./docs/practice', './_site/data/practice.js'); buildCommon('./docs/pattern', './_site/data/pattern.js'); buildCommon('./docs/spec', './_site/data/spec.js'); diff --git a/scripts/utils.js b/scripts/utils.js index cc406badc5..50aa055ec8 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -33,28 +33,6 @@ exports.findMDFile = function findMDFile(fileName, shallow) { return mds; }; -exports.isIndex = R.compose(R.equals('index.md'), R.unary(path.basename)); - -const MT = require('mark-twain'); -exports.parseFileContent = R.pipe( - fs.readFileSync, - R.toString, - MT, - R.prop('content') -); - -const parseBasicMeta = R.pipe( - R.path(['1', 'children']), - R.map((child) => R.split(/:\s?/, child.children)), - R.fromPairs -); -const parseEnglishTitle = R.path(['0', 'children']); -exports.parseMeta = function parseMeta(fileContent) { - const meta = parseBasicMeta(fileContent); - meta.english = parseEnglishTitle(fileContent); - - return meta; -}; exports.stringify = function stringify(data, d) { const depth = d || 1;