UNPKG

emmaramirez.me

Version:
96 lines (82 loc) 2.58 kB
{ const fse = require('fs-extra'); const fs = require('fs'); const path = require('path'); const marked = require('marked'); const chalk = require('chalk'); const ensureExists = require('./ensure-exists'); const buildFile = require('./build-file'); const articles = require('../src/data.json').articles; const config = require('../website.config'); const noop = () => {}; const extension = (element: string) => { const extName = path.extname(element); return extName === '.md'; }; const isDirectory = (source: string) => fs.lstatSync(source).isDirectory(); const getDirectories = (source: string) => fs .readdirSync(source) .map((name: string) => path.join(source, name)) .filter(isDirectory); const directories = getDirectories(path.resolve(__dirname, '../posts')); directories.forEach((dir: string) => fs.readdir(path.resolve(__dirname, dir), (err: any, files: string[]) => { readFiles(dir, files); }) ); const readFiles = (dir: string, files: string[]) => files.filter(extension).forEach((file: string) => { const data = fs.readFileSync(path.join(dir, file), 'utf8'); convertToMarkdown(data, file); }); marked.setOptions({ gfm: true, tables: true, smartLists: true, smartypants: true }); const getTags = (filename: string) => { const article = articles.find( (f: any) => f.link === `./posts/${filename}` ); if (article) return article.tags.join(', '); return 'no tags'; }; const getDescription = (data: any) => { const description = data .split('\n') .filter((s: string) => !s.includes('#')) .map((s: string) => s.trim()) .filter((s: string) => s !== '')[0] + '...'; // tslint:disable-next-line:quotemark return marked(description).replace(/"/g, "'"); }; const buildBlogPost = (data: any, fileName: string) => { return buildFile({ config, keywords: getTags(fileName), description: getDescription(data), markdown: marked(data), fileName }); }; const convertToMarkdown = (data: any, file: string) => { const fileName = file.split('.')[0]; ensureExists(`./docs/posts/${fileName}`, 0o744, (err: Error) => noop()); const blogPost = buildBlogPost(data, fileName); fs.writeFile( `./docs/posts/${fileName}/index.html`, blogPost, (err: Error) => { if (err) console.error(err); console.log( `Wrote ${chalk.yellow(fileName)} to posts ${chalk.green( `[${new Date().toUTCString()}]` )}` ); } ); }; }