mdast
Version:
Markdown processor powered by plugins
87 lines (75 loc) • 1.78 kB
JavaScript
/**
* @author Titus Wormer
* @copyright 2015 Titus Wormer
* @license MIT
* @module mdast:cli:file-pipeline
* @version 2.2.2
* @fileoverview Process a file.
*/
;
/* eslint-env node */
/*
* Dependencies.
*/
var ware = require('ware');
var read = require('./read');
var configure = require('./configure');
var parse = require('./parse');
var transform = require('./transform');
var queue = require('./queue');
var stringify = require('./stringify');
var copy = require('./copy');
var stdout = require('./stdout');
var fileSystem = require('./file-system');
/**
* Factory to run a pipe. Wraps a pipe to trigger an
* error on the `file` in `context`, but still call
* `next`.
*
* @param {Ware} pipe - Middelware.
* @return {function(Object, Function)} - Runner.
*/
function runFactory(pipe) {
/**
* Run `context` through a bound pipe.
* Always invokes `next` (without error).
*
* @param {Object} context - File context.
* @param {function()} next - Next.
*/
function run(context, next) {
pipe.run(context, function (err) {
if (err) {
context.file.quiet = true;
context.file.fail(err);
}
next();
});
}
return run;
}
/*
* Middleware, this ensures each of the four pipes
* always runs (so even if the read pipe fails),
* queue, write, and log trigger.
*/
var pipe = ware()
.use(runFactory(
ware()
.use(read)
.use(configure)
.use(parse)
.use(transform)
))
.use(runFactory(ware().use(queue)))
.use(runFactory(
ware()
.use(stringify)
.use(copy)
.use(stdout)
.use(fileSystem)
));
/*
* Expose.
*/
module.exports = pipe;