Compare commits

...

11 Commits

Author SHA1 Message Date
Sebastian McKenzie
4942ba6dd7 v2.0.2 2014-12-28 01:14:54 +11:00
Sebastian McKenzie
b63bd8cba0 remove interopRequire from system module formatter 2014-12-28 01:14:08 +11:00
Sebastian McKenzie
cd1eb11171 Merge branch 'master' of github.com:6to5/6to5 2014-12-28 01:10:00 +11:00
Sebastian McKenzie
6e1c12fd78 inherit comments in for-of transformer 2014-12-28 01:09:48 +11:00
Sebastian McKenzie
a4ea71b85d Merge pull request #337 from guybedford/master
Correct system format base support tests
2014-12-28 01:03:35 +11:00
Sebastian McKenzie
1df69bdbeb v2.0.1 2014-12-28 01:02:29 +11:00
Sebastian McKenzie
84c2766756 remove unused variable 2014-12-28 01:01:52 +11:00
Sebastian McKenzie
1f000ac83d add 2.0.1 changelog 2014-12-28 01:01:18 +11:00
Sebastian McKenzie
322aa246b8 fix automatic closure on private declarations - fixes #335 2014-12-28 01:01:13 +11:00
Sebastian McKenzie
601bbb86cd remap UpdateExpression in module exports - closes #334 2014-12-28 01:00:53 +11:00
guybedford
5c39685650 correct system format base support tests 2014-12-27 15:59:52 +02:00
23 changed files with 122 additions and 60 deletions

View File

@@ -2,6 +2,16 @@
Gaps between patch versions are faulty/broken releases.
## 2.0.2
* Inherit comments in `for-of` transformer.
* Remove `interopRequire` from `system` module formatter.
## 2.0.1
* Remap `UpdateExpression` module export binding.
* Fix automatic closure on `PrivateDeclaration` in classes.
## 2.0.0
* Make string literal generation only escapes unicode that it has to.

View File

