extractAll.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. const fs = require('fs');
  2. const path = require('path');
  3. const { promisify } = require('util');
  4. const extract = require('./extract');
  5. // Promisified fs functions
  6. const readdirAsync = promisify(fs.readdir);
  7. const readFileAsync = promisify(fs.readFile);
  8. const writeFileAsync = promisify(fs.writeFile);
  9. // Source and destination paths
  10. const markdownPath = path.resolve(__dirname, '../markdown');
  11. const jsonPath = path.resolve(__dirname, '../../back/public/dist/md-json');
  12. async function writeJson(tuto) {
  13. // console.log(tuto.title, tuto.slug, tuto.items.map(({ title }) => title));
  14. const filePath = path.join(jsonPath, `${tuto.slug}.json`);
  15. const json = JSON.stringify(tuto.items);
  16. return writeFileAsync(filePath, json);
  17. }
  18. async function writeJsonIndex(tutos) {
  19. const filePath = path.join(jsonPath, 'index.json');
  20. const index = tutos.map(({ title, slug }) => ({ title, slug }));
  21. const json = JSON.stringify(index);
  22. return writeFileAsync(filePath, json);
  23. }
  24. async function run(filterFunc) {
  25. const allFiles = await readdirAsync(markdownPath);
  26. const tutoFiles = allFiles.filter(filterFunc);
  27. const promises = tutoFiles.map(async tuto => {
  28. const tutoPath = path.join(markdownPath, tuto);
  29. const buf = await readFileAsync(tutoPath);
  30. const md = buf.toString();
  31. console.log(md.split('\n').shift());
  32. try {
  33. return extract(md);
  34. } catch (err) {
  35. console.log(err.message);
  36. }
  37. });
  38. const tutos = await Promise.all(promises);
  39. const writePromises = tutos.map(writeJson);
  40. writePromises.push(writeJsonIndex(tutos));
  41. await Promise.all(writePromises);
  42. process.exit();
  43. }
  44. const filterFunc = f => f.startsWith('tutor');
  45. run(filterFunc);