Compare commits

...

16 Commits

Author SHA1 Message Date
Sebastian McKenzie
5fe1c07d9a v1.14.6 2014-11-30 23:40:12 +11:00
Sebastian McKenzie
758a873894 avoid ensuring a block on non-array node replacements 2014-11-30 23:39:08 +11:00
Sebastian McKenzie
e91926d094 v1.14.5 2014-11-30 11:15:54 +11:00
Sebastian McKenzie
5085b96753 update 1.14.5 changelog 2014-11-30 11:12:36 +11:00
Sebastian McKenzie
66f67b92ce upgrade acorn-6to5 2014-11-30 11:10:58 +11:00
Sebastian McKenzie
3c9fa13a1f remove JSON.stringify of unknown generator node types 2014-11-30 11:10:58 +11:00
Sebastian McKenzie
5f21fc2f17 ensureBlock on multiple node replacements - fixes #229 2014-11-30 11:10:57 +11:00
Sebastian McKenzie
4bd4e4cdbe fix sh doc code blocks 2014-11-30 11:10:57 +11:00
Sebastian McKenzie
3c7b2d7872 Merge pull request #231 from thejameskyle/module-names
Add CLI commands for module docs
2014-11-30 10:52:42 +11:00
James Kyle
5db757354a Add CLI commands for module docs 2014-11-29 11:31:34 -08:00
Sebastian McKenzie
063b379d4f remove dead playground docs 2014-11-26 22:21:18 +11:00
Sebastian McKenzie
af42fe3d30 v1.14.4 2014-11-26 17:24:55 +11:00
Sebastian McKenzie
3c808fcef2 merge pretzel maps and method binding 2014-11-26 17:23:33 +11:00
Sebastian McKenzie
a29505f75d v1.14.3 2014-11-26 16:21:40 +11:00
Sebastian McKenzie
05942d17bf add 1.14.3 changelog 2014-11-26 16:19:15 +11:00
Sebastian McKenzie
be0d4b344b add playground pretzel maps 2014-11-26 16:17:27 +11:00
20 changed files with 190 additions and 33 deletions

View File

@@ -1,3 +1,21 @@
# 1.14.6
* Avoid ensuring a block on non-array node replacements.
# 1.14.5
* Upgrade `acorn-6to5`.
* Fix JSON recursion error for unknown code generator node types.
* Ensure that a statement is a block on block/statement types when replacing them with multiple nodes.
# 1.14.4
* Merge pretzel maps and method binding.
# 1.14.3
* Add playground pretzel maps.
# 1.14.2
* Fix `commonInterop` default export handling.

View File

