UNPKG

@stryker-mutator/core

Version:

The extendable JavaScript mutation testing framework

51 lines (46 loc) 1.24 kB
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<Record<string, unknown>>, ): 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; }