@@ -44,16 +44,42 @@ DefaultFormatter.prototype.remapAssignments = function () {
var self = this;
var isLocalReference = function (node, scope) {
var left = node.left;
var name = left.name;
return t.isIdentifier(left) && localExports[name] && localExports[name] === scope.get(name, true);
var name = node.name;
return t.isIdentifier(node) && localExports[name] && localExports[name] === scope.get(name, true);
};
traverse(this.file.ast, {
enter: function (node, parent, scope) {
if (t.isExportDeclaration(node)) return false;
if (t.isUpdateExpression(node) && isLocalReference(node.argument, scope)) {
this.stop();
if (t.isAssignmentExpression(node) && isLocalReference(node, scope)) {
// expand to long file assignment expression
var assign = t.assignmentExpression(node.operator[0] + "=", node.argument, t.literal(1));
// remap this assignment expression
var remapped = self.remapExportAssignment(assign);
// we don't need to change the result
if (t.isExpressionStatement(parent) || node.prefix) {
return remapped;
}
var nodes = [];
nodes.push(remapped);
var operator;
if (node.operator === "--") {
operator = "+";
} else { // "++"
operator = "-";
}
nodes.push(t.binaryExpression(operator, node.argument, t.literal(1)));
return t.sequenceExpression(nodes);
}
if (t.isAssignmentExpression(node) && isLocalReference(node.left, scope)) {
this.stop();
return self.remapExportAssignment(node);
}
}

View File

@@ -5,8 +5,8 @@ var util = require("../../util");
var t = require("../../types");
var _ = require("lodash");
function AMDFormatter(file) {
this.file = file;
function AMDFormatter() {
DefaultFormatter.apply(this, arguments);
this.ids = {};
}
@@ -83,7 +83,7 @@ AMDFormatter.prototype.importSpecifier = function (specifier, node, nodes) {
if (t.isImportBatchSpecifier(specifier)) {
// import * as bar from "foo";
} else if (t.isSpecifierDefault(specifier)) {
} else if (t.isSpecifierDefault(specifier) && !this.noInteropRequire) {
// import foo from "foo";
ref = t.callExpression(this.file.addDeclaration("interop-require"), [ref]);
} else {

View File

@@ -7,10 +7,12 @@ var t = require("../../types");
var _ = require("lodash");
function SystemFormatter(file) {
this.exportIdentifier = file.generateUidIdentifier("export");
this.noInteropRequire = true;
AMDFormatter.apply(this, arguments);
this.moduleNameLiteral = t.literal(this.getModuleName());
this.exportIdentifier = file.generateUidIdentifier("export");
}
util.inherits(SystemFormatter, AMDFormatter);

View File

@@ -8,16 +8,24 @@ exports.ClassDeclaration = function (node, parent, file, scope) {
closure = false;
}
var newNode = new Class(node, file, scope, closure).run();
if (closure) {
// declaration in an expression context...
// export default class Foo {}
scope.push({
kind: "var",
key: node.id.key,
id: node.id
});
return t.assignmentExpression("=", node.id, newNode);
var factory = new Class(node, file, scope, closure);
var newNode = factory.run();
if (factory.closure) {
if (closure) {
// declaration in an expression context...
// export default class Foo {}
scope.push({
kind: "var",
key: node.id.key,
id: node.id
});
return t.assignmentExpression("=", node.id, newNode);
} else {
// likely has a PrivateDeclaration etc
return t.variableDeclaration("let", [
t.variableDeclarator(node.id, newNode)
]);
}
} else {
return newNode;
}

View File

@@ -24,6 +24,7 @@ exports.ForOfStatement = function (node, parent, file, scope) {
OBJECT: node.right
});
t.inheritsComments(node2, node);
t.ensureBlock(node);
var block = node2.body;

View File

@@ -50,17 +50,25 @@ function traverse(parent, opts, scope) {
}
};
var stop = false;
var context = {
stop: function () {
stop = true;
}
};
//
var ourScope = scope;
if (t.isScope(node)) ourScope = new Scope(node, scope);
// enter
if (opts.enter) {
var result = opts.enter(node, parent, ourScope);
var result = opts.enter.call(context, node, parent, ourScope);
maybeReplace(result);
// stop iteration
if (result === false) return;
if (stop || result === false) return;
}
// traverse node
@@ -68,7 +76,7 @@ function traverse(parent, opts, scope) {
// exit
if (opts.exit) {
maybeReplace(opts.exit(node, parent, ourScope));
maybeReplace(opts.exit.call(context, node, parent, ourScope));
}
};
@@ -89,7 +97,6 @@ traverse.removeProperties = function (tree) {
delete node._declarations;
delete node.extendedRange;
delete node._scopeInfo;
delete node._scope;
delete node.tokens;
delete node.range;
delete node.start;

View File

@@ -240,14 +240,17 @@ t.getIds = function (node, map, ignoreTypes) {
if (_.contains(ignoreTypes, id.type)) continue;
var nodeKey = t.getIds.nodes[id.type];
var arrKey = t.getIds.arrays[id.type];
var arrKeys = t.getIds.arrays[id.type];
if (t.isIdentifier(id)) {
ids[id.name] = id;
} else if (nodeKey) {
if (id[nodeKey]) search.push(id[nodeKey]);
} else if (arrKey) {
search = search.concat(id[arrKey] || []);
} else if (arrKeys) {
for (var i in arrKeys) {
var key = arrKeys[i];
search = search.concat(id[key] || []);
}
}
}
@@ -268,11 +271,11 @@ t.getIds.nodes = {
};
t.getIds.arrays = {
ExportDeclaration: "specifiers",
ImportDeclaration: "specifiers",
VariableDeclaration: "declarations",
ArrayPattern: "elements",
ObjectPattern: "properties"
ExportDeclaration: ["specifiers", "declaration"],
ImportDeclaration: ["specifiers"],
VariableDeclaration: ["declarations"],
ArrayPattern: ["elements"],
ObjectPattern: ["properties"]
};
t.isLet = function (node) {

View File

@@ -1,7 +1,7 @@
{
"name": "6to5",
"description": "Turn ES6 code into readable vanilla ES5 with source maps",
"version": "2.0.0",
"version": "2.0.2",
"author": "Sebastian McKenzie <sebmck@gmail.com>",
"homepage": "https://github.com/6to5/6to5",
"repository": {

View File

@@ -1,7 +1,9 @@
export var test = 2;
test = 5;
test++;
(function () {
var test = 2;
test = 3;
test++;
})();

View File

@@ -2,10 +2,12 @@ define(["exports"], function (exports) {
"use strict";
var test = exports.test = 2;
test = 5;
test = exports.test = 5;
test = exports.test += 1;
(function () {
var test = 2;
test = 3;
test++;
})();
});

View File

@@ -1,7 +1,9 @@
export var test = 2;
test = 5;
test++;
(function () {
var test = 2;
test = 3;
test++;
})();

View File

@@ -2,8 +2,10 @@
var test = exports.test = 2;
test = exports.test = 5;
test = exports.test += 1;
(function () {
var test = 2;
test = 3;
test++;
})();

View File

@@ -1,7 +1,9 @@
export var test = 2;
test = 5;
test++;
(function () {
var test = 2;
test = 3;
test++;
})();

View File

@@ -2,8 +2,10 @@
var test = 2;
test = 5;
test++;
(function () {
var test = 2;
test = 3;
test++;
})();

View File

@@ -7,13 +7,8 @@ System.register("es6-modules-system/imports-default/expected", ["foo"], function
execute: function () {
"use strict";
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
};
var foo = _interopRequire(_foo);
var foo = _interopRequire(_foo);
var foo = _foo["default"];
var foo = _foo["default"];
}
};
});
});

View File

@@ -7,13 +7,8 @@ System.register("es6-modules-system/imports-mixing/expected", ["foo"], function
execute: function () {
"use strict";
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
};
var foo = _interopRequire(_foo);
var foo = _foo["default"];
var xyz = _foo.baz;
}
};
});
});

