61 lines
2.2 KiB
JavaScript
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;
|