UNPKG

1.96 kBJavaScriptView Raw
1const fs = require('fs');
2const path = require('path');
3
4const textTpl = [
5 '```bash',
6 'anyproxy --rule {{url}}',
7 '```',
8 '```js',
9 '{{content}}',
10 '```'
11].join('\n');
12
13/**
14 *
15 * @param {*} config
16 * @param {string} config.input input markdown path
17 * @param {string} config.ouput output markdown path
18 */
19function mergeMdWithRuleFile(config) {
20 const doc = fs.readFileSync(config.input, { encoding: 'utf8' });
21 const rules = doc.match(/\{\{sample-rule:([\S]+)\}\}/g).map((rawToReplace) => ({
22 raw: rawToReplace,
23 url: rawToReplace.replace(/\{\{sample-rule:([\S]+)\}\}/g, ($0, $1) => {
24 return $1;
25 })
26 }));
27
28 const tasks = rules.map((item) => (
29 new Promise((resolve, reject) => {
30 fs.readFile(item.url, 'utf8', (err, data) => {
31 if (!err) {
32 const result = Object.assign({}, item);
33 result.content = data;
34 resolve(result);
35 } else {
36 reject(err);
37 }
38 });
39 })
40 ));
41
42 // fetch all samples
43 return Promise.all(tasks)
44 .then((results) => {
45 // merge to doc
46 let resultDoc = doc;
47 results.forEach((item) => {
48 const contentToInsert = textTpl.replace('{{url}}', item.url).replace('{{content}}', item.content);
49 resultDoc = resultDoc.replace(item.raw, contentToInsert);
50 });
51 fs.writeFileSync(config.output, resultDoc);
52 }, (fail) => {
53 console.log('failed to load resource');
54 console.log(fail);
55 process.exit();
56 })
57 .catch(e => {
58 console.log(e);
59 process.exit();
60 });
61}
62
63Promise.all([
64 {
65 input: path.join(__dirname, '../docs-src/cn/src_doc.md'),
66 output: path.join(__dirname, '../docs-src/cn/README.md'),
67 },
68 {
69 input: path.join(__dirname, '../docs-src/en/src_doc.md'),
70 output: path.join(__dirname, '../docs-src/en/README.md'),
71 }
72].map(mergeMdWithRuleFile)).then(result => {
73 console.log('done');
74}).catch(e => {
75 console.log('err');
76 console.log(e);
77});