anyproxy/build_scripts/prebuild-doc.js
2017-12-01 21:30:49 +08:00

78 lines
1.9 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const textTpl = [
'```bash',
'anyproxy --rule {{url}}',
'```',
'```js',
'{{content}}',
'```'
].join('\n');
/**
*
* @param {*} config
* @param {string} config.input input markdown path
* @param {string} config.ouput output markdown path
*/
function mergeMdWithRuleFile(config) {
const doc = fs.readFileSync(config.input, { encoding: 'utf8' });
const rules = doc.match(/\{\{sample-rule:([\S]+)\}\}/g).map((rawToReplace) => ({
raw: rawToReplace,
url: rawToReplace.replace(/\{\{sample-rule:([\S]+)\}\}/g, ($0, $1) => {
return $1;
})
}));
const tasks = rules.map((item) => (
new Promise((resolve, reject) => {
fs.readFile(item.url, 'utf8', (err, data) => {
if (!err) {
const result = Object.assign({}, item);
result.content = data;
resolve(result);
} else {
reject(err);
}
});
})
));
// fetch all samples
return Promise.all(tasks)
.then((results) => {
// merge to doc
let resultDoc = doc;
results.forEach((item) => {
const contentToInsert = textTpl.replace('{{url}}', item.url).replace('{{content}}', item.content);
resultDoc = resultDoc.replace(item.raw, contentToInsert);
});
fs.writeFileSync(config.output, resultDoc);
}, (fail) => {
console.log('failed to load resource');
console.log(fail);
process.exit();
})
.catch(e => {
console.log(e);
process.exit();
});
}
Promise.all([
{
input: path.join(__dirname, '../docs-src/cn/src_doc.md'),
output: path.join(__dirname, '../docs-src/cn/README.md'),
},
{
input: path.join(__dirname, '../docs-src/en/src_doc.md'),
output: path.join(__dirname, '../docs-src/en/README.md'),
}
].map(mergeMdWithRuleFile)).then(result => {
console.log('done');
}).catch(e => {
console.log('err');
console.log(e);
});