honkit
Version:
HonKit is building beautiful books using Markdown.
85 lines (81 loc) • 2.96 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const website_1 = __importDefault(require("../website"));
const json_1 = __importDefault(require("../../json"));
const templating_1 = __importDefault(require("../../templating"));
const promise_1 = __importDefault(require("../../utils/promise"));
const error_1 = __importDefault(require("../../utils/error"));
const command_1 = __importDefault(require("../../utils/command"));
const writeFile_1 = __importDefault(require("../helper/writeFile"));
const getConvertOptions_1 = __importDefault(require("./getConvertOptions"));
const SUMMARY_FILE = "SUMMARY.html";
/**
Write the SUMMARY.html
@param {Output}
@return {Output}
*/
function writeSummary(output) {
const options = output.getOptions();
const prefix = options.get("prefix");
const filePath = SUMMARY_FILE;
const engine = website_1.default.createTemplateEngine(output, filePath);
const context = json_1.default.encodeOutput(output);
// Render the theme
return (templating_1.default.renderFile(engine, `${prefix}/summary.html`, context)
// Write it to the disk
.then((tplOut) => {
return (0, writeFile_1.default)(output, filePath, tplOut.getContent());
}));
}
/**
Generate the ebook file as "index.pdf"
@param {Output}
@return {Output}
*/
function runEbookConvert(output) {
const logger = output.getLogger();
const options = output.getOptions();
const format = options.get("format");
const outputFolder = output.getRoot();
if (!format) {
return (0, promise_1.default)(output);
}
return (0, getConvertOptions_1.default)(output)
.then((options) => {
const cmd = [
"ebook-convert",
path_1.default.resolve(outputFolder, SUMMARY_FILE),
path_1.default.resolve(outputFolder, `index.${format}`),
command_1.default.optionsToShellArgs(options)
].join(" ");
return (command_1.default
// @ts-expect-error ts-migrate(2554) FIXME: Expected 2 arguments, but got 1.
.exec(cmd)
.progress((data) => {
logger.debug(data);
})
.fail((err) => {
if (err.code == 127) {
throw error_1.default.RequireInstallError({
cmd: "ebook-convert",
install: "Install it from Calibre: https://calibre-ebook.com"
});
}
throw error_1.default.EbookError(err);
}));
})
.thenResolve(output);
}
/**
Finish the generation, generates the SUMMARY.html
@param {Output}
@return {Output}
*/
function onFinish(output) {
return writeSummary(output).then(runEbookConvert);
}
exports.default = onFinish;