2025-05-12 05:38:44 +09:00

64 lines
2.9 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const path_1 = __importDefault(require("path"));
const promise_1 = __importDefault(require("../utils/promise"));
const fs_1 = __importDefault(require("../utils/fs"));
const parse_1 = __importDefault(require("../parse"));
const output_1 = __importDefault(require("../output"));
const options_1 = __importDefault(require("./options"));
const getBook_1 = __importDefault(require("./getBook"));
const page_cache_1 = require("../output/page-cache");
const tmpdir_1 = require("../fs/tmpdir");
function default_1(format) {
return {
name: `${format} [book] [output]`,
description: "build a book into an ebook file",
options: [options_1.default.log],
exec: function (args, kwargs) {
const extension = `.${format}`;
// Output file will be stored in
const outputFile = args[1] || `book${extension}`;
// Create temporary directory
const outputFolder = (0, tmpdir_1.createTmpDirWithRealPath)();
const book = (0, getBook_1.default)(args, kwargs);
const logger = book.getLogger();
const Generator = output_1.default.getGenerator("ebook");
if (kwargs.reload) {
(0, page_cache_1.clearCache)();
}
return (parse_1.default.parseBook(book)
.then((resultBook) => {
return output_1.default.generate(Generator, resultBook, {
root: outputFolder,
format: format
});
})
// Extract ebook file
.then((output) => {
const book = output.getBook();
const languages = book.getLanguages();
if (book.isMultilingual()) {
return promise_1.default.forEach(languages.getList(), (lang) => {
const langID = lang.getID();
const langOutputFile = path_1.default.join(path_1.default.dirname(outputFile), `${path_1.default.basename(outputFile, extension)}_${langID}${extension}`);
return fs_1.default.copy(path_1.default.resolve(outputFolder, langID, `index${extension}`), langOutputFile);
}).thenResolve(languages.getCount());
}
else {
return fs_1.default.copy(path_1.default.resolve(outputFolder, `index${extension}`), outputFile).thenResolve(1);
}
})
// Log end
.then((count) => {
logger.info.ok(`${count} file(s) generated`);
logger.debug("cleaning up... ");
return logger.debug.promise(fs_1.default.rmDir(outputFolder));
}));
}
};
}