/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import {Joi} from '@docusaurus/utils-validation'; import type { ThemeConfig, ThemeConfigValidationContext, } from '@docusaurus/types'; export const DEFAULT_CONFIG = { // Enabled by default, as it makes sense in most cases // see also https://github.com/facebook/docusaurus/issues/5880 contextualSearch: true, searchParameters: {}, searchPagePath: 'search', }; export const Schema = Joi.object({ algolia: Joi.object({ // Docusaurus attributes contextualSearch: Joi.boolean().default(DEFAULT_CONFIG.contextualSearch), externalUrlRegex: Joi.string().optional(), // Algolia attributes appId: Joi.string().required().messages({ 'any.required': '"algolia.appId" is required. If you haven\'t migrated to the new DocSearch infra, please refer to the blog post for instructions: https://docusaurus.io/blog/2021/11/21/algolia-docsearch-migration', }), apiKey: Joi.string().required(), indexName: Joi.string().required(), searchParameters: Joi.object() .default(DEFAULT_CONFIG.searchParameters) .unknown(), searchPagePath: Joi.alternatives() .try(Joi.boolean().invalid(true), Joi.string()) .allow(null) .default(DEFAULT_CONFIG.searchPagePath), }) .label('themeConfig.algolia') .required() .unknown(), // DocSearch 3 is still alpha: don't validate the rest for now }); export function validateThemeConfig({ validate, themeConfig, }: ThemeConfigValidationContext): ThemeConfig { return validate(Schema, themeConfig); }