You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.2 KiB
44 lines
1.2 KiB
4 years ago
|
'use strict';
|
||
|
|
||
|
module.exports = function applyPlugins(schema, plugins, options, cacheKey) {
|
||
|
if (schema[cacheKey]) {
|
||
|
return;
|
||
|
}
|
||
|
schema[cacheKey] = true;
|
||
|
|
||
|
if (!options || !options.skipTopLevel) {
|
||
|
for (const plugin of plugins) {
|
||
|
schema.plugin(plugin[0], plugin[1]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
options = Object.assign({}, options);
|
||
|
delete options.skipTopLevel;
|
||
|
|
||
|
if (options.applyPluginsToChildSchemas !== false) {
|
||
|
for (const path of Object.keys(schema.paths)) {
|
||
|
const type = schema.paths[path];
|
||
|
if (type.schema != null) {
|
||
|
applyPlugins(type.schema, plugins, options, cacheKey);
|
||
|
|
||
|
// Recompile schema because plugins may have changed it, see gh-7572
|
||
|
type.caster.prototype.$__setSchema(type.schema);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const discriminators = schema.discriminators;
|
||
|
if (discriminators == null) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const applyPluginsToDiscriminators = options.applyPluginsToDiscriminators;
|
||
|
|
||
|
const keys = Object.keys(discriminators);
|
||
|
for (const discriminatorKey of keys) {
|
||
|
const discriminatorSchema = discriminators[discriminatorKey];
|
||
|
|
||
|
applyPlugins(discriminatorSchema, plugins,
|
||
|
{ skipTopLevel: !applyPluginsToDiscriminators }, cacheKey);
|
||
|
}
|
||
|
};
|