@stryker-mutator/core
Version:
The extendable JavaScript mutation testing framework
34 lines (29 loc) • 1.16 kB
text/typescript
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;
}