View File

@@ -11,12 +11,7 @@ System.register("es6-modules-system/overview/expected", ["foo", "foo-bar", "./di
execute: function () {
"use strict";
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
};
var foo = _interopRequire(_foo);
var foo = _foo["default"];
var foo = _foo;
var bar = _foo.bar;
var bar = _foo.foo;
@@ -27,4 +22,4 @@ System.register("es6-modules-system/overview/expected", ["foo", "foo-bar", "./di
_export("default", test);
}
};
});
});

View File

@@ -1,7 +1,9 @@
export var test = 2;
test = 5;
test++;
(function () {
var test = 2;
test = 3;
test++;
})();

View File

@@ -5,12 +5,14 @@ System.register("es6-modules-system/remap/expected", [], function (_export) {
"use strict";
var test = _export("test", 2);
test = 5;
_export("test", test = 5);
_export("test", test += 1);
(function () {
var test = 2;
test = 3;
test++;
})();
}
};
});
});

View File

@@ -1,7 +1,9 @@
export var test = 2;
test = 5;
test++;
(function () {
var test = 2;
test = 3;
test++;
})();

View File

@@ -8,10 +8,12 @@
"use strict";
var test = exports.test = 2;
test = 5;
test = exports.test = 5;
test = exports.test += 1;
(function () {
var test = 2;
test = 3;
test++;
})();
});

View File

@@ -2,13 +2,13 @@
var A = new WeakMap();
var B = new WeakMap(), C = new WeakMap();
(function () {
var D = (function () {
var F = new WeakMap(), G = new WeakMap();
var E = new WeakMap();
var D = function D() {};
return D;
})()
})();
var H = (function () {
var J = new WeakMap(), K = new WeakMap();