diff --git a/.eslintrc.js b/.eslintrc.js index aaf6f042eb..6562ae2855 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -60,7 +60,7 @@ module.exports = { '@typescript-eslint/no-misused-new': 'error', '@typescript-eslint/no-misused-promises': 'off', '@typescript-eslint/no-namespace': 'off', - '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/no-parameter-properties': 'off', '@typescript-eslint/no-require-imports': 'off', '@typescript-eslint/no-this-alias': 'off', diff --git a/.github/workflows/mutation-testing.yml b/.github/workflows/mutation-testing.yml index 6df6f7bf61..5ca9c035cf 100644 --- a/.github/workflows/mutation-testing.yml +++ b/.github/workflows/mutation-testing.yml @@ -5,8 +5,6 @@ on: branches: - master - test/** - paths: - - 'packages/**/*.ts' jobs: core: @@ -21,9 +19,7 @@ jobs: npm install npm run build - name: Run Stryker - run: | - cd packages/core - npm run stryker + run: npx lerna run --scope "@stryker-mutator/core" --concurrency 1 --stream stryker env: STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} @@ -40,17 +36,7 @@ jobs: npm install npm run build - name: Run Stryker - run: | - cd packages/api - npm run stryker - cd ../babel-transpiler - npm run stryker - cd ../html-reporter - npm run stryker - cd ../jasmine-framework - npm run stryker - cd ../javascript-mutator - npm run stryker + run: npx lerna run --scope "@stryker-mutator/{api,babel-transpiler,jasmine-framework,javascript-mutator}" --concurrency 1 --stream stryker env: STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} @@ -67,17 +53,7 @@ jobs: npm install npm run build - name: Run Stryker - run: | - cd packages/jasmine-runner - npm run stryker - cd ../jest-runner - npm run stryker - cd ../karma-runner - npm run stryker - cd ../mocha-framework - npm run stryker - cd ../mocha-runner - npm run stryker + run: npx lerna run --scope "@stryker-mutator/{jasmine-runner,jest-runner,karma-runner,mocha-framework,mocha-runner}" --concurrency 1 --stream stryker env: STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} @@ -94,16 +70,6 @@ jobs: npm install npm run build - name: Run Stryker - run: | - cd packages/typescript - npm run stryker - cd ../vue-mutator - npm run stryker - cd ../webpack-transpiler - npm run stryker - cd ../wct-runner - npm run stryker - cd ../util - npm run stryker + run: npx lerna run --scope "@stryker-mutator/{typescript,vue-mutator,webpack-transpiler,wct-runner,util}" --concurrency 1 --stream stryker env: STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} diff --git a/package.json b/package.json index 5cb20db0b9..339aa69929 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@types/lodash": "^4.14.110", "@types/mkdirp": "1.0.0", "@types/mocha": "^2.2.44", - "@types/node": "^10.11.5", + "@types/node": "^13.7.1", "@types/rimraf": "2.0.3", "@types/sinon": "5.0.5", "@types/sinon-chai": "3.2.3", diff --git a/packages/api/package.json b/packages/api/package.json index 4988eb8225..a49332c4a7 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -43,6 +43,7 @@ "tslib": "~1.10.0" }, "devDependencies": { + "@types/node": "^13.7.1", "surrial": "~1.0.0", "typed-inject": "~2.1.1" } diff --git a/packages/api/stryker.conf.js b/packages/api/stryker.conf.js index 8d6b05fbb1..0447f40608 100644 --- a/packages/api/stryker.conf.js +++ b/packages/api/stryker.conf.js @@ -1,7 +1,15 @@ +const { execSync } = require('child_process'); const path = require('path'); const settings = require('../../stryker.parent.conf'); const moduleName = __dirname.split(path.sep).pop(); settings.dashboard.module = moduleName; -module.exports = function (config) { - config.set(settings); -}; + +// Add src-generated to the files list, since it isn't in git +const files = execSync('git ls-files --others --exclude-standard --cached --exclude .stryker-tmp') + .toString() + .split('\n') + .map(file => file.trim()) + .filter(Boolean); +files.push('src-generated/**/*.*'); +settings.files = files; +module.exports = settings; diff --git a/packages/babel-transpiler/package.json b/packages/babel-transpiler/package.json index 02c205f420..a9134ae011 100644 --- a/packages/babel-transpiler/package.json +++ b/packages/babel-transpiler/package.json @@ -66,6 +66,7 @@ "@types/babel__traverse": "~7.0.5", "@types/glob": "~7.1.0", "@types/minimatch": "~3.0.3", + "@types/node": "^13.7.1", "babel-plugin-transform-es2015-spread": "~6.22.0", "glob": "~7.1.2" }, diff --git a/packages/core/package.json b/packages/core/package.json index df3d5d69ab..546d52f837 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -85,7 +85,7 @@ "@types/istanbul-lib-instrument": "~1.7.0", "@types/lodash.flatmap": "^4.5.6", "@types/lodash.groupby": "^4.6.6", - "@types/node": "~10.17.13", + "@types/node": "^13.7.1", "@types/progress": "~2.0.1", "flatted": "^2.0.0" } diff --git a/packages/core/src/test-runner/CommandTestRunner.ts b/packages/core/src/test-runner/CommandTestRunner.ts index dbf2a80a5c..f8da73547e 100644 --- a/packages/core/src/test-runner/CommandTestRunner.ts +++ b/packages/core/src/test-runner/CommandTestRunner.ts @@ -59,10 +59,10 @@ export default class CommandTestRunner implements TestRunner { const result = completeResult(code, timer); handleResolve(result); }); - childProcess.stdout.on('data', chunk => { + childProcess.stdout!.on('data', chunk => { output.push(chunk); }); - childProcess.stderr.on('data', chunk => { + childProcess.stderr!.on('data', chunk => { output.push(chunk); }); @@ -78,8 +78,8 @@ export default class CommandTestRunner implements TestRunner { }; function removeAllListeners() { - childProcess.stderr.removeAllListeners(); - childProcess.stdout.removeAllListeners(); + childProcess.stderr!.removeAllListeners(); + childProcess.stdout!.removeAllListeners(); childProcess.removeAllListeners(); } diff --git a/packages/core/test/unit/child-proxy/ChildProcessWorker.spec.ts b/packages/core/test/unit/child-proxy/ChildProcessWorker.spec.ts index 8cd25e46f0..03e3a37809 100644 --- a/packages/core/test/unit/child-proxy/ChildProcessWorker.spec.ts +++ b/packages/core/test/unit/child-proxy/ChildProcessWorker.spec.ts @@ -36,7 +36,7 @@ describe(ChildProcessProxyWorker.name, () => { let processRemoveListenerStub: sinon.SinonStub; let processChdirStub: sinon.SinonStub; let logMock: Mock; - let originalProcessSend: undefined | NodeJS.MessageListener; + let originalProcessSend: typeof process.send; let processes: NodeJS.MessageListener[]; const workingDir = 'working dir'; diff --git a/packages/grunt-stryker/package.json b/packages/grunt-stryker/package.json index edbbb5b5e2..079e1229b6 100644 --- a/packages/grunt-stryker/package.json +++ b/packages/grunt-stryker/package.json @@ -33,7 +33,8 @@ }, "main": "Gruntfile.js", "devDependencies": { - "@stryker-mutator/api": "^2.5.0" + "@stryker-mutator/api": "^2.5.0", + "@types/node": "^13.7.1" }, "peerDependencies": { "@stryker-mutator/core": "^2.0.0", diff --git a/packages/html-reporter/package.json b/packages/html-reporter/package.json index b726c2959a..f2ce0fbcba 100644 --- a/packages/html-reporter/package.json +++ b/packages/html-reporter/package.json @@ -3,8 +3,7 @@ "version": "2.5.0", "description": "An html reporter for the JavaScript mutation testing framework Stryker", "main": "src/index.js", - "scripts": { - }, + "scripts": {}, "repository": { "type": "git", "url": "https://github.com/stryker-mutator/stryker.git" @@ -31,5 +30,8 @@ "contributors": [ "Nico Jansen ", "Simon de Lang " - ] + ], + "devDependencies": { + "@types/node": "^13.7.1" + } } diff --git a/packages/jasmine-framework/package.json b/packages/jasmine-framework/package.json index ad503ab030..d58e0211d2 100644 --- a/packages/jasmine-framework/package.json +++ b/packages/jasmine-framework/package.json @@ -38,5 +38,8 @@ "contributors": [], "engines": { "node": ">=8" + }, + "devDependencies": { + "@types/node": "^13.7.1" } } diff --git a/packages/jasmine-runner/package.json b/packages/jasmine-runner/package.json index b507d32b91..cfa6826321 100644 --- a/packages/jasmine-runner/package.json +++ b/packages/jasmine-runner/package.json @@ -41,7 +41,8 @@ }, "devDependencies": { "@stryker-mutator/jasmine-framework": "^2.5.0", - "@stryker-mutator/test-helpers": "^2.5.0" + "@stryker-mutator/test-helpers": "^2.5.0", + "@types/node": "^13.7.1" }, "dependencies": { "@stryker-mutator/api": "^2.5.0", diff --git a/packages/jasmine-runner/test/unit/JasmineTestRunner.spec.ts b/packages/jasmine-runner/test/unit/JasmineTestRunner.spec.ts index 8921de8ade..68425b2f8d 100644 --- a/packages/jasmine-runner/test/unit/JasmineTestRunner.spec.ts +++ b/packages/jasmine-runner/test/unit/JasmineTestRunner.spec.ts @@ -54,8 +54,8 @@ describe('JasmineTestRunner', () => { }); it('should clear require cache on run', async () => { - require.cache['foo.js'] = 'foo'; - require.cache['bar.js'] = 'bar'; + require.cache['foo.js'] = 'foo' as any; + require.cache['bar.js'] = 'bar' as any; await actRunWithoutTests(); expect(require.cache['foo.js']).not.ok; expect(require.cache['bar.js']).not.ok; diff --git a/packages/javascript-mutator/package.json b/packages/javascript-mutator/package.json index 165ed3015e..63e297f2db 100644 --- a/packages/javascript-mutator/package.json +++ b/packages/javascript-mutator/package.json @@ -51,6 +51,7 @@ "@stryker-mutator/test-helpers": "^2.5.0", "@types/babel__generator": "^7.0.0", "@types/babel__traverse": "^7.0.0", - "@types/lodash.clonedeep": "^4.5.6" + "@types/lodash.clonedeep": "^4.5.6", + "@types/node": "^13.7.1" } } diff --git a/packages/jest-runner/package.json b/packages/jest-runner/package.json index 6207bff997..95d406431c 100644 --- a/packages/jest-runner/package.json +++ b/packages/jest-runner/package.json @@ -39,6 +39,7 @@ "homepage": "https://github.com/stryker-mutator/stryker/tree/master/packages/jest-runner#readme", "devDependencies": { "@stryker-mutator/test-helpers": "^2.5.0", + "@types/node": "^13.7.1", "@types/semver": "~7.1.0", "jest": "^25.1.0", "react": "~16.12.0", diff --git a/packages/jest-runner/src/configLoaders/CustomJestConfigLoader.ts b/packages/jest-runner/src/configLoaders/CustomJestConfigLoader.ts index ab1bf7d24a..4e766f7661 100644 --- a/packages/jest-runner/src/configLoaders/CustomJestConfigLoader.ts +++ b/packages/jest-runner/src/configLoaders/CustomJestConfigLoader.ts @@ -2,6 +2,7 @@ import fs = require('fs'); import path from 'path'; import JestConfigLoader from './JestConfigLoader'; +import { NodeRequireFunction } from './NodeRequireFunction'; /** * The Default config loader will load the Jest configuration using the package.json in the package root diff --git a/packages/jest-runner/src/configLoaders/NodeRequireFunction.ts b/packages/jest-runner/src/configLoaders/NodeRequireFunction.ts new file mode 100644 index 0000000000..aa9eff6637 --- /dev/null +++ b/packages/jest-runner/src/configLoaders/NodeRequireFunction.ts @@ -0,0 +1 @@ +export type NodeRequireFunction = (moduleName: string) => any; diff --git a/packages/karma-runner/package.json b/packages/karma-runner/package.json index 675d59e77a..2af73ae3ee 100644 --- a/packages/karma-runner/package.json +++ b/packages/karma-runner/package.json @@ -33,9 +33,11 @@ "homepage": "https://github.com/stryker-mutator/stryker/tree/master/packages/karma-runner#readme", "devDependencies": { "@stryker-mutator/jasmine-framework": "^2.5.0", + "@stryker-mutator/mocha-framework": "^2.5.0", "@stryker-mutator/test-helpers": "^2.5.0", "@stryker-mutator/util": "^2.5.0", "@types/express": "~4.17.0", + "@types/node": "^13.7.1", "@types/semver": "~7.1.0", "jasmine-core": "~3.5.0", "karma": "~4.1.0", diff --git a/packages/karma-runner/test/integration/KarmaTestRunner.it.spec.ts b/packages/karma-runner/test/integration/KarmaTestRunner.it.spec.ts index 74cccb960a..143522138a 100644 --- a/packages/karma-runner/test/integration/KarmaTestRunner.it.spec.ts +++ b/packages/karma-runner/test/integration/KarmaTestRunner.it.spec.ts @@ -3,6 +3,7 @@ import * as http from 'http'; import { CoverageCollection, RunResult, RunStatus, TestStatus } from '@stryker-mutator/api/test_runner'; import JasmineTestFramework from '@stryker-mutator/jasmine-framework/src/JasmineTestFramework'; +import MochaTestFramework from '@stryker-mutator/mocha-framework/src/MochaTestFramework'; import { testInjector } from '@stryker-mutator/test-helpers'; import { expect } from 'chai'; import { FilePattern } from 'karma'; @@ -10,7 +11,6 @@ import { TestSelection } from '@stryker-mutator/api/test_framework'; import KarmaTestRunner from '../../src/KarmaTestRunner'; import { expectTestResults } from '../helpers/assertions'; -import MochaTestFramework from '../../../mocha-framework/src/MochaTestFramework'; function wrapInClosure(codeFragment: string) { return ` diff --git a/packages/mocha-framework/package.json b/packages/mocha-framework/package.json index 4ea707bd69..3696c68b90 100644 --- a/packages/mocha-framework/package.json +++ b/packages/mocha-framework/package.json @@ -36,6 +36,7 @@ "homepage": "https://github.com/stryker-mutator/stryker/tree/master/packages/mocha-framework#readme", "license": "Apache-2.0", "devDependencies": { + "@types/node": "^13.7.1", "tslib": "~1.10.0" }, "peerDependencies": { diff --git a/packages/mocha-runner/package.json b/packages/mocha-runner/package.json index 4c8b543a69..e92b270885 100644 --- a/packages/mocha-runner/package.json +++ b/packages/mocha-runner/package.json @@ -41,9 +41,11 @@ "tslib": "~1.10.0" }, "devDependencies": { + "@stryker-mutator/core": "^2.5.0", + "@stryker-mutator/mocha-framework": "^2.5.0", "@stryker-mutator/test-helpers": "^2.5.0", "@types/multimatch": "~4.0.0", - "@stryker-mutator/mocha-framework": "^2.5.0" + "@types/node": "^13.7.1" }, "peerDependencies": { "@stryker-mutator/core": "^2.0.0", diff --git a/packages/mocha-runner/test/integration/MochaFramework.it.spec.ts b/packages/mocha-runner/test/integration/MochaFramework.it.spec.ts index 7a58f7a450..54a8cf0268 100644 --- a/packages/mocha-runner/test/integration/MochaFramework.it.spec.ts +++ b/packages/mocha-runner/test/integration/MochaFramework.it.spec.ts @@ -1,14 +1,14 @@ import * as path from 'path'; +import { expect } from 'chai'; import { TestSelection } from '@stryker-mutator/api/test_framework'; import { TestStatus, RunStatus } from '@stryker-mutator/api/test_runner'; -import { expect } from 'chai'; import { LoggingServer, testInjector } from '@stryker-mutator/test-helpers'; import MochaTestFramework from '@stryker-mutator/mocha-framework/src/MochaTestFramework'; +import ChildProcessProxy from '@stryker-mutator/core/src/child-proxy/ChildProcessProxy'; import { LogLevel } from '@stryker-mutator/api/core'; import { commonTokens } from '@stryker-mutator/api/plugin'; -import ChildProcessProxy from '../../../core/src/child-proxy/ChildProcessProxy'; import { MochaTestRunner } from '../../src/MochaTestRunner'; const test0: Readonly = Object.freeze({ diff --git a/packages/mocha-runner/test/unit/MochaTestRunner.spec.ts b/packages/mocha-runner/test/unit/MochaTestRunner.spec.ts index b2398e12bd..59948d423e 100644 --- a/packages/mocha-runner/test/unit/MochaTestRunner.spec.ts +++ b/packages/mocha-runner/test/unit/MochaTestRunner.spec.ts @@ -217,9 +217,9 @@ describe(MochaTestRunner.name, () => { sut = createSut({ fileNames: ['foo.js', 'bar.js'] }); discoveredFiles.push('foo.js'); // should still purge 'bar.js' sut.init(); - require.cache['foo.js'] = 'foo'; - require.cache['bar.js'] = 'bar'; - require.cache['baz.js'] = 'baz'; + require.cache['foo.js'] = 'foo' as any; + require.cache['bar.js'] = 'bar' as any; + require.cache['baz.js'] = 'baz' as any; // Act await actRun(); diff --git a/packages/mutator-specification/package.json b/packages/mutator-specification/package.json index 127dcae9ed..a8c4f0de09 100644 --- a/packages/mutator-specification/package.json +++ b/packages/mutator-specification/package.json @@ -18,5 +18,8 @@ "node": ">=8" }, "homepage": "https://github.com/stryker-mutator/stryker/tree/master/packages/javascript-mutator#readme", - "license": "Apache-2.0" + "license": "Apache-2.0", + "devDependencies": { + "@types/node": "^13.7.1" + } } diff --git a/packages/test-helpers/package.json b/packages/test-helpers/package.json index 514c9a53af..cdccacf7a9 100644 --- a/packages/test-helpers/package.json +++ b/packages/test-helpers/package.json @@ -21,6 +21,7 @@ }, "devDependencies": { "@stryker-mutator/api": "^2.5.0", + "@types/node": "^13.7.1", "typed-inject": "~2.1.1" } } diff --git a/packages/typescript/package.json b/packages/typescript/package.json index 438cd87128..5f4cece11d 100644 --- a/packages/typescript/package.json +++ b/packages/typescript/package.json @@ -45,6 +45,7 @@ "@stryker-mutator/mutator-specification": "^2.5.0", "@stryker-mutator/test-helpers": "^2.5.0", "@types/lodash.flatmap": "~4.5.3", + "@types/node": "^13.7.1", "@types/semver": "~7.1.0", "surrial": "~1.0.0" }, diff --git a/packages/util/package.json b/packages/util/package.json index 257d07b78f..f82d437b49 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -24,5 +24,8 @@ "bugs": { "url": "https://github.com/stryker-mutator/stryker/issues" }, - "homepage": "https://github.com/stryker-mutator/stryker/tree/master/packages/util#readme" + "homepage": "https://github.com/stryker-mutator/stryker/tree/master/packages/util#readme", + "devDependencies": { + "@types/node": "^13.7.1" + } } diff --git a/packages/vue-mutator/package.json b/packages/vue-mutator/package.json index 15ce8bd089..4d75b916e2 100644 --- a/packages/vue-mutator/package.json +++ b/packages/vue-mutator/package.json @@ -36,6 +36,7 @@ "@stryker-mutator/javascript-mutator": "^2.5.0", "@stryker-mutator/test-helpers": "^2.5.0", "@stryker-mutator/typescript": "^2.5.0", + "@types/node": "^13.7.1", "vue-template-compiler": "^2.0.0" }, "dependencies": { diff --git a/packages/wct-runner/package.json b/packages/wct-runner/package.json index a933e28e23..bdaea9e42f 100644 --- a/packages/wct-runner/package.json +++ b/packages/wct-runner/package.json @@ -27,6 +27,7 @@ }, "devDependencies": { "@stryker-mutator/test-helpers": "^2.5.0", + "@types/node": "^13.7.1", "@types/socket.io": "^2.1.0", "chai": "~4.2.0", "mocha": "~5.2.0", diff --git a/packages/webpack-transpiler/package.json b/packages/webpack-transpiler/package.json index 2b9571ce85..f95bd1e1b6 100644 --- a/packages/webpack-transpiler/package.json +++ b/packages/webpack-transpiler/package.json @@ -37,6 +37,7 @@ "devDependencies": { "@stryker-mutator/test-helpers": "^2.5.0", "@types/memory-fs": "~0.3.0", + "@types/node": "^13.7.1", "@types/webpack": "~4.41.0", "raw-loader": "~4.0.0", "webpack": "~4.41.0" diff --git a/packages/webpack-transpiler/src/compiler/ConfigLoader.ts b/packages/webpack-transpiler/src/compiler/ConfigLoader.ts index d3cf6f4974..832ca57157 100644 --- a/packages/webpack-transpiler/src/compiler/ConfigLoader.ts +++ b/packages/webpack-transpiler/src/compiler/ConfigLoader.ts @@ -8,6 +8,8 @@ import { Configuration } from 'webpack'; import { pluginTokens } from '../pluginTokens'; import { StrykerWebpackConfig } from '../WebpackTranspiler'; +import { NodeRequireFunction } from './NodeRequireFunction'; + const PROGRESS_PLUGIN_NAME = 'ProgressPlugin'; export default class ConfigLoader { diff --git a/packages/webpack-transpiler/src/compiler/NodeRequireFunction.ts b/packages/webpack-transpiler/src/compiler/NodeRequireFunction.ts new file mode 100644 index 0000000000..aa9eff6637 --- /dev/null +++ b/packages/webpack-transpiler/src/compiler/NodeRequireFunction.ts @@ -0,0 +1 @@ +export type NodeRequireFunction = (moduleName: string) => any; diff --git a/stryker.parent.conf.js b/stryker.parent.conf.js index 0dbb0be01f..8b2a94a06b 100644 --- a/stryker.parent.conf.js +++ b/stryker.parent.conf.js @@ -16,7 +16,6 @@ module.exports = { plugins: [ require.resolve('./packages/mocha-runner/src/index'), require.resolve('./packages/mocha-framework/src/index'), - require.resolve('./packages/html-reporter/src/index'), require.resolve('./packages/typescript/src/index'), ], dashboard: {