Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e13ed39567 | ||
|
|
bb00f641b7 | ||
|
|
25b466a627 | ||
|
|
ac231f2987 | ||
|
|
458e3d48f6 | ||
|
|
c235780611 | ||
|
|
56b858ccb1 | ||
|
|
d42351bb02 | ||
|
|
ed7378cc2d | ||
|
|
a47a7dc347 | ||
|
|
2c82b5a4b0 | ||
|
|
3578135b90 | ||
|
|
5f3408b2a2 | ||
|
|
9e3f9fda6b |
@@ -1,3 +1,9 @@
|
||||
# 1.12.3
|
||||
|
||||
* Support generator comprehensions.
|
||||
* Use `Array.from` instead of `Array.prototype.slice` in spread transformer.
|
||||
* Support spread in `NewExpression`s.
|
||||
|
||||
# 1.12.2
|
||||
|
||||
* Upgrade `matcha` to `0.6.0` and `browserify` to `6.3.2`.
|
||||
|
||||
@@ -95,6 +95,11 @@ for (var i of [1, 2, 3]) {
|
||||
```javascript
|
||||
```
|
||||
|
||||
## Generator comprehension
|
||||
|
||||
```javascript
|
||||
```
|
||||
|
||||
## Modules
|
||||
|
||||
```javascript
|
||||
|
||||
@@ -64,11 +64,13 @@ It's as easy as:
|
||||
- [Destructuring](FEATURES.md#destructuring)
|
||||
- [For-of](FEATURES.md#for-of)
|
||||
- [Generators](FEATURES.md#generators) via [regenerator](https://github.com/facebook/regenerator)
|
||||
- [Generator comprehension](FEATURES.md#generator-comprehension)
|
||||
- [Let scoping](FEATURES.md#let-scoping)
|
||||
- [Modules](FEATURES.md#modules)
|
||||
- [Numeric literals](FEATURES.md#numeric-literals)
|
||||
- [Property method assignment](FEATURES.md#property-method-assignment)
|
||||
- [Property name shorthand](FEATURES.md#property-name-shorthand)
|
||||
- [React/JSX](#reactjsx)
|
||||
- [Rest parameters](FEATURES.md#rest-parameters)
|
||||
- [Spread](FEATURES.md#spread)
|
||||
- [Template literals](FEATURES.md#template-literals)
|
||||
@@ -331,6 +333,11 @@ class Bar extends Foo {
|
||||
}
|
||||
```
|
||||
|
||||
### Spread
|
||||
|
||||
An [ES6 polyfill](#polyfill) is required in order for spread to work. More
|
||||
specifically a polyfill for `Array.from`.
|
||||
|
||||
### Generators
|
||||
|
||||
The [regenerator runtime](https://github.com/facebook/regenerator/blob/master/runtime.js)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var commander = require("commander");
|
||||
var util = require("../lib/6to5/util");
|
||||
var path = require("path");
|
||||
var repl = require("repl");
|
||||
var to5 = require("../lib/6to5");
|
||||
var util = require("../lib/6to5/util");
|
||||
var vm = require("vm");
|
||||
var _ = require("lodash");
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ function File(opts) {
|
||||
this.ast = {};
|
||||
}
|
||||
|
||||
File.declarations = ["extends", "class-props", "slice"];
|
||||
File.declarations = ["extends", "class-props", "slice", "apply-constructor"];
|
||||
|
||||
File.normaliseOptions = function (opts) {
|
||||
opts = _.cloneDeep(opts || {});
|
||||
@@ -30,7 +30,8 @@ File.normaliseOptions = function (opts) {
|
||||
sourceMap: false,
|
||||
filename: "unknown",
|
||||
modules: "common",
|
||||
runtime: false
|
||||
runtime: false,
|
||||
code: true
|
||||
});
|
||||
|
||||
// normalise windows path separators to unix
|
||||
@@ -142,6 +143,14 @@ File.prototype.generate = function () {
|
||||
var opts = this.opts;
|
||||
var ast = this.ast;
|
||||
|
||||
if (!opts.code) {
|
||||
return {
|
||||
code: "",
|
||||
map: null,
|
||||
ast: ast
|
||||
};
|
||||
}
|
||||
|
||||
var result = generate(ast, opts, this.code);
|
||||
|
||||
if (this.shebang) {
|
||||
@@ -153,6 +162,8 @@ File.prototype.generate = function () {
|
||||
result.code += "\n" + util.sourceMapToComment(result.map);
|
||||
}
|
||||
|
||||
result.ast = result;
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
|
||||
@@ -53,16 +53,16 @@ CodeGenerator.normaliseOptions = function (opts) {
|
||||
};
|
||||
|
||||
CodeGenerator.generators = {
|
||||
arrayComprehensions: require("./generators/array-comprehensions"),
|
||||
templateLiterals: require("./generators/template-literals"),
|
||||
expressions: require("./generators/expressions"),
|
||||
statements: require("./generators/statements"),
|
||||
classes: require("./generators/classes"),
|
||||
methods: require("./generators/methods"),
|
||||
modules: require("./generators/modules"),
|
||||
types: require("./generators/types"),
|
||||
base: require("./generators/base"),
|
||||
jsx: require("./generators/jsx")
|
||||
templateLiterals: require("./generators/template-literals"),
|
||||
comprehensions: require("./generators/comprehensions"),
|
||||
expressions: require("./generators/expressions"),
|
||||
statements: require("./generators/statements"),
|
||||
classes: require("./generators/classes"),
|
||||
methods: require("./generators/methods"),
|
||||
modules: require("./generators/modules"),
|
||||
types: require("./generators/types"),
|
||||
base: require("./generators/base"),
|
||||
jsx: require("./generators/jsx")
|
||||
};
|
||||
|
||||
_.each(CodeGenerator.generators, function (generator) {
|
||||
@@ -76,7 +76,6 @@ CodeGenerator.prototype.generate = function () {
|
||||
|
||||
return {
|
||||
map: this.map.get(),
|
||||
ast: ast,
|
||||
code: this.buffer.get()
|
||||
};
|
||||
};
|
||||
|
||||
@@ -8,7 +8,8 @@ exports.ComprehensionBlock = function (node, print) {
|
||||
};
|
||||
|
||||
exports.ComprehensionExpression = function (node, print) {
|
||||
this.push("[");
|
||||
this.push(node.generator ? "(" : "[");
|
||||
|
||||
print.join(node.blocks, { separator: " " });
|
||||
this.space();
|
||||
|
||||
@@ -21,5 +22,6 @@ exports.ComprehensionExpression = function (node, print) {
|
||||
}
|
||||
|
||||
print(node.body);
|
||||
this.push("]");
|
||||
|
||||
this.push(node.generator ? ")" : "]");
|
||||
};
|
||||
@@ -36,6 +36,7 @@ var blacklistTest = function (transformer, code) {
|
||||
};
|
||||
|
||||
blacklistTest("arrayComprehension", "var foo = [for (foo of bar) foo * foo];");
|
||||
//blacklistTest("generatorComprehension", "");
|
||||
blacklistTest("arrowFunctions", "var foo = x => x * x;");
|
||||
blacklistTest("classes", "class Foo {}");
|
||||
blacklistTest("computedPropertyNames", "var foo = { [foo]: bar };");
|
||||
|
||||
5
lib/6to5/templates/apply-constructor.js
Normal file
5
lib/6to5/templates/apply-constructor.js
Normal file
@@ -0,0 +1,5 @@
|
||||
(function (Constructor, args) {
|
||||
var bindArgs = [null].concat(args);
|
||||
var Factory = Constructor.bind.apply(Constructor, bindArgs);
|
||||
return new Factory;
|
||||
});
|
||||
@@ -31,6 +31,7 @@ _.each({
|
||||
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"),
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ Transformer.normalise = function (transformer) {
|
||||
}
|
||||
|
||||
_.each(transformer, function (fns, type) {
|
||||
if (type[0] === "_") return;
|
||||
if (_.isFunction(fns)) fns = { enter: fns };
|
||||
transformer[type] = fns;
|
||||
});
|
||||
|
||||
@@ -37,39 +37,42 @@ var multiple = function (node, file) {
|
||||
|
||||
var returnStatement = body.pop();
|
||||
|
||||
var build = function () {
|
||||
var self = node.blocks.shift();
|
||||
if (!self) return;
|
||||
|
||||
var child = build();
|
||||
if (!child) {
|
||||
// last item
|
||||
|
||||
child = util.template("array-push", {
|
||||
STATEMENT: node.body,
|
||||
KEY: uid
|
||||
}, true);
|
||||
|
||||
// add a filter as this is our final stop
|
||||
if (node.filter) {
|
||||
child = t.ifStatement(node.filter, t.blockStatement([child]));
|
||||
}
|
||||
}
|
||||
|
||||
return t.forOfStatement(
|
||||
t.variableDeclaration("var", [t.variableDeclarator(self.left)]),
|
||||
self.right,
|
||||
t.blockStatement([child])
|
||||
);
|
||||
};
|
||||
|
||||
body.push(build());
|
||||
body.push(exports._build(node, function () {
|
||||
return util.template("array-push", {
|
||||
STATEMENT: node.body,
|
||||
KEY: uid
|
||||
}, true);
|
||||
}));
|
||||
body.push(returnStatement);
|
||||
|
||||
return container;
|
||||
};
|
||||
|
||||
exports._build = function (node, buildBody) {
|
||||
var self = node.blocks.shift();
|
||||
if (!self) return;
|
||||
|
||||
var child = exports._build(node, buildBody);
|
||||
if (!child) {
|
||||
// last item
|
||||
child = buildBody();
|
||||
|
||||
// add a filter as this is our final stop
|
||||
if (node.filter) {
|
||||
child = t.ifStatement(node.filter, t.blockStatement([child]));
|
||||
}
|
||||
}
|
||||
|
||||
return t.forOfStatement(
|
||||
t.variableDeclaration("var", [t.variableDeclarator(self.left)]),
|
||||
self.right,
|
||||
t.blockStatement([child])
|
||||
);
|
||||
};
|
||||
|
||||
exports.ComprehensionExpression = function (node, parent, file) {
|
||||
if (node.generator) return;
|
||||
|
||||
if (node.blocks.length === 1 && t.isArrayExpression(node.blocks[0].right)) {
|
||||
return singleArrayExpression(node);
|
||||
} else {
|
||||
|
||||
@@ -3,7 +3,7 @@ var t = require("../../types");
|
||||
var _ = require("lodash");
|
||||
|
||||
exports.Function = function (node) {
|
||||
if (!node.defaults.length) return;
|
||||
if (!node.defaults || !node.defaults.length) return;
|
||||
t.ensureBlock(node);
|
||||
|
||||
_.each(node.defaults, function (def, i) {
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
var arrayComprehension = require("./array-comprehension");
|
||||
var t = require("../../types");
|
||||
|
||||
exports.ComprehensionExpression = function (node) {
|
||||
if (!node.generator) return;
|
||||
|
||||
var body = [];
|
||||
var container = t.functionExpression(null, [], t.blockStatement(body), true);
|
||||
|
||||
body.push(arrayComprehension._build(node, function () {
|
||||
return t.expressionStatement(t.yieldExpression(node.body));
|
||||
}));
|
||||
|
||||
return t.callExpression(container, []);
|
||||
};
|
||||
@@ -1,14 +1,13 @@
|
||||
var util = require("../../util");
|
||||
var t = require("../../types");
|
||||
var _ = require("lodash");
|
||||
var t = require("../../types");
|
||||
var _ = require("lodash");
|
||||
|
||||
var getSpreadLiteral = function (spread, file) {
|
||||
var getSpreadLiteral = function (spread) {
|
||||
var literal = spread.argument;
|
||||
if (!t.isArrayExpression(literal)) {
|
||||
literal = util.template("call", {
|
||||
OBJECT: file.addDeclaration("slice"),
|
||||
CONTEXT: literal
|
||||
});
|
||||
literal = t.callExpression(
|
||||
t.memberExpression(t.identifier("Array"), t.identifier("from")),
|
||||
[literal]
|
||||
);
|
||||
}
|
||||
return literal;
|
||||
};
|
||||
@@ -24,7 +23,7 @@ var hasSpread = function (nodes) {
|
||||
return has;
|
||||
};
|
||||
|
||||
var build = function (props, file) {
|
||||
var build = function (props) {
|
||||
var nodes = [];
|
||||
|
||||
var _props = [];
|
||||
@@ -38,7 +37,7 @@ var build = function (props, file) {
|
||||
_.each(props, function (prop) {
|
||||
if (t.isSpreadElement(prop)) {
|
||||
push();
|
||||
nodes.push(getSpreadLiteral(prop, file));
|
||||
nodes.push(getSpreadLiteral(prop));
|
||||
} else {
|
||||
_props.push(prop);
|
||||
}
|
||||
@@ -49,11 +48,11 @@ var build = function (props, file) {
|
||||
return nodes;
|
||||
};
|
||||
|
||||
exports.ArrayExpression = function (node, parent, file) {
|
||||
exports.ArrayExpression = function (node) {
|
||||
var elements = node.elements;
|
||||
if (!hasSpread(elements)) return;
|
||||
|
||||
var nodes = build(elements, file);
|
||||
var nodes = build(elements);
|
||||
var first = nodes.shift();
|
||||
|
||||
if (!nodes.length) return first;
|
||||
@@ -61,7 +60,7 @@ exports.ArrayExpression = function (node, parent, file) {
|
||||
return t.callExpression(t.memberExpression(first, t.identifier("concat")), nodes);
|
||||
};
|
||||
|
||||
exports.CallExpression = function (node, parent, file) {
|
||||
exports.CallExpression = function (node) {
|
||||
var args = node.arguments;
|
||||
if (!hasSpread(args)) return;
|
||||
|
||||
@@ -69,7 +68,7 @@ exports.CallExpression = function (node, parent, file) {
|
||||
|
||||
node.arguments = [];
|
||||
|
||||
var nodes = build(args, file);
|
||||
var nodes = build(args);
|
||||
var first = nodes.shift();
|
||||
|
||||
if (nodes.length) {
|
||||
@@ -96,3 +95,19 @@ exports.CallExpression = function (node, parent, file) {
|
||||
|
||||
node.arguments.unshift(contextLiteral);
|
||||
};
|
||||
|
||||
exports.NewExpression = function (node, parent, file) {
|
||||
var args = node.arguments;
|
||||
if (!hasSpread(args)) return;
|
||||
|
||||
var nodes = build(args);
|
||||
var first = nodes.shift();
|
||||
|
||||
if (nodes.length) {
|
||||
args = t.callExpression(t.memberExpression(first, t.identifier("concat")), nodes);
|
||||
} else {
|
||||
args = first;
|
||||
}
|
||||
|
||||
return t.callExpression(file.addDeclaration("apply-constructor"), [node.callee, args]);
|
||||
};
|
||||
|
||||
@@ -7,11 +7,12 @@
|
||||
"ConditionalExpression": ["test", "consequent", "alternate"],
|
||||
"ExpressionStatement": ["expression"],
|
||||
"File": ["program", "comments", "tokens"],
|
||||
"FunctionExpression": ["id", "params", "body"],
|
||||
"FunctionExpression": ["id", "params", "body", "generator"],
|
||||
"Identifier": ["name"],
|
||||
"IfStatement": ["test", "consequent", "alternate"],
|
||||
"Literal": ["value"],
|
||||
"MemberExpression": ["object", "property", "computed"],
|
||||
"NewExpression": ["callee", "arguments"],
|
||||
"ObjectExpression": ["properties"],
|
||||
"ParenthesizedExpression": ["expression"],
|
||||
"Program": ["body"],
|
||||
|
||||
@@ -244,7 +244,7 @@ exports.parse = function (opts, code, callback) {
|
||||
}
|
||||
};
|
||||
|
||||
exports.parseNoProperties = function (loc, code) {
|
||||
exports.parseTemplate = function (loc, code) {
|
||||
var ast = exports.parse({ filename: loc }, code).program;
|
||||
return traverse.removeProperties(ast);
|
||||
};
|
||||
@@ -266,7 +266,7 @@ var loadTemplates = function () {
|
||||
var loc = templatesLoc + "/" + name;
|
||||
var code = fs.readFileSync(loc, "utf8");
|
||||
|
||||
templates[key] = exports.parseNoProperties(loc, code);
|
||||
templates[key] = exports.parseTemplate(loc, code);
|
||||
});
|
||||
|
||||
return templates;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "6to5",
|
||||
"description": "Turn ES6 code into readable vanilla ES5 with source maps",
|
||||
"version": "1.12.2",
|
||||
"version": "1.12.3",
|
||||
"author": "Sebastian McKenzie <sebmck@gmail.com>",
|
||||
"homepage": "https://github.com/6to5/6to5",
|
||||
"repository": {
|
||||
@@ -44,7 +44,7 @@
|
||||
"es6-symbol": "0.1.1",
|
||||
"regexpu": "0.3.0",
|
||||
"source-map": "0.1.40",
|
||||
"regenerator-6to5": "https://github.com/6to5/regenerator-6to5/archive/62d1bfcb331dcf0bbcdbbee8043da0c6408f09cf.tar.gz",
|
||||
"regenerator-6to5": "https://github.com/6to5/regenerator-6to5/archive/75925940a7bb67d1ee8afec36b6d6eec072fb47c.tar.gz",
|
||||
"chokidar": "0.10.5",
|
||||
"source-map-support": "0.2.8",
|
||||
"esutils": "1.1.4",
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
var _classProps = function (child, staticProps, instanceProps) {
|
||||
if (staticProps) Object.defineProperties(child, staticProps);
|
||||
|
||||
@@ -26,11 +25,11 @@ var Test = (function (Foo) {
|
||||
Foo.prototype.test.call(this);
|
||||
foob(Foo);
|
||||
|
||||
Foo.call.apply(Foo, [this].concat(_slice.call(arguments)));
|
||||
Foo.call.apply(Foo, [this, "test"].concat(_slice.call(arguments)));
|
||||
Foo.call.apply(Foo, [this].concat(Array.from(arguments)));
|
||||
Foo.call.apply(Foo, [this, "test"].concat(Array.from(arguments)));
|
||||
|
||||
Foo.prototype.test.call.apply(Foo.prototype, [this].concat(_slice.call(arguments)));
|
||||
Foo.prototype.test.call.apply(Foo.prototype, [this, "test"].concat(_slice.call(arguments)));
|
||||
Foo.prototype.test.call.apply(Foo.prototype, [this].concat(Array.from(arguments)));
|
||||
Foo.prototype.test.call.apply(Foo.prototype, [this, "test"].concat(Array.from(arguments)));
|
||||
};
|
||||
|
||||
_extends(Test, Foo);
|
||||
@@ -40,8 +39,8 @@ var Test = (function (Foo) {
|
||||
writable: true,
|
||||
value: function () {
|
||||
Foo.foo.call(this);
|
||||
Foo.foo.call.apply(Foo.foo, [this].concat(_slice.call(arguments)));
|
||||
Foo.foo.call.apply(Foo.foo, [this, "test"].concat(_slice.call(arguments)));
|
||||
Foo.foo.call.apply(Foo.foo, [this].concat(Array.from(arguments)));
|
||||
Foo.foo.call.apply(Foo.foo, [this, "test"].concat(Array.from(arguments)));
|
||||
}
|
||||
}
|
||||
}, {
|
||||
@@ -49,8 +48,8 @@ var Test = (function (Foo) {
|
||||
writable: true,
|
||||
value: function () {
|
||||
Foo.prototype.test.call(this);
|
||||
Foo.prototype.test.call.apply(Foo.prototype.test, [this].concat(_slice.call(arguments)));
|
||||
Foo.prototype.test.call.apply(Foo.prototype.test, [this, "test"].concat(_slice.call(arguments)));
|
||||
Foo.prototype.test.call.apply(Foo.prototype.test, [this].concat(Array.from(arguments)));
|
||||
Foo.prototype.test.call.apply(Foo.prototype.test, [this, "test"].concat(Array.from(arguments)));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
6
test/fixtures/transformation/generator-comprehension/simple/exec.js
vendored
Normal file
6
test/fixtures/transformation/generator-comprehension/simple/exec.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
var nums = [1, 2, 3, 4, 5, 6];
|
||||
var multiples = (for (i of nums) if (i % 2) i * i);
|
||||
assert.equal(multiples.next().value, 1);
|
||||
assert.equal(multiples.next().value, 9);
|
||||
assert.equal(multiples.next().value, 25);
|
||||
assert.ok(multiples.next().done);
|
||||
@@ -3,4 +3,4 @@
|
||||
var _slice = Array.prototype.slice;
|
||||
var concat = function () {
|
||||
var arrs = _slice.call(arguments);
|
||||
};
|
||||
};
|
||||
|
||||
@@ -7,4 +7,4 @@ var t = function (f) {
|
||||
|
||||
function t(f) {
|
||||
var items = _slice.call(arguments, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,4 +7,4 @@ var t = function () {
|
||||
|
||||
function t() {
|
||||
var items = _slice.call(arguments);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
function foo() {
|
||||
return bar.apply(null, ["test"].concat(_slice.call(arguments)));
|
||||
return bar.apply(null, ["test"].concat(Array.from(arguments)));
|
||||
}
|
||||
|
||||
function bar(one, two, three) {
|
||||
return [one, two, three];
|
||||
}
|
||||
|
||||
foo("foo", "bar");
|
||||
foo("foo", "bar");
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
var lyrics = _slice.call(parts).concat(["head", "and", "toes"]);
|
||||
var lyrics = Array.from(parts).concat(["head", "and", "toes"]);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
var a = [b].concat(_slice.call(c), [d]);
|
||||
var a = [b].concat(Array.from(c), [d]);
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
var a = [b].concat(_slice.call(c), [d, e], _slice.call(f));
|
||||
var a = [b].concat(Array.from(c), [d, e], Array.from(f));
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
var lyrics = ["head", "and", "toes"].concat(_slice.call(parts));
|
||||
var lyrics = ["head", "and", "toes"].concat(Array.from(parts));
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
obj[method].apply(obj, [foo, bar].concat(_slice.call(args)));
|
||||
obj[method].apply(obj, [foo, bar].concat(Array.from(args)));
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
obj[method].apply(obj, _slice.call(args));
|
||||
obj[method].apply(obj, Array.from(args));
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
foob.add.apply(foob, [foo, bar].concat(_slice.call(numbers)));
|
||||
foob.test.add.apply(foob.test, [foo, bar].concat(_slice.call(numbers)));
|
||||
foob.add.apply(foob, [foo, bar].concat(Array.from(numbers)));
|
||||
foob.test.add.apply(foob.test, [foo, bar].concat(Array.from(numbers)));
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
foob.add.apply(foob, _slice.call(numbers));
|
||||
foob.test.add.apply(foob.test, _slice.call(numbers));
|
||||
foob.add.apply(foob, Array.from(numbers));
|
||||
foob.test.add.apply(foob.test, Array.from(numbers));
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
add.apply(null, _slice.call(numbers).concat([foo, bar]));
|
||||
add.apply(null, Array.from(numbers).concat([foo, bar]));
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
add.apply(null, [foo].concat(_slice.call(numbers), [bar]));
|
||||
add.apply(null, [foo].concat(Array.from(numbers), [bar]));
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
add.apply(null, [foo, bar].concat(_slice.call(numbers)));
|
||||
add.apply(null, [foo, bar].concat(Array.from(numbers)));
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
add.apply(null, [foo].concat(_slice.call(numbers), [bar, what], _slice.call(test)));
|
||||
add.apply(null, [foo].concat(Array.from(numbers), [bar, what], Array.from(test)));
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
var _slice = Array.prototype.slice;
|
||||
add.apply(null, _slice.call(numbers));
|
||||
add.apply(null, Array.from(numbers));
|
||||
|
||||
2
test/fixtures/transformation/spread/new-expression/actual.js
vendored
Normal file
2
test/fixtures/transformation/spread/new-expression/actual.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
new Numbers(...nums);
|
||||
new Numbers(1, ...nums);
|
||||
12
test/fixtures/transformation/spread/new-expression/expected.js
vendored
Normal file
12
test/fixtures/transformation/spread/new-expression/expected.js
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
"use strict";
|
||||
|
||||
var _applyConstructor = function (Constructor, args) {
|
||||
var bindArgs = [null].concat(args);
|
||||
|
||||
var Factory = Constructor.bind.apply(Constructor, bindArgs);
|
||||
|
||||
return new Factory();
|
||||
};
|
||||
|
||||
_applyConstructor(Numbers, Array.from(nums));
|
||||
_applyConstructor(Numbers, [1].concat(Array.from(nums)));
|
||||
Reference in New Issue
Block a user