gx
chenyc
2025-06-12 7b72ac13a83764a662159d4a49b7fffb90476ecb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
'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);
  }
};