mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-17 16:15:22 +00:00
108 lines
2.6 KiB
JavaScript
108 lines
2.6 KiB
JavaScript
var path = require('path');
|
|
|
|
var ASSET_FOLDER = require('../../constants/pluginAssetsFolder');
|
|
var Promise = require('../../utils/promise');
|
|
var fs = 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) {
|
|
var plugins = output.getPlugins()
|
|
|
|
// We reverse the order of plugins to copy
|
|
// so that first plugins can replace assets from other plugins.
|
|
.reverse();
|
|
|
|
return Promise.forEach(plugins, function(plugin) {
|
|
return copyAssets(output, plugin)
|
|
.then(function() {
|
|
return copyResources(output, plugin);
|
|
});
|
|
})
|
|
.thenResolve(output);
|
|
}
|
|
|
|
/**
|
|
Copy assets from a plugin
|
|
|
|
@param {Plugin}
|
|
@return {Promise}
|
|
*/
|
|
function copyAssets(output, plugin) {
|
|
var logger = output.getLogger();
|
|
var pluginRoot = plugin.getPath();
|
|
var options = output.getOptions();
|
|
|
|
var outputRoot = options.get('root');
|
|
var assetOutputFolder = path.join(outputRoot, 'gitbook');
|
|
var prefix = options.get('prefix');
|
|
|
|
var assetFolder = path.join(pluginRoot, ASSET_FOLDER, prefix);
|
|
|
|
if (!fs.existsSync(assetFolder)) {
|
|
return Promise();
|
|
}
|
|
|
|
logger.debug.ln('copy assets from theme', assetFolder);
|
|
return fs.copyDir(
|
|
assetFolder,
|
|
assetOutputFolder,
|
|
{
|
|
deleteFirst: false,
|
|
overwrite: true,
|
|
confirm: true
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
Copy resources from a plugin
|
|
|
|
@param {Plugin}
|
|
@return {Promise}
|
|
*/
|
|
function copyResources(output, plugin) {
|
|
var logger = output.getLogger();
|
|
|
|
var options = output.getOptions();
|
|
var prefix = options.get('prefix');
|
|
var outputRoot = options.get('root');
|
|
|
|
var pluginRoot = plugin.getPath();
|
|
var resources = plugin.getResources(prefix);
|
|
|
|
var assetsFolder = resources.get('assets');
|
|
var assetOutputFolder = path.join(outputRoot, 'gitbook', plugin.getNpmID());
|
|
|
|
if (!assetsFolder) {
|
|
return Promise();
|
|
}
|
|
|
|
// Resolve assets folder
|
|
assetsFolder = path.resolve(pluginRoot, assetsFolder);
|
|
if (!fs.existsSync(assetsFolder)) {
|
|
logger.warn.ln('assets folder for plugin "' + plugin.getName() + '" doesn\'t exist');
|
|
return Promise();
|
|
}
|
|
|
|
logger.debug.ln('copy resources from plugin', assetsFolder);
|
|
|
|
return fs.copyDir(
|
|
assetsFolder,
|
|
assetOutputFolder,
|
|
{
|
|
deleteFirst: false,
|
|
overwrite: true,
|
|
confirm: true
|
|
}
|
|
);
|
|
}
|
|
|
|
module.exports = copyPluginAssets;
|