mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-17 08:05:19 +00:00
79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
var _ = require('lodash');
|
|
var fs = require('fs');
|
|
var Ignore = require('ignore');
|
|
|
|
var Promise = require('./utils/promise');
|
|
var pathUtil = require('./utils/path');
|
|
var generators = require('./generators');
|
|
var PluginsManager = require('./plugins');
|
|
|
|
function Output(book, type) {
|
|
if (!generators[type]) throw new Error('Generator not found"' + type + '"');
|
|
|
|
this.book = book;
|
|
this.type = type;
|
|
this.plugins = new PluginsManager(book);
|
|
this.generator = new generators[type](this, type);
|
|
|
|
// Files to ignore in output
|
|
this.ignore = Ignore();
|
|
this.ignore.addPattern([
|
|
'.gitignore',
|
|
'.ignore',
|
|
'.bookignore',
|
|
|
|
// The configuration file should not be copied in the output
|
|
this.book.config.filename
|
|
]);
|
|
}
|
|
|
|
|
|
// Resolve a file in the output directory
|
|
Output.prototype.resolve = function(filename) {
|
|
return pathUtil.resolveInRoot.apply(null, [this.book.config.get('output')].concat(_.toArray(arguments)));
|
|
};
|
|
|
|
// Write a file/buffer to the output folder
|
|
Output.prototype.writeFile = function(filename, buf) {
|
|
filename = this.resolve(filename);
|
|
return Promise.nfcall(fs.writeFileSync, filename, buf);
|
|
};
|
|
|
|
// Start the generation, for a parsed book
|
|
Output.prototype.generate = function() {
|
|
var that = this;
|
|
var isMultilingual = this.isMultilingual();
|
|
|
|
return Promise()
|
|
|
|
// Initialize the generation
|
|
.then(function() {
|
|
return that.generator.prepare();
|
|
})
|
|
|
|
// Process all files
|
|
.then(function() {
|
|
return that.book.fs.listAllFiles(that.book.root);
|
|
})
|
|
.then(function(files) {
|
|
return Promise.serie(files, function(filename) {
|
|
// Ignore file present in a language book
|
|
if (isMultilingual && that.book.isInLanguageBook(filename)) return;
|
|
|
|
// Process file as page or asset
|
|
if (that.book.hasPage(filename)) {
|
|
return that.generator.writePage(that.book.getPage(filename));
|
|
} else {
|
|
return that.generator.writeAsset(filename);
|
|
}
|
|
});
|
|
})
|
|
|
|
// Finish the generation
|
|
.then(function() {
|
|
return that.generator.finish();
|
|
});
|
|
};
|
|
|
|
module.exports = Output;
|