UNPKG

stryker

Version:
81 lines 4.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _ = require("lodash"); var parserUtils = require("../utils/parserUtils"); var objectUtils_1 = require("../utils/objectUtils"); var BinaryOperatorMutator_1 = require("./BinaryOperatorMutator"); var BlockStatementMutator_1 = require("./BlockStatementMutator"); var LogicalOperatorMutator_1 = require("./LogicalOperatorMutator"); var RemoveConditionalsMutator_1 = require("./RemoveConditionalsMutator"); var UnaryOperatorMutator_1 = require("./UnaryOperatorMutator"); var UpdateOperatorMutator_1 = require("./UpdateOperatorMutator"); var ArrayDeclaratorMutator_1 = require("./ArrayDeclaratorMutator"); var BooleanSubstitutionMutator_1 = require("./BooleanSubstitutionMutator"); var typed_inject_1 = require("typed-inject"); var plugin_1 = require("stryker-api/plugin"); var ES5Mutator = /** @class */ (function () { function ES5Mutator(log, mutators) { if (mutators === void 0) { mutators = [ new BinaryOperatorMutator_1.default(), new BlockStatementMutator_1.default(), new LogicalOperatorMutator_1.default(), new RemoveConditionalsMutator_1.default(), new UnaryOperatorMutator_1.default(), new UpdateOperatorMutator_1.default(), new ArrayDeclaratorMutator_1.default(), new BooleanSubstitutionMutator_1.default() ]; } this.log = log; this.mutators = mutators; this.log.warn("DEPRECATED: The es5 mutator is deprecated and will be removed in the future. Please upgrade to the stryker-javascript-mutator (npm install --save-dev stryker-javascript-mutator) and set \"mutator: 'javascript'\" in your stryker.conf.js! If you have a plugins array in your stryker.conf.js, be sure to add 'stryker-javascript-mutator'."); } ES5Mutator.prototype.mutate = function (files) { var _this = this; return _.flatMap(files, function (file) { return _this.mutateForFile(file); }); }; ES5Mutator.prototype.mutateForFile = function (file) { var abstractSyntaxTree = parserUtils.parse(file.textContent); var nodes = new parserUtils.NodeIdentifier().identifyAndFreeze(abstractSyntaxTree); return this.mutateForNodes(file, nodes); }; ES5Mutator.prototype.mutateForNodes = function (file, nodes) { var _this = this; return _.flatMap(nodes, function (astNode) { if (astNode.type) { Object.freeze(astNode); return _.flatMap(_this.mutators, function (mutator) { try { var mutatedNodes = mutator.applyMutations(astNode, objectUtils_1.copy); if (mutatedNodes) { if (!Array.isArray(mutatedNodes)) { mutatedNodes = [mutatedNodes]; } if (mutatedNodes.length > 0) { _this.log.debug("The mutator '" + mutator.name + "' mutated " + mutatedNodes.length + " node" + (mutatedNodes.length > 1 ? 's' : '') + " between (Ln " + astNode.loc.start.line + ", Col " + astNode.loc.start.column + ") and (Ln " + astNode.loc.end.line + ", Col " + astNode.loc.end.column + ") in file " + file.name); } return mutatedNodes.map(function (mutatedNode) { var replacement = parserUtils.generate(mutatedNode); var originalNode = nodes[mutatedNode.nodeID]; var mutant = { mutatorName: mutator.name, fileName: file.name, replacement: replacement, range: originalNode.range }; return mutant; }); } else { return []; } } catch (error) { throw new Error("The mutator named '" + mutator.name + "' caused an error: " + error); } }); } else { return []; } }); }; ES5Mutator.inject = typed_inject_1.tokens(plugin_1.commonTokens.logger); return ES5Mutator; }()); exports.default = ES5Mutator; //# sourceMappingURL=ES5Mutator.js.map