@stryker-mutator/core
Version:
The extendable JavaScript mutation testing framework
74 lines • 2.69 kB
JavaScript
import os from 'os';
import fs from 'fs/promises';
import { commonTokens } from '@stryker-mutator/api/plugin';
import semver from 'semver';
import { fileUtils } from '../../utils/file-utils.js';
import { coreTokens } from '../../di/index.js';
const guideUrl = 'https://stryker-mutator.io/docs/stryker-js/guides/angular';
const karmaConfigFile = 'karma.conf.js';
export class AngularInitializer {
log;
execa;
resolve;
static inject = [
commonTokens.logger,
coreTokens.execa,
coreTokens.resolveFromCwd,
];
constructor(log, execa, resolve) {
this.log = log;
this.execa = execa;
this.resolve = resolve;
}
name = 'angular-cli';
// Please keep config in sync with handbook
dependencies = ['@stryker-mutator/karma-runner'];
config = {
mutate: [
'src/**/*.ts',
'!src/**/*.spec.ts',
'!src/test.ts',
'!src/environments/*.ts',
],
testRunner: 'karma',
karma: {
configFile: karmaConfigFile,
projectType: 'angular-cli',
config: {
browsers: ['ChromeHeadless'],
},
},
reporters: ['progress', 'clear-text', 'html'],
ignorers: ['angular'],
concurrency: Math.floor(os.cpus().length / 2),
concurrency_comment: 'Recommended to use about half of your available cores when running stryker with angular',
coverageAnalysis: 'perTest',
};
async createConfig() {
const [karmaConfigExists, ngVersionOutput] = await Promise.all([
fileUtils.exists(karmaConfigFile),
this.getCurrentAngularVersion(),
]);
if (!karmaConfigExists &&
ngVersionOutput &&
semver.gte(ngVersionOutput, '15.1.0')) {
const command = 'npx ng generate config karma';
this.log.info(`No "karma.conf.js" file found, running command: "${command}"`);
const { stdout } = await this.execa(command);
this.log.info(`\n${stdout}`);
}
return { config: this.config, guideUrl, dependencies: this.dependencies };
}
async getCurrentAngularVersion() {
try {
const packageLocation = this.resolve('@angular/cli/package.json');
return JSON.parse(await fs.readFile(packageLocation, 'utf8')).version;
}
catch (err) {
const error = err;
this.log.warn(`Could not discover your local angular-cli version. Continuing without generating karma configuration. ${error.stack}`);
return undefined;
}
}
}
//# sourceMappingURL=angular-initializer.js.map