diff --git a/lib/6to5/file.js b/lib/6to5/file.js index 152f50b137..f19ef01b87 100644 --- a/lib/6to5/file.js +++ b/lib/6to5/file.js @@ -133,10 +133,10 @@ File.normaliseOptions = function (opts) { opts.experimental = true; } - transform._ensureTransformerNames("blacklist", opts.blacklist); - transform._ensureTransformerNames("whitelist", opts.whitelist); - transform._ensureTransformerNames("optional", opts.optional); - transform._ensureTransformerNames("loose", opts.loose); + opts.blacklist = transform._ensureTransformerNames("blacklist", opts.blacklist); + opts.whitelist = transform._ensureTransformerNames("whitelist", opts.whitelist); + opts.optional = transform._ensureTransformerNames("optional", opts.optional); + opts.loose = transform._ensureTransformerNames("loose", opts.loose); return opts; }; diff --git a/lib/6to5/transformation/modules/index.js b/lib/6to5/transformation/modules/index.js new file mode 100644 index 0000000000..8202dff6ad --- /dev/null +++ b/lib/6to5/transformation/modules/index.js @@ -0,0 +1,10 @@ +module.exports = { + commonStrict: require("./common-strict"), + amdStrict: require("./amd-strict"), + umdStrict: require("./umd-strict"), + common: require("./common"), + system: require("./system"), + ignore: require("./ignore"), + amd: require("./amd"), + umd: require("./umd") +}; diff --git a/lib/6to5/transformation/transform.js b/lib/6to5/transformation/transform.js index de2ce61733..68f85d4185 100644 --- a/lib/6to5/transformation/transform.js +++ b/lib/6to5/transformation/transform.js @@ -22,18 +22,28 @@ transform.fromAst = function (ast, code, opts) { return file.generate(); }; -transform._ensureTransformerNames = function (type, keys) { - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; +transform._ensureTransformerNames = function (type, rawKeys) { + var keys = []; - var newKey = transform.deprecatedTransformerMap[key]; - if (newKey) { + for (var i = 0; i < rawKeys.length; i++) { + var key = rawKeys[i]; + + var deprecatedKey = transform.deprecatedTransformerMap[key]; + if (deprecatedKey) { + // deprecated key, remap it to the new one console.error( - "The transformer " + key + " has been renamed to " + newKey + + "The transformer " + key + " has been renamed to " + deprecatedKey + " in v3.0.0 - backwards compatibilty will be removed 4.0.0" ); - keys[i] = newKey; - } else if (!transform.transformers[key]) { + rawKeys.push(deprecatedKey); + } else if (transform.transformers[key]) { + // valid key + keys.push(key); + } else if (transform.namespaces[key]) { + // namespace, append all transformers within this namespace + keys = keys.concat(transform.namespaces[key]); + } else { + // invalid key throw new ReferenceError( "Unknown transformer " + key + " specified in " + type + " - " + "transformer key names have been changed in 3.0.0 see " + @@ -42,144 +52,22 @@ transform._ensureTransformerNames = function (type, keys) { ); } } -}; -transform.deprecatedTransformerMap = { - specNoForInOfAssignment: "validation.noForInOfAssignment", - specSetters: "validation.setters", - specBlockScopedFunctions: "spec.blockScopedFunctions", - malletOperator: "playground.malletOperator", - methodBinding: "playground.methodBinding", - memoizationOperator: "playground.memoizationOperator", - objectGetterMemoization: "playground.objectGetterMemoization", - modules: "es6.modules", - propertyNameShorthand: "es6.properties.shorthand", - arrayComprehension: "es7.comprehensions", - generatorComprehension: "es7.comprehensions", - arrowFunctions: "es6.arrowFunctions", - classes: "es6.classes", - objectSpread: "es7.objectSpread", - exponentiationOperator: "es7.exponentiationOperator", - spread: "es6.spread", - templateLiterals: "es6.templateLiterals", - propertyMethodAssignment: "es6.properties.shorthand", - computedPropertyNames: "es6.properties.computed", - defaultParameters: "es6.parameters.default", - restParameters: "es6.parameters.rest", - destructuring: "es6.destructuring", - forOf: "es6.forOf", - unicodeRegex: "es6.unicodeRegex", - abstractReferences: "es7.abstractReferences", - constants: "es6.constants", - letScoping: "es6.letScoping", - blockScopingTDZ: "es6.blockScopingTDZ", - generators: "regenerator", - protoToAssign: "spec.protoToAssign", - typeofSymbol: "spec.typeofSymbol", - coreAliasing: "selfContained", - undefinedToVoid: "spec.undefinedToVoid", - undeclaredVariableCheck: "validation.undeclaredVariableCheck", - specPropertyLiterals: "minification.propertyLiterals", - specMemberExpressionLiterals: "minification.memberExpressionLiterals", + return keys; }; transform.transformers = object(); +transform.namespaces = object(); -transform.moduleFormatters = { - commonStrict: require("./modules/common-strict"), - amdStrict: require("./modules/amd-strict"), - umdStrict: require("./modules/umd-strict"), - common: require("./modules/common"), - system: require("./modules/system"), - ignore: require("./modules/ignore"), - amd: require("./modules/amd"), - umd: require("./modules/umd") -}; +transform.deprecatedTransformerMap = require("./transformers/deprecated"); +transform.moduleFormatters = require("./modules"); -_.each({ - useStrict: require("./transformers/other/use-strict"), +var rawTransformers = require("./transformers"); - "validation.undeclaredVariableCheck": require("./transformers/validation/undeclared-variable-check"), - "validation.noForInOfAssignment": require("./transformers/validation/no-for-in-of-assignment"), - "validation.setters": require("./transformers/validation/setters"), - "spec.blockScopedFunctions": require("./transformers/spec/block-scoped-functions"), +_.each(rawTransformers, function (transformer, key) { + var namespace = key.split(".")[0]; + transform.namespaces[namespace] = transform.namespaces[namespace] || []; + transform.namespaces[namespace].push(key); - "playground.malletOperator": require("./transformers/playground/mallet-operator"), - "playground.methodBinding": require("./transformers/playground/method-binding"), - "playground.memoizationOperator": require("./transformers/playground/memoization-operator"), - "playground.objectGetterMemoization": require("./transformers/playground/object-getter-memoization"), - - react: require("./transformers/other/react"), - - _modulesSplit: require("./transformers/_modules-split"), - - // needs to be before `regenerator` due to generator comprehensions - // needs to be before `_aliasFunction` - "es7.comprehensions": require("./transformers/es7/comprehensions"), - - // needs to be before `_aliasFunction` - "es6.arrowFunctions": require("./transformers/es6/arrow-functions"), - - "es6.classes": require("./transformers/es6/classes"), - - asyncToGenerator: require("./transformers/other/async-to-generator"), - bluebirdCoroutines: require("./transformers/other/bluebird-coroutines"), - - "es7.objectSpread": require("./transformers/es7/object-spread"), - "es7.exponentiationOperator": require("./transformers/es7/exponentiation-operator"), - "es6.spread": require("./transformers/es6/spread"), - "es6.templateLiterals": require("./transformers/es6/template-literals"), - - "es5.properties.mutators": require("./transformers/es5/properties.mutators"), - "es6.properties.shorthand": require("./transformers/es6/properties.shorthand"), - - // needs to be before `_aliasFunction` due to define property closure - "es6.properties.computed": require("./transformers/es6/properties.computed"), - - "es6.forOf": require("./transformers/es6/for-of"), - - "es6.unicodeRegex": require("./transformers/es6/unicode-regex"), - "es7.abstractReferences": require("./transformers/es7/abstract-references"), - - "es6.constants": require("./transformers/es6/constants"), - - // needs to be before `_aliasFunction` due to block scopes sometimes being wrapped in a - // closure - "es6.blockScoping": require("./transformers/es6/block-scoping"), - - // needs to be after `es6.blockScoping` due to needing `letReferences` set on blocks - "es6.blockScopingTDZ": require("./transformers/es6/block-scoping-tdz"), - - // needs to be after block scoping since regenerator doesn't support it - regenerator: require("./transformers/other/regenerator"), - - "es6.parameters.default": require("./transformers/es6/parameters.default"), - "es6.parameters.rest": require("./transformers/es6/parameters.rest"), - - "es6.destructuring": require("./transformers/es6/destructuring"), - - // needs to be after `regenerator` due to needing `regeneratorRuntime` references - // needs to be after `es6.forOf` due to needing `Symbol.iterator` references - // needs to be before `es6.modules` due to dynamic imports - selfContained: require("./transformers/other/self-contained"), - - // needs to be before `_blockHoist` due to function hoisting etc - "es6.modules": require("./transformers/es6/modules"), - - _blockHoist: require("./transformers/_block-hoist"), - - "spec.protoToAssign": require("./transformers/spec/proto-to-assign"), - - _declarations: require("./transformers/_declarations"), - - _aliasFunctions: require("./transformers/_alias-functions"), - _moduleFormatter: require("./transformers/_module-formatter"), - - "spec.typeofSymbol": require("./transformers/spec/typeof-symbol"), - "spec.undefinedToVoid": require("./transformers/spec/undefined-to-void"), - - "minification.propertyLiterals": require("./transformers/minification/property-literals"), - "minification.memberExpressionLiterals": require("./transformers/minification/member-expression-literals") -}, function (transformer, key) { transform.transformers[key] = new Transformer(key, transformer); }); diff --git a/lib/6to5/transformation/transformers/deprecated.json b/lib/6to5/transformation/transformers/deprecated.json new file mode 100644 index 0000000000..1b2ac7ff1e --- /dev/null +++ b/lib/6to5/transformation/transformers/deprecated.json @@ -0,0 +1,38 @@ +{ + "specNoForInOfAssignment": "validation.noForInOfAssignment", + "specSetters": "validation.setters", + "specBlockScopedFunctions": "spec.blockScopedFunctions", + "malletOperator": "playground.malletOperator", + "methodBinding": "playground.methodBinding", + "memoizationOperator": "playground.memoizationOperator", + "objectGetterMemoization": "playground.objectGetterMemoization", + "modules": "es6.modules", + "propertyNameShorthand": "es6.properties.shorthand", + "arrayComprehension": "es7.comprehensions", + "generatorComprehension": "es7.comprehensions", + "arrowFunctions": "es6.arrowFunctions", + "classes": "es6.classes", + "objectSpread": "es7.objectSpread", + "exponentiationOperator": "es7.exponentiationOperator", + "spread": "es6.spread", + "templateLiterals": "es6.templateLiterals", + "propertyMethodAssignment": "es6.properties.shorthand", + "computedPropertyNames": "es6.properties.computed", + "defaultParameters": "es6.parameters.default", + "restParameters": "es6.parameters.rest", + "destructuring": "es6.destructuring", + "forOf": "es6.forOf", + "unicodeRegex": "es6.unicodeRegex", + "abstractReferences": "es7.abstractReferences", + "constants": "es6.constants", + "letScoping": "es6.letScoping", + "blockScopingTDZ": "es6.blockScopingTDZ", + "generators": "regenerator", + "protoToAssign": "spec.protoToAssign", + "typeofSymbol": "spec.typeofSymbol", + "coreAliasing": "selfContained", + "undefinedToVoid": "spec.undefinedToVoid", + "undeclaredVariableCheck": "validation.undeclaredVariableCheck", + "specPropertyLiterals": "minification.propertyLiterals", + "specMemberExpressionLiterals": "minification.memberExpressionLiterals" +} diff --git a/lib/6to5/transformation/transformers/index.js b/lib/6to5/transformation/transformers/index.js new file mode 100644 index 0000000000..ec9698c2ce --- /dev/null +++ b/lib/6to5/transformation/transformers/index.js @@ -0,0 +1,85 @@ +module.exports = { + useStrict: require("./other/use-strict"), + + "validation.undeclaredVariableCheck": require("./validation/undeclared-variable-check"), + "validation.noForInOfAssignment": require("./validation/no-for-in-of-assignment"), + "validation.setters": require("./validation/setters"), + "spec.blockScopedFunctions": require("./spec/block-scoped-functions"), + + "playground.malletOperator": require("./playground/mallet-operator"), + "playground.methodBinding": require("./playground/method-binding"), + "playground.memoizationOperator": require("./playground/memoization-operator"), + "playground.objectGetterMemoization": require("./playground/object-getter-memoization"), + + react: require("./other/react"), + + _modulesSplit: require("./internal/modules-split"), + + // needs to be before `regenerator` due to generator comprehensions + // needs to be before `_aliasFunction` + "es7.comprehensions": require("./es7/comprehensions"), + + // needs to be before `_aliasFunction` + "es6.arrowFunctions": require("./es6/arrow-functions"), + + "es6.classes": require("./es6/classes"), + + asyncToGenerator: require("./other/async-to-generator"), + bluebirdCoroutines: require("./other/bluebird-coroutines"), + + "es7.objectSpread": require("./es7/object-spread"), + "es7.exponentiationOperator": require("./es7/exponentiation-operator"), + "es6.spread": require("./es6/spread"), + "es6.templateLiterals": require("./es6/template-literals"), + + "es5.properties.mutators": require("./es5/properties.mutators"), + "es6.properties.shorthand": require("./es6/properties.shorthand"), + + // needs to be before `_aliasFunction` due to define property closure + "es6.properties.computed": require("./es6/properties.computed"), + + "es6.forOf": require("./es6/for-of"), + + "es6.unicodeRegex": require("./es6/unicode-regex"), + "es7.abstractReferences": require("./es7/abstract-references"), + + "es6.constants": require("./es6/constants"), + + // needs to be before `_aliasFunction` due to block scopes sometimes being wrapped in a + // closure + "es6.blockScoping": require("./es6/block-scoping"), + + // needs to be after `es6.blockScoping` due to needing `letReferences` set on blocks + "es6.blockScopingTDZ": require("./es6/block-scoping-tdz"), + + // needs to be after block scoping since regenerator doesn't support it + regenerator: require("./other/regenerator"), + + "es6.parameters.default": require("./es6/parameters.default"), + "es6.parameters.rest": require("./es6/parameters.rest"), + + "es6.destructuring": require("./es6/destructuring"), + + // needs to be after `regenerator` due to needing `regeneratorRuntime` references + // needs to be after `es6.forOf` due to needing `Symbol.iterator` references + // needs to be before `es6.modules` due to dynamic imports + selfContained: require("./other/self-contained"), + + // needs to be before `_blockHoist` due to function hoisting etc + "es6.modules": require("./es6/modules"), + + _blockHoist: require("./internal/block-hoist"), + + "spec.protoToAssign": require("./spec/proto-to-assign"), + + _declarations: require("./internal/declarations"), + + _aliasFunctions: require("./internal/alias-functions"), + _moduleFormatter: require("./internal/module-formatter"), + + "spec.typeofSymbol": require("./spec/typeof-symbol"), + "spec.undefinedToVoid": require("./spec/undefined-to-void"), + + "minification.propertyLiterals": require("./minification/property-literals"), + "minification.memberExpressionLiterals": require("./minification/member-expression-literals") +}; diff --git a/lib/6to5/transformation/transformers/_alias-functions.js b/lib/6to5/transformation/transformers/internal/alias-functions.js similarity index 96% rename from lib/6to5/transformation/transformers/_alias-functions.js rename to lib/6to5/transformation/transformers/internal/alias-functions.js index a642563946..640f334f9c 100644 --- a/lib/6to5/transformation/transformers/_alias-functions.js +++ b/lib/6to5/transformation/transformers/internal/alias-functions.js @@ -1,7 +1,7 @@ "use strict"; -var traverse = require("../../traverse"); -var t = require("../../types"); +var traverse = require("../../../traverse"); +var t = require("../../../types"); var functionChildrenVisitor = { enter: function (node, parent, scope, context, state) { diff --git a/lib/6to5/transformation/transformers/_block-hoist.js b/lib/6to5/transformation/transformers/internal/block-hoist.js similarity index 94% rename from lib/6to5/transformation/transformers/_block-hoist.js rename to lib/6to5/transformation/transformers/internal/block-hoist.js index 6e1ab91033..711cded73b 100644 --- a/lib/6to5/transformation/transformers/_block-hoist.js +++ b/lib/6to5/transformation/transformers/internal/block-hoist.js @@ -1,6 +1,6 @@ "use strict"; -var useStrict = require("../helpers/use-strict"); +var useStrict = require("../../helpers/use-strict"); var _ = require("lodash"); // Priority: diff --git a/lib/6to5/transformation/transformers/_declarations.js b/lib/6to5/transformation/transformers/internal/declarations.js similarity index 88% rename from lib/6to5/transformation/transformers/_declarations.js rename to lib/6to5/transformation/transformers/internal/declarations.js index 07974b32a2..f242831eb4 100644 --- a/lib/6to5/transformation/transformers/_declarations.js +++ b/lib/6to5/transformation/transformers/internal/declarations.js @@ -1,7 +1,7 @@ "use strict"; -var useStrict = require("../helpers/use-strict"); -var t = require("../../types"); +var useStrict = require("../../helpers/use-strict"); +var t = require("../../../types"); exports.secondPass = true; diff --git a/lib/6to5/transformation/transformers/_module-formatter.js b/lib/6to5/transformation/transformers/internal/module-formatter.js similarity index 78% rename from lib/6to5/transformation/transformers/_module-formatter.js rename to lib/6to5/transformation/transformers/internal/module-formatter.js index 1d2749aeac..a5846a49d6 100644 --- a/lib/6to5/transformation/transformers/_module-formatter.js +++ b/lib/6to5/transformation/transformers/internal/module-formatter.js @@ -1,7 +1,7 @@ "use strict"; -var useStrict = require("../helpers/use-strict"); -var transform = require("../transform"); +var useStrict = require("../../helpers/use-strict"); +var transform = require("../../transform"); exports.ast = { exit: function (ast, file) { diff --git a/lib/6to5/transformation/transformers/_modules-split.js b/lib/6to5/transformation/transformers/internal/modules-split.js similarity index 93% rename from lib/6to5/transformation/transformers/_modules-split.js rename to lib/6to5/transformation/transformers/internal/modules-split.js index 49ba96415d..b50c23878c 100644 --- a/lib/6to5/transformation/transformers/_modules-split.js +++ b/lib/6to5/transformation/transformers/internal/modules-split.js @@ -1,6 +1,6 @@ "use strict"; -var t = require("../../types"); +var t = require("../../../types"); exports.ExportDeclaration = function (node, parent, scope, context, file) { var declar = node.declaration;