mirror of
https://github.com/facebook/docusaurus.git
synced 2025-08-06 10:20:09 +02:00
54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
/**
|
|
* 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 * as Joi from 'joi';
|
|
import {isValidPathname} from '@docusaurus/utils';
|
|
|
|
export const PluginIdSchema = Joi.string()
|
|
.regex(/^[a-zA-Z_\-]+$/)
|
|
// duplicate core constant, otherwise cyclic dependency is created :(
|
|
.default('default');
|
|
|
|
const MarkdownPluginsSchema = Joi.array()
|
|
.items(
|
|
Joi.array().ordered(Joi.function().required(), Joi.object().required()),
|
|
Joi.function(),
|
|
Joi.object(),
|
|
)
|
|
.default([]);
|
|
|
|
export const RemarkPluginsSchema = MarkdownPluginsSchema;
|
|
export const RehypePluginsSchema = MarkdownPluginsSchema;
|
|
|
|
export const AdmonitionsSchema = Joi.object().default({});
|
|
|
|
export const URISchema = Joi.alternatives(
|
|
Joi.string().uri({allowRelative: true}),
|
|
Joi.custom((val, helpers) => {
|
|
try {
|
|
const url = new URL(val);
|
|
if (url) {
|
|
return val;
|
|
} else {
|
|
return helpers.error('any.invalid');
|
|
}
|
|
} catch {
|
|
return helpers.error('any.invalid');
|
|
}
|
|
}),
|
|
);
|
|
|
|
export const PathnameSchema = Joi.string()
|
|
.custom((val) => {
|
|
if (!isValidPathname(val)) {
|
|
throw new Error();
|
|
} else {
|
|
return val;
|
|
}
|
|
})
|
|
.message(
|
|
'{{#label}} is not a valid pathname. Pathname should start with / and not contain any domain or query string',
|
|
);
|