@stryker-mutator/core
Version:
The extendable JavaScript mutation testing framework
51 lines (46 loc) • 1.24 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;
}