UNPKG

1.15 kBPlain TextView Raw
1import { commonTokens, tokens } from '@stryker-mutator/api/plugin';
2import type { JSONSchema7 } from 'json-schema';
3import { Logger } from '@stryker-mutator/api/logging';
4
5import { coreTokens } from '../di/index.js';
6
7export class MetaSchemaBuilder {
8 public static inject = tokens(coreTokens.validationSchema, commonTokens.logger);
9 constructor(private readonly schema: JSONSchema7, private readonly log: Logger) {}
10
11 public buildMetaSchema(pluginSchemaContributions: Array<Record<string, unknown>>): JSONSchema7 {
12 this.log.debug('Contributing %s schemas from plugins to options validation.', pluginSchemaContributions.length);
13 return mergedSchema(this.schema, pluginSchemaContributions);
14 }
15}
16function mergedSchema(mainSchema: JSONSchema7, additionalSchemas: JSONSchema7[]): JSONSchema7 {
17 const schema = {
18 ...mainSchema,
19 properties: {
20 ...mainSchema.properties,
21 },
22 definitions: {
23 ...mainSchema.definitions,
24 },
25 };
26
27 Object.assign(schema.properties, ...additionalSchemas.map((s) => s.properties));
28 Object.assign(schema.definitions, ...additionalSchemas.map((s) => s.definitions));
29 return schema;
30}