Compare commits
42 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94cd45c269 | ||
|
|
424bab97d0 | ||
|
|
a1bdd804e2 | ||
|
|
10c051890b | ||
|
|
ac49d0a335 | ||
|
|
b56f1800e5 | ||
|
|
49ef92c586 | ||
|
|
542fe89123 | ||
|
|
5b118c0c3f | ||
|
|
8503916799 | ||
|
|
206c828a56 | ||
|
|
7a261a1db1 | ||
|
|
c9d9a085f1 | ||
|
|
6d1953d9c3 | ||
|
|
92621d71c7 | ||
|
|
dc01731c25 | ||
|
|
9fb8a80f60 | ||
|
|
85c2de57e4 | ||
|
|
58fac2e2be | ||
|
|
682806f1ca | ||
|
|
47c6f74251 | ||
|
|
37f360c72d | ||
|
|
e5a8c95b62 | ||
|
|
921d459f13 | ||
|
|
58898932e6 | ||
|
|
c7b45116c4 | ||
|
|
32ddd638ba | ||
|
|
0eb3cda2d4 | ||
|
|
2acb24d43d | ||
|
|
fdd1451d53 | ||
|
|
43e2f121a6 | ||
|
|
297e55ba63 | ||
|
|
38396dadd5 | ||
|
|
f75f045026 | ||
|
|
740193b1e2 | ||
|
|
b9fe1475c2 | ||
|
|
6065220f9b | ||
|
|
715884662e | ||
|
|
11780c28ff | ||
|
|
215c2da7cb | ||
|
|
c7c41d6548 | ||
|
|
695571b435 |
30
CHANGELOG.md
30
CHANGELOG.md
@@ -1,3 +1,33 @@
|
||||
# 1.12.15
|
||||
|
||||
* Update `acorn-6to5`.
|
||||
|
||||
# 1.12.14
|
||||
|
||||
* Fix duplicate let scoping in functions.
|
||||
* Make JSX whitespace more React-compliant.
|
||||
* Add `_memberExpressionKeywords` transformer that turns keyword identifiers to computed literals.
|
||||
* Upgrade `regenerator-6to5`.
|
||||
|
||||
# 1.12.13
|
||||
|
||||
* Support duplicate constants within different block scopes.
|
||||
* Fix for-head duplication testing and replacement.
|
||||
* Support `raw` property on tagged template literals.
|
||||
|
||||
# 1.12.12
|
||||
|
||||
* Make scope tracker more reliable to handle all edgecases.
|
||||
|
||||
# 1.12.11
|
||||
|
||||
* Block scope classes.
|
||||
* Fix generation of integer `Literal`s in `MemberExpression`.
|
||||
|
||||
# 1.12.10
|
||||
|
||||
* Fix let scoping var hoisting.
|
||||
|
||||
# 1.12.9
|
||||
|
||||
* Escape unicode characters when generating string `Literal`s.
|
||||
|
||||
@@ -18,7 +18,8 @@ function File(opts) {
|
||||
this.ast = {};
|
||||
}
|
||||
|
||||
File.declarations = ["extends", "class-props", "slice", "apply-constructor"];
|
||||
File.declarations = ["extends", "class-props", "slice", "apply-constructor",
|
||||
"tagged-template-literal"];
|
||||
|
||||
File.normaliseOptions = function (opts) {
|
||||
opts = _.cloneDeep(opts || {});
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
var t = require("../../types");
|
||||
var util = require("../../util");
|
||||
var t = require("../../types");
|
||||
|
||||
exports.UnaryExpression = function (node, print) {
|
||||
var hasSpace = /[a-z]$/.test(node.operator);
|
||||
@@ -105,6 +106,11 @@ exports.MemberExpression = function (node, print) {
|
||||
print(node.property);
|
||||
this.push("]");
|
||||
} else {
|
||||
// 5..toFixed(2);
|
||||
if (t.isLiteral(node.object) && util.isInteger(node.object.value)) {
|
||||
this.push(".");
|
||||
}
|
||||
|
||||
this.push(".");
|
||||
print(node.property);
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@ module.exports = Node;
|
||||
|
||||
var whitespace = require("./whitespace");
|
||||
var parens = require("./parentheses");
|
||||
var t = require("../../types");
|
||||
var _ = require("lodash");
|
||||
var t = require("../../types");
|
||||
var _ = require("lodash");
|
||||
|
||||
var find = function (obj, node, parent) {
|
||||
var result;
|
||||
|
||||
@@ -5,7 +5,7 @@ var t = require("./types");
|
||||
var _ = require("lodash");
|
||||
|
||||
module.exports = function (namespace) {
|
||||
namespace = t.identifier(namespace || "to5Runtime");
|
||||
namespace = t.identifier(t.toIdentifier(namespace || "to5Runtime"));
|
||||
|
||||
var body = [];
|
||||
var container = t.functionExpression(null, [], t.blockStatement(body));
|
||||
|
||||
4
lib/6to5/templates/tagged-template-literal.js
Normal file
4
lib/6to5/templates/tagged-template-literal.js
Normal file
@@ -0,0 +1,4 @@
|
||||
(function (strings, raw) {
|
||||
return Object.defineProperties(strings, { raw: { value: raw } });
|
||||
});
|
||||
|
||||
@@ -27,37 +27,38 @@ transform.moduleFormatters = {
|
||||
};
|
||||
|
||||
_.each({
|
||||
modules: require("./transformers/modules"),
|
||||
propertyNameShorthand: require("./transformers/property-name-shorthand"),
|
||||
constants: require("./transformers/constants"),
|
||||
arrayComprehension: require("./transformers/array-comprehension"),
|
||||
generatorComprehension: require("./transformers/generator-comprehension"),
|
||||
arrowFunctions: require("./transformers/arrow-functions"),
|
||||
classes: require("./transformers/classes"),
|
||||
modules: require("./transformers/modules"),
|
||||
propertyNameShorthand: require("./transformers/property-name-shorthand"),
|
||||
constants: require("./transformers/constants"),
|
||||
arrayComprehension: require("./transformers/array-comprehension"),
|
||||
generatorComprehension: require("./transformers/generator-comprehension"),
|
||||
arrowFunctions: require("./transformers/arrow-functions"),
|
||||
classes: require("./transformers/classes"),
|
||||
|
||||
_propertyLiterals: require("./transformers/_property-literals"),
|
||||
computedPropertyNames: require("./transformers/computed-property-names"),
|
||||
_propertyLiterals: require("./transformers/_property-literals"),
|
||||
computedPropertyNames: require("./transformers/computed-property-names"),
|
||||
|
||||
spread: require("./transformers/spread"),
|
||||
templateLiterals: require("./transformers/template-literals"),
|
||||
propertyMethodAssignment: require("./transformers/property-method-assignment"),
|
||||
defaultParameters: require("./transformers/default-parameters"),
|
||||
restParameters: require("./transformers/rest-parameters"),
|
||||
destructuring: require("./transformers/destructuring"),
|
||||
letScoping: require("./transformers/let-scoping"),
|
||||
forOf: require("./transformers/for-of"),
|
||||
unicodeRegex: require("./transformers/unicode-regex"),
|
||||
spread: require("./transformers/spread"),
|
||||
templateLiterals: require("./transformers/template-literals"),
|
||||
propertyMethodAssignment: require("./transformers/property-method-assignment"),
|
||||
defaultParameters: require("./transformers/default-parameters"),
|
||||
restParameters: require("./transformers/rest-parameters"),
|
||||
destructuring: require("./transformers/destructuring"),
|
||||
forOf: require("./transformers/for-of"),
|
||||
letScoping: require("./transformers/let-scoping"),
|
||||
unicodeRegex: require("./transformers/unicode-regex"),
|
||||
|
||||
react: require("./transformers/react"),
|
||||
react: require("./transformers/react"),
|
||||
|
||||
_aliasFunctions: require("./transformers/_alias-functions"),
|
||||
_blockHoist: require("./transformers/_block-hoist"),
|
||||
_declarations: require("./transformers/_declarations"),
|
||||
_aliasFunctions: require("./transformers/_alias-functions"),
|
||||
_blockHoist: require("./transformers/_block-hoist"),
|
||||
_declarations: require("./transformers/_declarations"),
|
||||
|
||||
generators: require("./transformers/generators"),
|
||||
useStrict: require("./transformers/use-strict"),
|
||||
generators: require("./transformers/generators"),
|
||||
useStrict: require("./transformers/use-strict"),
|
||||
|
||||
_moduleFormatter: require("./transformers/_module-formatter")
|
||||
_memberExpressionKeywords: require("./transformers/_member-expression-keywords"),
|
||||
_moduleFormatter: require("./transformers/_module-formatter")
|
||||
}, function (transformer, key) {
|
||||
transform.transformers[key] = new Transformer(key, transformer);
|
||||
});
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
var esutils = require("esutils");
|
||||
var t = require("../../types");
|
||||
|
||||
exports.MemberExpression = function (node) {
|
||||
var prop = node.property;
|
||||
if (t.isIdentifier(prop) && esutils.keyword.isKeywordES6(prop.name, true)) {
|
||||
node.property = t.literal(prop.name);
|
||||
node.computed = true;
|
||||
}
|
||||
};
|
||||
@@ -4,7 +4,7 @@ var t = require("../../types");
|
||||
var _ = require("lodash");
|
||||
|
||||
exports.ClassDeclaration = function (node, parent, file, scope) {
|
||||
return t.variableDeclaration("var", [
|
||||
return t.variableDeclaration("let", [
|
||||
t.variableDeclarator(node.id, new Class(node, file, scope).run())
|
||||
]);
|
||||
};
|
||||
|
||||
@@ -7,13 +7,14 @@ exports.BlockStatement =
|
||||
exports.ForInStatement =
|
||||
exports.ForOfStatement =
|
||||
exports.ForStatement = function (node, parent, file) {
|
||||
var constants = [];
|
||||
var constants = {};
|
||||
|
||||
var check = function (node, names) {
|
||||
var check = function (node, names, parent) {
|
||||
_.each(names, function (name) {
|
||||
if (constants.indexOf(name) >= 0) {
|
||||
throw file.errorWithNode(node, name + " is read-only");
|
||||
}
|
||||
if (!_.has(constants, name)) return;
|
||||
if (parent && t.isBlockStatement(parent) && parent !== constants[name]) return;
|
||||
|
||||
throw file.errorWithNode(node, name + " is read-only");
|
||||
});
|
||||
};
|
||||
|
||||
@@ -21,12 +22,12 @@ exports.ForStatement = function (node, parent, file) {
|
||||
return t.getIds(node, false, ["MemberExpression"]);
|
||||
};
|
||||
|
||||
_.each(node.body, function (child) {
|
||||
_.each(node.body, function (child, parent) {
|
||||
if (child && t.isVariableDeclaration(child, { kind: "const" })) {
|
||||
_.each(child.declarations, function (declar) {
|
||||
_.each(getIds(declar), function (name) {
|
||||
check(declar, [name]);
|
||||
constants.push(name);
|
||||
check(declar, [name], parent);
|
||||
constants[name] = parent;
|
||||
});
|
||||
|
||||
declar._ignoreConstant = true;
|
||||
@@ -37,13 +38,13 @@ exports.ForStatement = function (node, parent, file) {
|
||||
}
|
||||
});
|
||||
|
||||
if (!constants.length) return;
|
||||
if (_.isEmpty(constants)) return;
|
||||
|
||||
traverse(node, function (child) {
|
||||
traverse(node, function (child, parent) {
|
||||
if (child._ignoreConstant) return;
|
||||
|
||||
if (t.isVariableDeclarator(child) || t.isDeclaration(child) || t.isAssignmentExpression(child)) {
|
||||
check(child, getIds(child));
|
||||
if (t.isDeclaration(child) || t.isAssignmentExpression(child)) {
|
||||
check(child, getIds(child), parent);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -74,7 +74,6 @@ function LetScoping(forParent, block, parent, file, scope) {
|
||||
|
||||
this.letReferences = {};
|
||||
this.body = [];
|
||||
this.info = this.getInfo();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -87,8 +86,10 @@ LetScoping.prototype.run = function () {
|
||||
if (block._letDone) return;
|
||||
block._letDone = true;
|
||||
|
||||
this.info = this.getInfo();
|
||||
|
||||
// this is a block within a `Function` so we can safely leave it be
|
||||
if (t.isFunction(this.parent)) return;
|
||||
if (t.isFunction(this.parent)) return this.noClosure();
|
||||
|
||||
// this block has no let references so let's clean up
|
||||
if (!this.info.keys.length) return this.noClosure();
|
||||
@@ -145,11 +146,25 @@ LetScoping.prototype.noClosure = function () {
|
||||
|
||||
if (_.isEmpty(replacements)) return;
|
||||
|
||||
traverse(block, function (node, parent) {
|
||||
var replace = function (node, parent) {
|
||||
if (!t.isIdentifier(node)) return;
|
||||
if (!t.isReferenced(node, parent)) return;
|
||||
node.name = replacements[node.name] || node.name;
|
||||
});
|
||||
};
|
||||
|
||||
var traverseReplace = function (node, parent) {
|
||||
replace(node, parent);
|
||||
traverse(node, replace);
|
||||
};
|
||||
|
||||
var forParent = this.forParent;
|
||||
if (forParent) {
|
||||
traverseReplace(forParent.right, forParent);
|
||||
traverseReplace(forParent.test, forParent);
|
||||
traverseReplace(forParent.update, forParent);
|
||||
}
|
||||
|
||||
traverse(block, replace);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -181,10 +196,23 @@ LetScoping.prototype.getInfo = function () {
|
||||
keys: []
|
||||
};
|
||||
|
||||
var duplicates = function (id, key) {
|
||||
var has = scope.parentGet(key);
|
||||
|
||||
if (has && has !== id) {
|
||||
// there's a variable with this exact name in an upper scope so we need
|
||||
// to generate a new name
|
||||
opts.duplicates[key] = id.name = file.generateUid(key, scope);
|
||||
}
|
||||
};
|
||||
|
||||
_.each(opts.declarators, function (declar) {
|
||||
opts.declarators.push(declar);
|
||||
|
||||
var keys = t.getIds(declar);
|
||||
var keys = t.getIds(declar, true);
|
||||
_.each(keys, duplicates);
|
||||
keys = _.keys(keys);
|
||||
|
||||
opts.outsideKeys = opts.outsideKeys.concat(keys);
|
||||
opts.keys = opts.keys.concat(keys);
|
||||
});
|
||||
@@ -193,14 +221,7 @@ LetScoping.prototype.getInfo = function () {
|
||||
if (!isLet(declar)) return;
|
||||
|
||||
_.each(t.getIds(declar, true), function (id, key) {
|
||||
var has = scope.parentGet(key);
|
||||
|
||||
if (has && has !== id) {
|
||||
// there's a variable with this exact name in an upper scope so we need
|
||||
// to generate a new name
|
||||
opts.duplicates[key] = id.name = file.generateUid(key, scope);
|
||||
}
|
||||
|
||||
duplicates(id, key);
|
||||
opts.keys.push(key);
|
||||
});
|
||||
});
|
||||
@@ -341,7 +362,7 @@ LetScoping.prototype.getLetReferences = function () {
|
||||
* @returns {Array}
|
||||
*/
|
||||
|
||||
LetScoping.prototype.buildPushDeclar = function (node) {
|
||||
LetScoping.prototype.pushDeclar = function (node) {
|
||||
this.body.push(t.variableDeclaration(node.kind, node.declarations.map(function (declar) {
|
||||
return t.variableDeclarator(declar.id);
|
||||
})));
|
||||
|
||||
32
lib/6to5/transformation/transformers/react.js
vendored
32
lib/6to5/transformation/transformers/react.js
vendored
@@ -106,11 +106,35 @@ exports.XJSElement = {
|
||||
exit: function (node) {
|
||||
var callExpr = node.openingElement;
|
||||
|
||||
var childrenToRender = node.children.filter(function(child) {
|
||||
return !(t.isLiteral(child) && _.isString(child.value) && child.value.match(/^[ \t]*[\r\n][ \t\r\n]*$/));
|
||||
});
|
||||
_.each(node.children, function (child) {
|
||||
if (t.isLiteral(child)) {
|
||||
var lines = child.value.split(/\r\n|\n|\r/);
|
||||
|
||||
_.each(lines, function (line, i) {
|
||||
var isFirstLine = i === 0;
|
||||
var isLastLine = i === lines.length - 1;
|
||||
|
||||
// replace rendered whitespace tabs with spaces
|
||||
var trimmedLine = line.replace(/\t/g, ' ');
|
||||
|
||||
// trim whitespace touching a newline
|
||||
if (!isFirstLine) {
|
||||
trimmedLine = trimmedLine.replace(/^[ ]+/, '');
|
||||
}
|
||||
|
||||
// trim whitespace touching an endline
|
||||
if (!isLastLine) {
|
||||
trimmedLine = trimmedLine.replace(/[ ]+$/, '');
|
||||
}
|
||||
|
||||
if (trimmedLine) {
|
||||
callExpr.arguments.push(t.literal(trimmedLine));
|
||||
}
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
_.each(childrenToRender, function (child) {
|
||||
callExpr.arguments.push(child);
|
||||
});
|
||||
|
||||
|
||||
@@ -5,14 +5,22 @@ var buildBinaryExpression = function (left, right) {
|
||||
return t.binaryExpression("+", left, right);
|
||||
};
|
||||
|
||||
exports.TaggedTemplateExpression = function (node) {
|
||||
exports.TaggedTemplateExpression = function (node, parent, file) {
|
||||
var args = [];
|
||||
var quasi = node.quasi;
|
||||
|
||||
var strings = quasi.quasis.map(function (elem) {
|
||||
return t.literal(elem.value.raw);
|
||||
var strings = [];
|
||||
var raw = [];
|
||||
|
||||
_.each(quasi.quasis, function (elem) {
|
||||
strings.push(t.literal(elem.value.cooked));
|
||||
raw.push(t.literal(elem.value.raw));
|
||||
});
|
||||
args.push(t.arrayExpression(strings));
|
||||
|
||||
args.push(t.callExpression(file.addDeclaration("tagged-template-literal"), [
|
||||
t.arrayExpression(strings),
|
||||
t.arrayExpression(raw)
|
||||
]));
|
||||
|
||||
_.each(quasi.expressions, function (expr) {
|
||||
args.push(expr);
|
||||
|
||||
@@ -4,6 +4,8 @@ var traverse = require("./index");
|
||||
var t = require("../types");
|
||||
var _ = require("lodash");
|
||||
|
||||
var FOR_KEYS = ["left", "init"];
|
||||
|
||||
function Scope(parent, block) {
|
||||
this.parent = parent;
|
||||
this.block = block;
|
||||
@@ -19,29 +21,59 @@ Scope.prototype.getIds = function () {
|
||||
var self = this;
|
||||
var ids = block._scopeIds = {};
|
||||
|
||||
if (t.isBlockStatement(block)) {
|
||||
_.each(block.body, function (node) {
|
||||
if (t.isVariableDeclaration(node) && node.kind !== "var") {
|
||||
self.add(node, ids);
|
||||
}
|
||||
});
|
||||
} else if (t.isProgram(block) || t.isFunction(block)) {
|
||||
traverse(block, function (node, parent) {
|
||||
if (parent !== block && t.isVariableDeclaration(node) && node.kind !== "var") {
|
||||
return;
|
||||
}
|
||||
// ForStatement - left, init
|
||||
|
||||
if (t.isDeclaration(node)) {
|
||||
self.add(node, ids);
|
||||
} else if (t.isFunction(node)) {
|
||||
return false;
|
||||
}
|
||||
if (t.isFor(block)) {
|
||||
_.each(FOR_KEYS, function (key) {
|
||||
var node = block[key];
|
||||
if (t.isLet(node)) self.add(node, ids);
|
||||
});
|
||||
} else if (t.isCatchClause(block)) {
|
||||
|
||||
block = block.body;
|
||||
}
|
||||
|
||||
// Program, BlockStatement - let variables
|
||||
|
||||
if (t.isBlockStatement(block) || t.isProgram(block)) {
|
||||
_.each(block.body, function (node) {
|
||||
// check for non-var `VariableDeclaration`s
|
||||
if (t.isLet(node)) self.add(node, ids);
|
||||
});
|
||||
}
|
||||
|
||||
// CatchClause - param
|
||||
|
||||
if (t.isCatchClause(block)) {
|
||||
self.add(block.param, ids);
|
||||
}
|
||||
|
||||
// Program, Function - var variables
|
||||
|
||||
if (t.isProgram(block) || t.isFunction(block)) {
|
||||
traverse(block, function (node) {
|
||||
if (t.isFor(node)) {
|
||||
_.each(FOR_KEYS, function (key) {
|
||||
var declar = node[key];
|
||||
if (t.isVar(declar)) self.add(declar, ids);
|
||||
});
|
||||
}
|
||||
|
||||
// this block is a function so we'll stop since none of the variables
|
||||
// declared within are accessible
|
||||
if (t.isFunction(node)) return false;
|
||||
|
||||
// we've ran into a declaration!
|
||||
// we'll let the BlockStatement scope deal with `let` declarations
|
||||
if (t.isDeclaration(node) && !t.isLet(node)) {
|
||||
self.add(node, ids);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Function - params
|
||||
|
||||
if (t.isFunction(block)) {
|
||||
this.add(block.rest, ids);
|
||||
_.each(block.params, function (param) {
|
||||
self.add(param, ids);
|
||||
});
|
||||
@@ -51,6 +83,7 @@ Scope.prototype.getIds = function () {
|
||||
};
|
||||
|
||||
Scope.prototype.add = function (node, ids) {
|
||||
if (!node) return;
|
||||
_.merge(ids || this.ids, t.getIds(node, true));
|
||||
};
|
||||
|
||||
|
||||
@@ -35,9 +35,9 @@
|
||||
"ClassDeclaration": ["Statement", "Declaration", "Class"],
|
||||
"ClassExpression": ["Class"],
|
||||
|
||||
"ForOfStatement": ["Statement", "For"],
|
||||
"ForInStatement": ["Statement", "For"],
|
||||
"ForStatement": ["Statement", "For"],
|
||||
"ForOfStatement": ["Statement", "For", "Scope"],
|
||||
"ForInStatement": ["Statement", "For", "Scope"],
|
||||
"ForStatement": ["Statement", "For", "Scope"],
|
||||
|
||||
"ObjectPattern": ["Pattern"],
|
||||
"ArrayPattern": ["Pattern"],
|
||||
|
||||
@@ -185,6 +185,14 @@ t.getIds = function (node, map, ignoreTypes) {
|
||||
return ids;
|
||||
};
|
||||
|
||||
t.isLet = function (node) {
|
||||
return t.isVariableDeclaration(node) && (node.kind !== "var" || node._let);
|
||||
};
|
||||
|
||||
t.isVar = function (node) {
|
||||
return t.isVariableDeclaration(node, { kind: "var" }) && !node._let;
|
||||
};
|
||||
|
||||
t.getIds.nodes = {
|
||||
AssignmentExpression: "left",
|
||||
ImportSpecifier: "id",
|
||||
|
||||
@@ -17,6 +17,10 @@ exports.canCompile = function (filename, altExts) {
|
||||
return _.contains(exts, ext);
|
||||
};
|
||||
|
||||
exports.isInteger = function (i) {
|
||||
return _.isNumber(i) && i % 1 === 0;
|
||||
};
|
||||
|
||||
exports.resolve = function (loc) {
|
||||
try {
|
||||
return require.resolve(loc);
|
||||
@@ -123,23 +127,17 @@ exports.template = function (name, nodes, keepExpression) {
|
||||
|
||||
template = _.cloneDeep(template);
|
||||
|
||||
var inherits = false;
|
||||
if (nodes) {
|
||||
inherits = nodes.inherits;
|
||||
delete nodes.inherits;
|
||||
|
||||
if (!_.isEmpty(nodes)) {
|
||||
traverse(template, function (node) {
|
||||
if (t.isIdentifier(node) && _.has(nodes, node.name)) {
|
||||
var newNode = nodes[node.name];
|
||||
if (_.isString(newNode)) {
|
||||
node.name = newNode;
|
||||
} else {
|
||||
return newNode;
|
||||
}
|
||||
if (!_.isEmpty(nodes)) {
|
||||
traverse(template, function (node) {
|
||||
if (t.isIdentifier(node) && _.has(nodes, node.name)) {
|
||||
var newNode = nodes[node.name];
|
||||
if (_.isString(newNode)) {
|
||||
node.name = newNode;
|
||||
} else {
|
||||
return newNode;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var node = template.body[0];
|
||||
@@ -150,10 +148,6 @@ exports.template = function (name, nodes, keepExpression) {
|
||||
if (t.isParenthesizedExpression(node)) node = node.expression;
|
||||
}
|
||||
|
||||
if (inherits) {
|
||||
node = t.inherits(node, inherits);
|
||||
}
|
||||
|
||||
return node;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "6to5",
|
||||
"description": "Turn ES6 code into readable vanilla ES5 with source maps",
|
||||
"version": "1.12.9",
|
||||
"version": "1.12.15",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://github.com/6to5/6to5",
|
||||
"repository": {
|
||||
@@ -44,11 +44,11 @@
|
||||
"es6-symbol": "0.1.1",
|
||||
"regexpu": "0.3.0",
|
||||
"source-map": "0.1.40",
|
||||
"regenerator-6to5": "https://github.com/6to5/regenerator-6to5/archive/75925940a7bb67d1ee8afec36b6d6eec072fb47c.tar.gz",
|
||||
"regenerator-6to5": "https://github.com/6to5/regenerator-6to5/archive/a9c53518af063ffef410f826225f8ee250131932.tar.gz",
|
||||
"chokidar": "0.10.5",
|
||||
"source-map-support": "0.2.8",
|
||||
"esutils": "1.1.4",
|
||||
"acorn-6to5": "https://github.com/6to5/acorn-6to5/archive/a6c34ba73e215bd16ee585f6794f6a6587820c58.tar.gz",
|
||||
"acorn-6to5": "https://github.com/6to5/acorn-6to5/archive/74d8e9bed20ba302d3504f53d0b1c649968959e1.tar.gz",
|
||||
"estraverse": "^1.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -36,8 +36,6 @@ exports.get = function (entryName) {
|
||||
if (fs.existsSync(suiteOptsLoc)) suite.options = require(suiteOptsLoc);
|
||||
|
||||
_.each(fs.readdirSync(suite.filename), function (taskName) {
|
||||
if (taskName[0] === ".") return;
|
||||
|
||||
var taskDir = suite.filename + "/" + taskName;
|
||||
if (fs.statSync(taskDir).isFile()) return;
|
||||
|
||||
@@ -59,6 +57,7 @@ exports.get = function (entryName) {
|
||||
|
||||
var test = {
|
||||
title: humanise(taskName),
|
||||
disabled: taskName[0] === ".",
|
||||
options: taskOpts,
|
||||
exec: {
|
||||
code: readFile(execLoc),
|
||||
|
||||
17
test/api.js
Normal file
17
test/api.js
Normal file
@@ -0,0 +1,17 @@
|
||||
var transform = require("../lib/6to5/transformation/transform");
|
||||
var assert = require("assert");
|
||||
var File = require("../lib/6to5/file");
|
||||
|
||||
suite("api", function () {
|
||||
test("{ code: false }", function () {
|
||||
var result = transform("foo('bar');", { code: false });
|
||||
assert.ok(!result.code);
|
||||
});
|
||||
|
||||
test("addDeclaration unknown", function () {
|
||||
var file = new File;
|
||||
assert.throws(function () {
|
||||
file.addDeclaration("foob");
|
||||
}, /unknown declaration foob/);
|
||||
});
|
||||
});
|
||||
@@ -19,7 +19,7 @@ var _extends = function (child, parent) {
|
||||
|
||||
var Test = (function (Foo) {
|
||||
var Test = function Test() {
|
||||
woops.super.test();
|
||||
woops["super"].test();
|
||||
Foo.call(this);
|
||||
Foo.prototype.test.call(this);
|
||||
foob(Foo);
|
||||
|
||||
6
test/fixtures/transformation/let-scoping/exec-block-scoped/exec.js
vendored
Normal file
6
test/fixtures/transformation/let-scoping/exec-block-scoped/exec.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
let x = 1;
|
||||
{
|
||||
let x = 2;
|
||||
assert.equal(x, 2);
|
||||
}
|
||||
assert.equal(x, 1);
|
||||
10
test/fixtures/transformation/let-scoping/exec-duplicate-function-scope/exec.js
vendored
Normal file
10
test/fixtures/transformation/let-scoping/exec-duplicate-function-scope/exec.js
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
function test () {
|
||||
let value = "outer";
|
||||
|
||||
return (function () {
|
||||
let value = "inner";
|
||||
return value;
|
||||
})();
|
||||
}
|
||||
|
||||
assert(test(), "inner");
|
||||
5
test/fixtures/transformation/let-scoping/exec-duplicate-in-upper-scope/exec.js
vendored
Normal file
5
test/fixtures/transformation/let-scoping/exec-duplicate-in-upper-scope/exec.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
let x = [0];
|
||||
for (let x of x) {
|
||||
assert.equal(x, 0);
|
||||
}
|
||||
assert.deepEqual(x, [0]);
|
||||
5
test/fixtures/transformation/let-scoping/exec-for-loop-head/exec.js
vendored
Normal file
5
test/fixtures/transformation/let-scoping/exec-for-loop-head/exec.js
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
assert.equal((function(){
|
||||
let a = 1;
|
||||
for (let a = 0; a < 8; a++) {}
|
||||
return a;
|
||||
}()), 1);
|
||||
6
test/fixtures/transformation/let-scoping/hoisting/actual.js
vendored
Normal file
6
test/fixtures/transformation/let-scoping/hoisting/actual.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
for (let i of [1, 2, 3]) {
|
||||
var x = 5;
|
||||
fns.push(function () {
|
||||
return i * x;
|
||||
});
|
||||
}
|
||||
12
test/fixtures/transformation/let-scoping/hoisting/expected.js
vendored
Normal file
12
test/fixtures/transformation/let-scoping/hoisting/expected.js
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
"use strict";
|
||||
|
||||
for (var _iterator = [1, 2, 3][Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {
|
||||
var x;
|
||||
(function () {
|
||||
var i = _step.value;
|
||||
x = 5;
|
||||
fns.push(function () {
|
||||
return i * x;
|
||||
});
|
||||
})();
|
||||
}
|
||||
4
test/fixtures/transformation/misc/_member-expression-keywords/actual.js
vendored
Normal file
4
test/fixtures/transformation/misc/_member-expression-keywords/actual.js
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
test.catch;
|
||||
test.catch["foo"];
|
||||
test["catch"];
|
||||
test["catch"]["foo"];
|
||||
6
test/fixtures/transformation/misc/_member-expression-keywords/expected.js
vendored
Normal file
6
test/fixtures/transformation/misc/_member-expression-keywords/expected.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
"use strict";
|
||||
|
||||
test["catch"];
|
||||
test["catch"]["foo"];
|
||||
test["catch"];
|
||||
test["catch"]["foo"];
|
||||
6
test/fixtures/transformation/misc/_property-literals/actual.js
vendored
Normal file
6
test/fixtures/transformation/misc/_property-literals/actual.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
var obj = {
|
||||
"test": "foob",
|
||||
"!@#$": "foob",
|
||||
"33rd": "foob",
|
||||
fooBar: "foob"
|
||||
};
|
||||
8
test/fixtures/transformation/misc/_property-literals/expected.js
vendored
Normal file
8
test/fixtures/transformation/misc/_property-literals/expected.js
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
"use strict";
|
||||
|
||||
var obj = {
|
||||
test: "foob",
|
||||
"!@#$": "foob",
|
||||
"33rd": "foob",
|
||||
fooBar: "foob"
|
||||
};
|
||||
@@ -1,15 +1,15 @@
|
||||
define(["exports"], function (exports) {
|
||||
"use strict";
|
||||
|
||||
exports.default = 42;
|
||||
exports.default = {};
|
||||
exports.default = [];
|
||||
exports.default = foo;
|
||||
exports.default = function () {};
|
||||
exports.default = function () {};
|
||||
exports["default"] = 42;
|
||||
exports["default"] = {};
|
||||
exports["default"] = [];
|
||||
exports["default"] = foo;
|
||||
exports["default"] = function () {};
|
||||
exports["default"] = function () {};
|
||||
function foo() {}
|
||||
exports.default = foo;
|
||||
exports["default"] = foo;
|
||||
var Foo = function Foo() {};
|
||||
|
||||
exports.default = Foo;
|
||||
exports["default"] = Foo;
|
||||
});
|
||||
|
||||
0
test/fixtures/transformation/modules-amd/exports-default/untitled
vendored
Normal file
0
test/fixtures/transformation/modules-amd/exports-default/untitled
vendored
Normal file
@@ -11,7 +11,7 @@ define(["exports", "foo"], function (exports, _foo) {
|
||||
exports.foo = _foo.foo;
|
||||
exports.bar = _foo.bar;
|
||||
exports.bar = _foo.foo;
|
||||
exports.default = _foo.foo;
|
||||
exports.default = _foo.foo;
|
||||
exports["default"] = _foo.foo;
|
||||
exports["default"] = _foo.foo;
|
||||
exports.bar = _foo.bar;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5,7 +5,7 @@ define(["exports"], function (exports) {
|
||||
exports.foo = foo;
|
||||
exports.bar = bar;
|
||||
exports.bar = foo;
|
||||
exports.default = foo;
|
||||
exports.default = foo;
|
||||
exports["default"] = foo;
|
||||
exports["default"] = foo;
|
||||
exports.bar = bar;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
define(["exports", "foo"], function (exports, _foo) {
|
||||
"use strict";
|
||||
|
||||
var foo = _foo.default;
|
||||
var foo = _foo.default;
|
||||
});
|
||||
var foo = _foo["default"];
|
||||
var foo = _foo["default"];
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
define(["exports", "foo"], function (exports, _foo) {
|
||||
"use strict";
|
||||
|
||||
var foo = _foo.default;
|
||||
var foo = _foo["default"];
|
||||
var xyz = _foo.baz;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
define(["exports", "foo", "foo-bar", "./directory/foo-bar"], function (exports, _foo, _fooBar, _directoryFooBar) {
|
||||
"use strict";
|
||||
|
||||
var foo = _foo.default;
|
||||
var foo = _foo["default"];
|
||||
var foo = _foo;
|
||||
var bar = _foo.bar;
|
||||
var bar = _foo.foo;
|
||||
exports.test = test;
|
||||
var test = exports.test = 5;
|
||||
|
||||
exports.default = test;
|
||||
exports["default"] = test;
|
||||
});
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
"use strict";
|
||||
|
||||
exports.default = 42;
|
||||
exports.default = {};
|
||||
exports.default = [];
|
||||
exports.default = foo;
|
||||
exports.default = function () {};
|
||||
exports.default = function () {};
|
||||
exports["default"] = 42;
|
||||
exports["default"] = {};
|
||||
exports["default"] = [];
|
||||
exports["default"] = foo;
|
||||
exports["default"] = function () {};
|
||||
exports["default"] = function () {};
|
||||
function foo() {}
|
||||
exports.default = foo;
|
||||
exports["default"] = foo;
|
||||
var Foo = function Foo() {};
|
||||
|
||||
exports.default = Foo;
|
||||
exports["default"] = Foo;
|
||||
|
||||
@@ -10,6 +10,6 @@ exports.foo = require("foo").foo;
|
||||
exports.foo = require("foo").foo;
|
||||
exports.bar = require("foo").bar;
|
||||
exports.bar = require("foo").foo;
|
||||
exports.default = require("foo").foo;
|
||||
exports.default = require("foo").foo;
|
||||
exports.bar = require("foo").bar;
|
||||
exports["default"] = require("foo").foo;
|
||||
exports["default"] = require("foo").foo;
|
||||
exports.bar = require("foo").bar;
|
||||
|
||||
@@ -4,6 +4,6 @@ exports.foo = foo;
|
||||
exports.foo = foo;
|
||||
exports.bar = bar;
|
||||
exports.bar = foo;
|
||||
exports.default = foo;
|
||||
exports.default = foo;
|
||||
exports.bar = bar;
|
||||
exports["default"] = foo;
|
||||
exports["default"] = foo;
|
||||
exports.bar = bar;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
"use strict";
|
||||
|
||||
var foo = require("foo").default;
|
||||
var foo = require("foo").default;
|
||||
var foo = require("foo")["default"];
|
||||
var foo = require("foo")["default"];
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
"use strict";
|
||||
|
||||
var foo = require("foo").default;
|
||||
var foo = require("foo")["default"];
|
||||
var xyz = require("foo").baz;
|
||||
|
||||
@@ -6,7 +6,7 @@ require("foo-bar");
|
||||
|
||||
require("./directory/foo-bar");
|
||||
|
||||
var foo = require("foo").default;
|
||||
var foo = require("foo")["default"];
|
||||
var foo = require("foo");
|
||||
|
||||
var bar = require("foo").bar;
|
||||
@@ -14,4 +14,4 @@ var bar = require("foo").foo;
|
||||
exports.test = test;
|
||||
var test = exports.test = 5;
|
||||
|
||||
exports.default = test;
|
||||
exports["default"] = test;
|
||||
|
||||
@@ -7,15 +7,15 @@
|
||||
})(function (exports) {
|
||||
"use strict";
|
||||
|
||||
exports.default = 42;
|
||||
exports.default = {};
|
||||
exports.default = [];
|
||||
exports.default = foo;
|
||||
exports.default = function () {};
|
||||
exports.default = function () {};
|
||||
exports["default"] = 42;
|
||||
exports["default"] = {};
|
||||
exports["default"] = [];
|
||||
exports["default"] = foo;
|
||||
exports["default"] = function () {};
|
||||
exports["default"] = function () {};
|
||||
function foo() {}
|
||||
exports.default = foo;
|
||||
exports["default"] = foo;
|
||||
var Foo = function Foo() {};
|
||||
|
||||
exports.default = Foo;
|
||||
exports["default"] = Foo;
|
||||
});
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
exports.foo = _foo.foo;
|
||||
exports.bar = _foo.bar;
|
||||
exports.bar = _foo.foo;
|
||||
exports.default = _foo.foo;
|
||||
exports.default = _foo.foo;
|
||||
exports["default"] = _foo.foo;
|
||||
exports["default"] = _foo.foo;
|
||||
exports.bar = _foo.bar;
|
||||
});
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
exports.foo = foo;
|
||||
exports.bar = bar;
|
||||
exports.bar = foo;
|
||||
exports.default = foo;
|
||||
exports.default = foo;
|
||||
exports["default"] = foo;
|
||||
exports["default"] = foo;
|
||||
exports.bar = bar;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
})(function (exports, _foo) {
|
||||
"use strict";
|
||||
|
||||
var foo = _foo.default;
|
||||
var foo = _foo.default;
|
||||
});
|
||||
var foo = _foo["default"];
|
||||
var foo = _foo["default"];
|
||||
});
|
||||
|
||||
@@ -7,6 +7,6 @@
|
||||
})(function (exports, _foo) {
|
||||
"use strict";
|
||||
|
||||
var foo = _foo.default;
|
||||
var foo = _foo["default"];
|
||||
var xyz = _foo.baz;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -7,12 +7,12 @@
|
||||
})(function (exports, _foo, _fooBar, _directoryFooBar) {
|
||||
"use strict";
|
||||
|
||||
var foo = _foo.default;
|
||||
var foo = _foo["default"];
|
||||
var foo = _foo;
|
||||
var bar = _foo.bar;
|
||||
var bar = _foo.foo;
|
||||
exports.test = test;
|
||||
var test = exports.test = 5;
|
||||
|
||||
exports.default = test;
|
||||
exports["default"] = test;
|
||||
});
|
||||
|
||||
@@ -1 +1 @@
|
||||
var foo = bar`a${ 42 }b ${_.foobar()}`;
|
||||
var foo = bar`wow\na${ 42 }b ${_.foobar()}`;
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
"use strict";
|
||||
|
||||
var foo = bar(["a", "b ", ""], 42, _.foobar());
|
||||
var _taggedTemplateLiteral = function (strings, raw) {
|
||||
return Object.defineProperties(strings, {
|
||||
raw: {
|
||||
value: raw
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var foo = bar(_taggedTemplateLiteral(["wow\na", "b ", ""], ["wow\\na", "b ", ""]), 42, _.foobar());
|
||||
|
||||
@@ -1,4 +1,2 @@
|
||||
"use strict";
|
||||
|
||||
var string = "foo\ud83d\udca9bar";
|
||||
var match = string.match(/foo((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uDC00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF]))bar/);
|
||||
var string = 'foo💩bar';
|
||||
var match = string.match(/foo(.)bar/u);
|
||||
|
||||
@@ -22,7 +22,7 @@ suite("generation", function () {
|
||||
_.each(helper.get("generation"), function (testSuite) {
|
||||
suite("generation/" + testSuite.title, function () {
|
||||
_.each(testSuite.tests, function (task) {
|
||||
test(task.title, function () {
|
||||
test(task.title, !task.disabled && function () {
|
||||
var expect = task.expect;
|
||||
var actual = task.actual;
|
||||
|
||||
|
||||
15
test/runtime.js
Normal file
15
test/runtime.js
Normal file
@@ -0,0 +1,15 @@
|
||||
var runtime = require("../lib/6to5/runtime");
|
||||
var assert = require("assert");
|
||||
|
||||
suite("runtime", function () {
|
||||
test("default", function () {
|
||||
var code = runtime();
|
||||
assert.ok(!!code.match(/to5Runtime/));
|
||||
});
|
||||
|
||||
test("custom", function () {
|
||||
var code = runtime("customNamespace");
|
||||
assert.ok(code.match(/customNamespace/));
|
||||
assert.ok(!code.match(/to5Runtime/));
|
||||
});
|
||||
});
|
||||
@@ -64,7 +64,7 @@ var run = function (task) {
|
||||
_.each(helper.get("transformation"), function (testSuite) {
|
||||
suite("transformation/" + testSuite.title, function () {
|
||||
_.each(testSuite.tests, function (task) {
|
||||
test(task.title, function () {
|
||||
test(task.title, !task.disabled && function () {
|
||||
var runTask = function () {
|
||||
run(task);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user