import { commonTokens, tokens } from '@stryker-mutator/api/plugin'; import type { JSONSchema7 } from 'json-schema'; import { Logger } from '@stryker-mutator/api/logging'; import { coreTokens } from '../di/index.js'; export class MetaSchemaBuilder { public static inject = tokens(coreTokens.validationSchema, commonTokens.logger); constructor(private readonly schema: JSONSchema7, private readonly log: Logger) {} public buildMetaSchema(pluginSchemaContributions: Array>): JSONSchema7 { this.log.debug('Contributing %s schemas from plugins to options validation.', pluginSchemaContributions.length); return mergedSchema(this.schema, pluginSchemaContributions); } } function mergedSchema(mainSchema: JSONSchema7, additionalSchemas: JSONSchema7[]): JSONSchema7 { const schema = { ...mainSchema, properties: { ...mainSchema.properties, }, definitions: { ...mainSchema.definitions, }, }; Object.assign(schema.properties, ...additionalSchemas.map((s) => s.properties)); Object.assign(schema.definitions, ...additionalSchemas.map((s) => s.definitions)); return schema; }