'use strict'; function Transformation () { this.mutations = {}; this.nameCounts = {}; } Transformation.prototype.register = function (espath, callback) { if (!this.mutations[espath]) { this.mutations[espath] = []; } this.mutations[espath].unshift(callback); }; Transformation.prototype.apply = function (espath, node) { this.mutations[espath].forEach(function (callback) { callback(node); }); }; Transformation.prototype.isTarget = function (espath) { return !!this.mutations[espath]; }; Transformation.prototype.generateUniqueName = function (name) { if (!this.nameCounts[name]) { this.nameCounts[name] = 0; } this.nameCounts[name] += 1; return '_' + name + this.nameCounts[name]; }; module.exports = Transformation;