"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} @return {Promise} */ function validateConfig(book, plugins) { return promise_1.default.reduce(plugins, (newBook, plugin) => { return validatePluginConfig(newBook, plugin); }, book); } exports.default = validateConfig;