babel/lib/6to5/transformation/transform.js

186 lines
7.9 KiB
JavaScript

"use strict";
module.exports = transform;
var Transformer = require("./transformer");
var object = require("../helpers/object");
var File = require("../file");
var util = require("../util");
var _ = require("lodash");
function transform(code, opts) {
var file = new File(opts);
return file.parse(code);
}
transform.fromAst = function (ast, code, opts) {
ast = util.normaliseAst(ast);
var file = new File(opts);
file.addCode(code);
file.transform(ast);
return file.generate();
};
transform._ensureTransformerNames = function (type, keys) {
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var newKey = transform.deprecatedTransformerMap[key];
if (newKey) {
console.error(
"The transformer " + key + " has been renamed to " + newKey +
" in v3.0.0 - backwards compatibilty will be removed 4.0.0"
);
keys[i] = newKey;
} else if (!transform.transformers[key]) {
throw new ReferenceError(
"Unknown transformer " + key + " specified in " + type + " - " +
"transformer key names have been changed in 3.0.0 see " +
"the changelog for more info " +
"https://github.com/6to5/6to5/blob/master/CHANGELOG.md#300"
);
}
}
};
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",
};
transform.transformers = 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")
};
_.each({
useStrict: require("./transformers/other/use-strict"),
"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"),
"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);
});