strapi/packages/core/admin/server/validation/action-provider.js
2022-08-11 10:20:49 +02:00

68 lines
2.1 KiB
JavaScript

'use strict';
const { yup, validateYupSchemaSync } = require('@strapi/utils');
const validators = require('./common-validators');
const registerProviderActionSchema = yup
.array()
.required()
.of(
yup
.object()
.shape({
uid: yup
.string()
.matches(
/^[a-z]([a-z|.|-]+)[a-z]$/,
(v) => `${v.path}: The id can only contain lowercase letters, dots and hyphens.`
)
.required(),
section: yup.string().oneOf(['contentTypes', 'plugins', 'settings']).required(),
pluginName: yup.mixed().when('section', {
is: 'plugins',
then: validators.isAPluginName.required(),
otherwise: validators.isAPluginName,
}),
subjects: yup.mixed().when('section', {
is: 'contentTypes',
then: yup.array().of(yup.string()).required(),
otherwise: yup
.mixed()
.oneOf([undefined], 'subjects should only be defined for the "contentTypes" section'),
}),
displayName: yup.string().required(),
category: yup.mixed().when('section', {
is: 'settings',
then: yup.string().required(),
otherwise: yup
.mixed()
.test(
'settingsCategory',
'category should only be defined for the "settings" section',
(cat) => cat === undefined
),
}),
subCategory: yup.mixed().when('section', {
is: (section) => ['settings', 'plugins'].includes(section),
then: yup.string(),
otherwise: yup
.mixed()
.test(
'settingsSubCategory',
'subCategory should only be defined for "plugins" and "settings" sections',
(subCat) => {
return subCat === undefined;
}
),
}),
options: yup.object({
applyToProperties: yup.array().of(yup.string()),
}),
})
.noUnknown()
);
module.exports = {
validateRegisterProviderAction: validateYupSchemaSync(registerProviderActionSchema),
};