@@ -32,6 +32,7 @@ to5.register({
var _eval = function (code, filename) {
code = to5.transform(code, {
modules: "commonInterop",
filename: filename,
blacklist: ["useStrict"],
experimental: commander.experimental

View File

@@ -30,7 +30,9 @@ test.test();
You can build a browser version of the compiler by running the following in the
6to5 directory:
$ make build
```sh
$ make build
```
This will output the files `dist/6to5.js` and `dist/6to5.min.js`.
@@ -38,7 +40,9 @@ This will output the files `dist/6to5.js` and `dist/6to5.min.js`.
To test 6to5 in your browser run:
$ make test-browser
```sh
$ make test-browser
```
And open `test/browser.html` in your browser if it doesn't open automatically.

View File

@@ -19,12 +19,16 @@ how you want to use it.
6to5 will simply compile your ES6+ script to ES5 if you pass it as an argument
to the command-line tool `6to5`:
$ 6to5 script.js
```sh
$ 6to5 script.js
```
If you have a file written using ES6+ and you just want to run it, `6to5-node`
has you covered:
$ 6to5-node script.js
```sh
$ 6to5-node script.js
```
And it doesn't end here! To see all the ways you can use 6to5, check out the
[Usage](http://6to5.github.io/usage.html) page.

View File

@@ -4,7 +4,9 @@
### CLI
$ 6to5 --modules common script.js
```sh
$ 6to5 --modules common script.js
```
### Node
@@ -17,13 +19,17 @@ to5.transform('import "foo";', { modules: "common" });
* [AMD](#amd)
* [Common (Default)](#common-default)
* [Common](#common)
* [Common Interop](#common-interop)
* [Ignore](#ignore)
* [System](#system)
* [UMD](#umd)
### Common (Default)
```sh
$ 6to5 --modules common
```
**In**
```javascript
@@ -60,6 +66,10 @@ exports.default = test;
### Common interop
```sh
$ 6to5 --modules commonInterop
```
**In**
```javascript
@@ -123,6 +133,10 @@ function foo() {
### AMD
```sh
$ 6to5 --modules amd
```
**In**
```javascript
@@ -155,6 +169,10 @@ define("filename", ["exports", "foo"], function (exports, _foo) {})
### UMD
```sh
$ 6to5 --modules umd
```
**In**
```javascript
@@ -187,6 +205,10 @@ export function bar() {
### Ignore
```sh
$ 6to5 --modules ignore
```
**In**
```javascript
@@ -207,6 +229,10 @@ function bar() {
### System
```sh
$ 6to5 --modules system
```
**In**
```javascript
@@ -244,7 +270,9 @@ System.register("bar", ["foo"], function (_export) {
You can alternatively specify module names instead of one of the built-in types.
$ 6to5 --modules custom-module-formatter
```sh
$ 6to5 --modules custom-module-formatter
```
**node_modules/custom-module-formatter/index.js**

View File

@@ -18,7 +18,9 @@ Simply use the following option if you're using the [Node API](usage.md#node):
or the following flag if you're using the [CLI](usage.md#cli):
$ 6to5 --runtime
```ssh
$ 6to5 --runtime
```
Then just include the runtime before your generated code.
@@ -26,7 +28,9 @@ Then just include the runtime before your generated code.
You can get the runtime via either:
$ 6to5-runtime
```sh
$ 6to5-runtime
```
or
@@ -45,7 +49,9 @@ argument:
require("6to5").runtime("myCustomNamespace");
```
$ 6to5-runtime myCustomNamespace
```sh
$ 6to5-runtime myCustomNamespace
```
See [Options - runtime](usage.md#options) for documentation on changing the
reference in generated code.

View File

@@ -47,11 +47,14 @@ var obj = {};
if (!Object.prototype.hasOwnProperty.call(obj, "x")) obj.x = 2;
```
### Method binding expression
### Method binding
```javascript
var fn = obj:method;
var fn = obj:method("foob");
["foo", "bar"].map(:toUpperCase); // ["FOO", "BAR"]
[1.1234, 23.53245, 3].map(:toFixed(2)); // ["1.12", "23.53", "3.00"]
```
equivalent to:
@@ -59,7 +62,7 @@ equivalent to:
```javascript
var fn = obj.method.bind(obj);
var fn = obj.method.bind(obj, "foob");
```
**NOTE:** Method binding can **only** be used as an **expression** and not as
statement.
["foo", "bar"].map(function (val) { return val.toUpperCase(); });
[1.1234, 23.53245, 3].map(function (val) { return val.toFixed(2); });
```

View File

@@ -12,5 +12,6 @@ To disable this behaviour add `react` to your blacklist:
to5.transform("code", { blacklist: ["react"] });
```
$ 6to5 --blacklist react
```sh
$ 6to5 --blacklist react
```

View File

@@ -4,47 +4,67 @@
Compile the file `script.js` and output it to stdout.
$ 6to5 script.js
```sh
$ 6to5 script.js
```
Compile the file `script.js` and output it to `script-compiled.js`.
$ 6to5 script.js --out-file script-compiled.js
```sh
$ 6to5 script.js --out-file script-compiled.js
```
Compile the file `script.js` and output it to `script-compiled.js` and save a
source map to `script-compiled.js.map`.
$ 6to5 script.js --source-maps --out-file script-compiled.js
```sh
$ 6to5 script.js --source-maps --out-file script-compiled.js
```
Compile the file `script.js` and output it to `script-compiled.js` with a source
map embedded in a comment at the bottom.
$ 6to5 script.js --source-maps-inline --out-file script-compiled.js
```sh
$ 6to5 script.js --source-maps-inline --out-file script-compiled.js
```
Compile the entire `src` directory and output it to the `lib` directory.
$ 6to5 src --out-dir lib
```sh
$ 6to5 src --out-dir lib
```
Compile the entire `src` directory and output it to the one concatenated file.
$ 6to5 src --out-file script-compiled.js
```sh
$ 6to5 src --out-file script-compiled.js
```
Pipe a file in via stdin and output it to `script-compiled.js`
$ 6to5 --out-file script-compiled.js < script.js
```sh
$ 6to5 --out-file script-compiled.js < script.js
```
### Node
Launch a repl.
$ 6to5-node
```sh
$ 6to5-node
```
Evaluate code.
$ 6to5-node -e "class Test { }"
```sh
$ 6to5-node -e "class Test { }"
```
Compile and run `test.js`.
$ 6to5-node test
```sh
$ 6to5-node test
```
## Node

View File

@@ -161,7 +161,7 @@ CodeGenerator.prototype.print = function (node, parent, opts) {
this.printTrailingComments(node, parent);
} else {
throw new ReferenceError("unknown node " + node.type + " " + JSON.stringify(node));
throw new ReferenceError("unknown node " + node.type);
}
};

View File

@@ -1,6 +1,6 @@
var _ = require("lodash");
_.each(["BindMemberExpression"], function (type) {
_.each(["BindMemberExpression", "BindFunctionExpression"], function (type) {
exports[type] = function () {
throw new ReferenceError("Trying to render non-standard playground node " + JSON.stringify(type));
};

View File

@@ -38,6 +38,12 @@ def("BindMemberExpression")
.field("property", or(def("Identifier"), def("Expression")))
.field("arguments", [def("Expression")]);
def("BindFunctionExpression")
.bases("Expression")
.build("callee", "arguments")
.field("callee", def("Expression"))
.field("arguments", [def("Expression")]);
types.finalize();
var estraverse = require("estraverse");

View File

@@ -1,4 +1,5 @@
var t = require("../../types");
var _ = require("lodash");
exports.BindMemberExpression = function (node, parent, file, scope) {
var object = node.object;
@@ -28,3 +29,30 @@ exports.BindMemberExpression = function (node, parent, file, scope) {
return call;
}
};
exports.BindFunctionExpression = function (node, parent, file, scope) {
var buildCall = function (args) {
var param = file.generateUidIdentifier("val", scope);
return t.functionExpression(null, [param], t.blockStatement([
t.returnStatement(t.callExpression(t.memberExpression(param, node.callee), args))
]));
};
if (_.find(node.arguments, t.isDynamic)) {
var argsIdName = file.generateUid("args", scope);
var argsId = t.identifier(argsIdName);
scope.push({
key: argsIdName,
id: argsId
});
return t.sequenceExpression([
t.assignmentExpression("=", argsId, t.arrayExpression(node.arguments)),
buildCall(node.arguments.map(function (node, i) {
return t.memberExpression(argsId, t.literal(i), true);
}))
]);
} else {
return buildCall(node.arguments);
}
};

View File

@@ -50,6 +50,10 @@ function traverse(parent, callbacks, opts) {
if (result != null) {
updated = true;
node = obj[key] = result;
if (_.isArray(result) && _.contains(t.STATEMENT_OR_BLOCK_KEYS, key) && !t.isBlockStatement(obj)) {
t.ensureBlock(obj, key);
}
}
};

View File

@@ -12,6 +12,8 @@ var addAssert = function (type, is) {
};
};
t.STATEMENT_OR_BLOCK_KEYS = ["consequent", "body"];
//
t.VISITOR_KEYS = require("./visitor-keys");
@@ -167,8 +169,9 @@ t.isValidIdentifier = function (name) {
return _.isString(name) && esutils.keyword.isIdentifierName(name) && !esutils.keyword.isKeywordES6(name, true);
};
t.ensureBlock = function (node) {
node.body = t.toBlock(node.body, node);
t.ensureBlock = function (node, key) {
key = key || "body";
node[key] = t.toBlock(node[key], node);
};
t.toStatement = function (node, ignore) {

View File

@@ -44,6 +44,7 @@
"ObjectExpression": ["properties"],
"ObjectPattern": ["properties"],
"ParenthesizedExpression": ["expression"],
"BindFunctionExpression": ["callee", "arguments"],
"Program": ["body"],
"Property": ["key", "value"],
"ReturnStatement": ["argument"],

View File

@@ -1,7 +1,7 @@
{
"name": "6to5",
"description": "Turn ES6 code into readable vanilla ES5 with source maps",
"version": "1.14.2",
"version": "1.14.6",
"author": "Sebastian McKenzie <sebmck@gmail.com>",
"homepage": "https://github.com/6to5/6to5",
"repository": {
@@ -47,7 +47,7 @@
"chokidar": "0.11.1",
"source-map-support": "0.2.8",
"esutils": "1.1.6",
"acorn-6to5": "0.9.1-8",
"acorn-6to5": "0.9.1-11",
"estraverse": "1.8.0",
"private": "0.1.6"
},

View File

@@ -3,3 +3,11 @@ var fn = obj:method("foob");
var fn = obj[foo]:method;
var fn = obj.foo:method;
var fn = obj[foo()]:method;
["foo", "bar"].map(:toUpperCase);
[1.1234, 23.53245, 3].map(:toFixed(2));
var get = function () {
return 2;
};
[1.1234, 23.53245, 3].map(:toFixed(get()));

View File

@@ -20,3 +20,11 @@ assert.equal(bar(), "foo bar");
var zoo = obj:getZoo("foo");
assert.equal(zoo("bar"), "foo bar foo bar");
assert.deepEqual(["foo", "bar"].map(:toUpperCase), ["FOO", "BAR"]);
assert.deepEqual([1.1234, 23.53245, 3].map(:toFixed(2)), ["1.12", "23.53", "3.00"]);
var get = function () {
return 2;
}
assert.deepEqual([1.1234, 23.53245, 3].map(:toFixed(get())), ["1.12", "23.53", "3.00"]);

View File

@@ -1,8 +1,22 @@
"use strict";
var _temp;
var _temp, _args;
var fn = obj.method.bind(obj);
var fn = obj.method.bind(obj, "foob");
var fn = obj[foo].method.bind(obj[foo]);
var fn = obj.foo.method.bind(obj.foo);
var fn = (_temp = obj[foo()], _temp.method.bind(_temp));
["foo", "bar"].map(function (_val) {
return _val.toUpperCase();
});
[1.1234, 23.53245, 3].map(function (_val2) {
return _val2.toFixed(2);
});
var get = function () {
return 2;
};
[1.1234, 23.53245, 3].map((_args = [get()], function (_val3) {
return _val3.toFixed(_args[0]);
}));