diff --git a/package.json b/package.json index 6eacc45..cdc371d 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "author": "Matúš Námešný", "license": "ISC", "dependencies": { + "async": "^2.5.0", "axios": "^0.17.0", "babel-cli": "^6.24.1", "babel-polyfill": "^6.7.4", @@ -29,8 +30,7 @@ "react": "^15.0.1", "react-dom": "^15.0.1", "react-redux": "^4.4.4", - "react-router-dom": "^4.1.1", - "step": "^1.0.0" + "react-router-dom": "^4.1.1" }, "devDependencies": { "babel-core": "^6.7.6", diff --git a/src/utils/compiler.js b/src/utils/compiler.js index f1ecf6f..3c48df1 100644 --- a/src/utils/compiler.js +++ b/src/utils/compiler.js @@ -3,7 +3,7 @@ const fs = require('fs'); const path = require('path'); const moment = require('moment'); const jsonfile = require('jsonfile'); -const Step = require('step'); +const async = require('async'); const fm = require('front-matter'); const config = require('../static/config/config.json'); @@ -11,12 +11,6 @@ function readFile(filepath, callback) { fs.readFile(filepath, 'utf-8', callback); } -function writeRenderedFile(renderedpath, result) { - fs.writeFile(renderedpath, result, (err) => { - if (err) throw err; - }); -} - function render(file) { const md = new MarkdownIt(); return md.render(file); @@ -36,42 +30,44 @@ function fileMetadata(filepath) { return metadata; } +function compile(fileData, callback) { + const frontMatter = fm(fileData); + const rendered = render(frontMatter.body); + const metadata = fileMetadata(filepath); + + const post = { + published: moment().format('MMMM Do YYYY'), + filename: metadata.filename, + title: frontMatter.attributes.title, + summary: frontMatter.attributes.summary, + }; + + const renderedpath = path.join(process.cwd(), config.renderPath, `${metadata.filename}.html`); + + this.data.posts.push(post); + + fs.writeFile(renderedpath, rendered, callback); +} + function Compiler(data) { this.data = data; } Compiler.prototype.addFile = function (filepath) { - Step( - function loadFiles() { - readFile(filepath, this.parallel()); - }, - (err, fileData) => { - if (err) throw err; - const frontMatter = fm(fileData); - const rendered = render(frontMatter.body); - const metadata = fileMetadata(filepath); - - const post = { - published: moment().format('MMMM Do YYYY'), - filename: metadata.filename, - title: frontMatter.attributes.title, - summary: frontMatter.attributes.summary, - }; - - const renderedpath = path.join(process.cwd(), config.renderPath, `${metadata.filename}.html`); - - this.data.posts.push(post); - writeRenderedFile(renderedpath, rendered); - } - ); -}; - -Compiler.prototype.writeData = function () { - const dataPath = path.join(process.cwd(), 'src/utils/data.json'); - jsonfile.writeFile(dataPath, this.data, (err) => { + async.waterfall([ + readFile, + compile, + ], (err) => { if (err) throw err; }); + +}; + +Compiler.prototype.writeData = function (callback) { + const dataPath = path.join(process.cwd(), 'src/utils/data.json'); + console.log(JSON.stringify(this.data)); + jsonfile.writeFile(dataPath, this.data, callback); }; module.exports = Compiler; diff --git a/src/utils/scanner.js b/src/utils/scanner.js index f38d1b5..e7af96e 100644 --- a/src/utils/scanner.js +++ b/src/utils/scanner.js @@ -1,19 +1,35 @@ const fs = require('fs'); const path = require('path'); +const async = require('async'); const Compiler = require('./compiler'); const config = require('../static/config/config.json'); const data = require('./data.json'); module.exports = function() { - console.log(data); var compiler = new Compiler(data); - fs.readdir(config.contentPath, (err, files) => { + function readdir(callback) { + fs.readdir(config.contentPath, callback); + } + + function compile(files, callback) { files.forEach(file => { const filePath = path.join(process.cwd(), config.contentPath, file); compiler.addFile(filePath); }); - compiler.writeData(); - }); + return callback(null); + } + + function writeData(callback) { + compiler.writeData(callback); + } + + async.waterfall([ + readdir, + compile, + writeData + ], (err => { + if(err) throw err; + })); } diff --git a/yarn.lock b/yarn.lock index 531c576..f8a52f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -169,7 +169,7 @@ async-foreach@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" -async@^2.1.2, async@^2.1.5: +async@^2.1.2, async@^2.1.5, async@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" dependencies: @@ -4059,10 +4059,6 @@ stdout-stream@^1.4.0: dependencies: readable-stream "^2.0.1" -step@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/step/-/step-1.0.0.tgz#b300e9d2ae9057d4d78633aae2303813a94bdff2" - stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"