honkit
Version:
HonKit is building beautiful books using Markdown.
91 lines (88 loc) • 3.25 kB
JavaScript
"use strict";
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 pluginAssetsFolder_1 = __importDefault(require("../../constants/pluginAssetsFolder"));
const promise_1 = __importDefault(require("../../utils/promise"));
const fs_1 = __importDefault(require("../../utils/fs"));
/**
Copy all assets from plugins.
Assets are files stored in "_assets"
nd resources declared in the plugin itself.
@param {Output}
@return {Promise}
*/
function copyPluginAssets(output) {
const book = output.getBook();
// Don't copy plugins assets for language book
// It'll be resolved to the parent folder
if (book.isLanguageBook()) {
return (0, promise_1.default)(output);
}
const plugins = output
.getPlugins()
// We reverse the order of plugins to copy
// so that first plugins can replace assets from other plugins.
.reverse();
return promise_1.default.forEach(plugins, (plugin) => {
return copyAssets(output, plugin).then(() => {
return copyResources(output, plugin);
});
}).thenResolve(output);
}
/**
Copy assets from a plugin
@param {Plugin}
@return {Promise}
*/
function copyAssets(output, plugin) {
const logger = output.getLogger();
const pluginRoot = plugin.getPath();
const options = output.getOptions();
const outputRoot = options.get("root");
const assetOutputFolder = path_1.default.join(outputRoot, "gitbook");
const prefix = options.get("prefix");
const assetFolder = path_1.default.join(pluginRoot, pluginAssetsFolder_1.default, prefix);
if (!fs_1.default.existsSync(assetFolder)) {
return (0, promise_1.default)();
}
logger.debug.ln("copy assets from theme", assetFolder);
return fs_1.default.copyDir(assetFolder, assetOutputFolder, {
deleteFirst: false,
overwrite: true,
confirm: false
});
}
/**
Copy resources from a plugin
@return {Promise}
*/
function copyResources(output, plugin) {
const logger = output.getLogger();
const options = output.getOptions();
const outputRoot = options.get("root");
const state = output.getState();
const resources = state.getResources();
const pluginRoot = plugin.getPath();
const pluginResources = resources.get(plugin.getName());
let assetsFolder = pluginResources.get("assets");
const assetOutputFolder = path_1.default.join(outputRoot, "gitbook", plugin.getNpmID());
if (!assetsFolder) {
return (0, promise_1.default)();
}
// Resolve assets folder
assetsFolder = path_1.default.resolve(pluginRoot, assetsFolder);
if (!fs_1.default.existsSync(assetsFolder)) {
logger.warn.ln(`assets folder for plugin "${plugin.getName()}" doesn't exist`);
return (0, promise_1.default)();
}
logger.debug.ln("copy resources from plugin", assetsFolder);
return fs_1.default.copyDir(assetsFolder, assetOutputFolder, {
deleteFirst: false,
overwrite: true,
confirm: false
});
}
exports.default = copyPluginAssets;