world/book/node_modules/honkit/lib/plugins/validateConfig.js
2025-05-12 05:38:44 +09:00

61 lines
2.2 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const immutable_1 = __importDefault(require("immutable"));
const jsonschema_1 = __importDefault(require("jsonschema"));
const json_schema_defaults_1 = __importDefault(require("json-schema-defaults"));
const promise_1 = __importDefault(require("../utils/promise"));
const error_1 = __importDefault(require("../utils/error"));
const mergeDefaults_1 = __importDefault(require("../utils/mergeDefaults"));
/**
Validate one plugin for a book and update book's confiration
@param {Book}
@param {Plugin}
@return {Book}
*/
function validatePluginConfig(book, plugin) {
let config = book.getConfig();
const packageInfos = plugin.getPackage();
const configKey = ["pluginsConfig", plugin.getName()].join(".");
let pluginConfig = config.getValue(configKey, {}).toJS();
const schema = (packageInfos.get("gitbook") || immutable_1.default.Map()).toJS();
if (!schema)
return book;
// Normalize schema
schema.id = `/${configKey}`;
schema.type = "object";
// Validate and throw if invalid
const v = new jsonschema_1.default.Validator();
const result = v.validate(pluginConfig, schema, {
propertyName: configKey
});
// Throw error
if (result.errors.length > 0) {
throw new error_1.default.ConfigurationError(new Error(result.errors[0].stack));
}
// Insert default values
const defaults = (0, json_schema_defaults_1.default)(schema);
pluginConfig = (0, mergeDefaults_1.default)(pluginConfig, defaults);
// Update configuration
config = config.setValue(configKey, pluginConfig);
// Return new book
return book.set("config", config);
}
/**
Validate a book configuration for plugins and
returns an update configuration with default values.
@param {Book}
@param {OrderedMap<String:Plugin>}
@return {Promise<Book>}
*/
function validateConfig(book, plugins) {
return promise_1.default.reduce(plugins, (newBook, plugin) => {
return validatePluginConfig(newBook, plugin);
}, book);
}
exports.default = validateConfig;