const fs = require('fs'); const path = require('path'); const { promisify } = require('util'); const extract = require('./extract'); // Promisified fs functions const readdirAsync = promisify(fs.readdir); const readFileAsync = promisify(fs.readFile); const writeFileAsync = promisify(fs.writeFile); // Source and destination paths const markdownPath = path.resolve(__dirname, '../markdown'); const jsonPath = path.resolve(__dirname, '../../back/public/dist/md-json'); async function writeJson(tuto) { // console.log(tuto.title, tuto.slug, tuto.items.map(({ title }) => title)); const filePath = path.join(jsonPath, `${tuto.slug}.json`); const json = JSON.stringify(tuto.items); return writeFileAsync(filePath, json); } async function writeJsonIndex(tutos) { const filePath = path.join(jsonPath, 'index.json'); const index = tutos.map(({ title, slug }) => ({ title, slug })); const json = JSON.stringify(index); return writeFileAsync(filePath, json); } async function run(filterFunc) { const allFiles = await readdirAsync(markdownPath); const tutoFiles = allFiles.filter(filterFunc); const promises = tutoFiles.map(async tuto => { const tutoPath = path.join(markdownPath, tuto); const buf = await readFileAsync(tutoPath); const md = buf.toString(); console.log(md.split('\n').shift()); try { return extract(md); } catch (err) { console.log(err.message); } }); const tutos = await Promise.all(promises); const writePromises = tutos.map(writeJson); writePromises.push(writeJsonIndex(tutos)); await Promise.all(writePromises); process.exit(); } const filterFunc = f => f.startsWith('tutor'); run(filterFunc);