diff --git a/lib/6to5/file.js b/lib/6to5/file.js index d8d9c4ba24..c5763f991f 100644 --- a/lib/6to5/file.js +++ b/lib/6to5/file.js @@ -2,12 +2,13 @@ module.exports = File; var SHEBANG_REGEX = /^\#\!.*/; -var transform = require("./transformation/transform"); -var generate = require("./generation/generator"); -var Scope = require("./traverse/scope"); -var util = require("./util"); -var t = require("./types"); -var _ = require("lodash"); +var Transformer = require("./transformation/transformer"); +var transform = require("./transformation/transform"); +var generate = require("./generation/generator"); +var Scope = require("./traverse/scope"); +var util = require("./util"); +var t = require("./types"); +var _ = require("lodash"); function File(opts) { this.opts = File.normaliseOptions(opts); @@ -28,10 +29,21 @@ File.declarations = [ ]; File.normaliseOptions = function (opts) { - opts = _.cloneDeep(opts || {}); + opts = opts || {}; + + _.each(opts.transformers, function (transformer, i) { + if (!(transformer instanceof Transformer)) { + throw new TypeError("opts.transformers[" + i + "] isn't an instance of Transformer"); + } + }); + + opts = _.cloneDeep(opts, function (value) { + return value instanceof Transformer ? value : undefined; + }); _.defaults(opts, { experimental: false, + transformers: [], playground: false, whitespace: true, blacklist: [], @@ -180,6 +192,10 @@ File.prototype.transform = function (ast) { var self = this; + _.each(this.opts.transformers, function (transformer) { + transformer.transform(self); + }); + _.each(transform.transformers, function (transformer) { transformer.transform(self); }); diff --git a/lib/6to5/index.js b/lib/6to5/index.js index 924e08acb3..d60d457322 100644 --- a/lib/6to5/index.js +++ b/lib/6to5/index.js @@ -3,6 +3,10 @@ var util = require("./util"); var fs = require("fs"); var _ = require("lodash"); +exports.Transformer = require("./transformation/transformer"); + +exports.types = require("./types"); + exports.runtime = require("./runtime"); exports.register = function (opts) {