Compare commits

...

41 Commits

Author SHA1 Message Date
Sebastian McKenzie
279d1affea v2.7.1 2015-01-07 14:15:16 +11:00
Sebastian McKenzie
2a1e012240 upgrade core-js 2015-01-07 14:12:21 +11:00
Sebastian McKenzie
a307a961a6 add istanbul to travis test 2015-01-07 14:10:47 +11:00
Sebastian McKenzie
fe5b1dc542 add reactCompat default to file opts 2015-01-07 14:10:37 +11:00
Sebastian McKenzie
f057347ae9 add version to browser and node build 2015-01-07 14:10:27 +11:00
Sebastian McKenzie
98f2287267 v2.7.0 2015-01-07 14:01:44 +11:00
Sebastian McKenzie
e60e0e0b0e disable timeout on test262 tests 2015-01-07 13:58:47 +11:00
Sebastian McKenzie
81fb8647b6 fixing linting errors 2015-01-07 13:58:41 +11:00
Sebastian McKenzie
e8387c7de5 add 2.7.0 changelog 2015-01-07 13:57:04 +11:00
Sebastian McKenzie
655196f3ce Merge pull request #410 from amasad/master
Add support for React pre v0.12 transform
2015-01-07 13:54:23 +11:00
Amjad Masad
eef371c3df Add support for React pre v0.12 transform
This uses an option `reactCompat` to emit code that works with React pre v0.12
2015-01-06 21:49:35 -05:00
Sebastian McKenzie
a3d21f02c6 just call mocha instead of test-simple 2015-01-07 13:44:05 +11:00
Sebastian McKenzie
ad4386c0ed make test-travis use test-simple and remove test-spec task 2015-01-07 13:33:31 +11:00
Sebastian McKenzie
3c82a61af1 better lazy error description test262 2015-01-07 13:33:19 +11:00
Sebastian McKenzie
3c154f9f6d better test262 test aliases 2015-01-07 13:19:53 +11:00
Sebastian McKenzie
22c972e85b add bootstrap to travis test 2015-01-07 13:14:45 +11:00
Sebastian McKenzie
6d7e14fb2b fix test262 loc check 2015-01-07 13:14:08 +11:00
Sebastian McKenzie
9287449372 add test-all make command 2015-01-07 13:11:25 +11:00
Sebastian McKenzie
44a35400f5 better output messages for missing vendors 2015-01-07 13:10:12 +11:00
Sebastian McKenzie
2305e2447f fix hasOwnProperty object lookup conflict 2015-01-07 13:08:20 +11:00
Sebastian McKenzie
c420d1ffc3 add test262 2015-01-07 13:08:06 +11:00
Sebastian McKenzie
fa42b076a7 remove benchmarks 2015-01-07 11:47:09 +11:00
Sebastian McKenzie
0d23c1cfdb add todo for module collisions 2015-01-07 09:56:17 +11:00
Sebastian McKenzie
0dafdd6969 better support for import collision checking - todo: check exports for collisions 2015-01-07 09:08:34 +11:00
Sebastian McKenzie
a9af8d39a2 add member expression reassign test 2015-01-07 08:00:55 +11:00
Sebastian McKenzie
1cc606d4d0 make import reassignment illegal @eventualbuddha 2015-01-07 07:58:04 +11:00
Sebastian McKenzie
2a09c0a5a5 fix import specifier and export specifier keys 2015-01-07 07:57:36 +11:00
Sebastian McKenzie
92359520cd Merge pull request #379 from webpro/amd-port-interop
Port AMD interop
2015-01-07 07:52:44 +11:00
Lars Kappert
50e5bd4680 Merge remote-tracking branch 'origin/master' into amd-port-interop
Conflicts:
	test/fixtures/transformation/es6-modules-amd/exports-default/expected.js
	test/fixtures/transformation/es6-modules-amd/overview/expected.js
	test/fixtures/transformation/es6-modules-umd/exports-default/expected.js
	test/fixtures/transformation/es6-modules-umd/overview/expected.js
2015-01-06 20:21:00 +01:00
Lars Kappert
dfa51954b8 Use unaryExpression for typeof 2015-01-06 10:12:08 +01:00
Lars Kappert
216b8c2fd1 Revert "Add types.TypeOfExpression"
This reverts commit 520dd7e947.
2015-01-06 10:05:44 +01:00
Lars Kappert
abc90778e8 Test for exportIdentifier before building exportDeclaration 2015-01-05 21:17:12 +01:00
Lars Kappert
56f1683f06 Also test for "module" identifier if needed 2015-01-05 14:57:52 +01:00
Lars Kappert
520dd7e947 Add types.TypeOfExpression 2015-01-05 14:51:50 +01:00
Lars Kappert
17ce21509d Move exports identifier from UMD template to commonArgs 2015-01-04 12:59:25 +01:00
Lars Kappert
a4c8895dc3 Conditionally pass "module" arg to AMD/UMD factory 2015-01-04 12:58:52 +01:00
Lars Kappert
af4009694a Simplify AMD export declaration fn to re-use CommonJS one 2015-01-04 12:53:17 +01:00
Lars Kappert
941a8cc5ea Remove unused templates 2015-01-04 12:51:34 +01:00
Lars Kappert
359c4e8786 Use module.exports in expectations 2015-01-04 12:51:19 +01:00
Lars Kappert
7ac98c1532 Add custom export declaration fn for AMD modules 2015-01-04 11:46:28 +01:00
Lars Kappert
61c3e0a3de Modify test expectations 2015-01-04 11:45:09 +01:00
74 changed files with 413 additions and 416 deletions

3
.gitmodules vendored
View File

@@ -4,3 +4,6 @@
[submodule "vendor/regenerator"]
path = vendor/regenerator
url = https://github.com/facebook/regenerator
[submodule "vendor/test262"]
path = vendor/test262
url = https://github.com/tc39/test262

View File

@@ -11,6 +11,20 @@
_Note: Gaps between patch versions are faulty/broken releases._
## 2.7.1
* **New Feature**
* Expose `version` on browser and node API.
* **Internal**
* Upgrade `core-js` to 0.4.1
## 2.7.0
* **Spec Compliancy**
* Disallow reassignments of imports.
* **New Feature**
* `reactCompat` option to enable pre-v0.12 react components.
## 2.6.3
* **Bug Fix**

View File

@@ -6,7 +6,7 @@ MOCHA_CMD = node_modules/mocha/bin/_mocha
export NODE_ENV = test
.PHONY: clean test test-cov test-clean lint test-travis test-spec test-browser publish bench build bootstrap
.PHONY: clean test test-cov test-clean lint test-travis test-simple test-all test-browser publish build bootstrap
build:
mkdir -p dist
@@ -27,12 +27,8 @@ build:
clean:
rm -rf coverage templates.json test/tmp dist
bench:
npm install es6-transpiler traceur esnext es6now jstransform
node node_modules/matcha/bin/_matcha
lint:
$(JSHINT_CMD) --reporter node_modules/jshint-stylish/stylish.js lib bin benchmark/index.js
$(JSHINT_CMD) --reporter node_modules/jshint-stylish/stylish.js lib bin
test-clean:
rm -rf test/tmp
@@ -41,14 +37,23 @@ test: lint
$(MOCHA_CMD)
make test-clean
test-simple:
# excludes test262
export SIMPLE_6TO5_TESTS=1
make test
test-all:
# includes traceur, esnext, regenerator
export ALL_6TO5_TESTS=1
make test
test-cov:
export SIMPLE_6TO5_TESTS=1
rm -rf coverage
node $(ISTANBUL_CMD) $(MOCHA_CMD) --
test-spec:
node $(ISTANBUL_CMD) $(MOCHA_CMD) -- --reporter spec
test-travis: test-spec
test-travis: bootstrap
node $(ISTANBUL_CMD) $(MOCHA_CMD) --
if test -n "$$CODECLIMATE_REPO_TOKEN"; then codeclimate < coverage/lcov.info; fi
test-browser:

View File

@@ -1,99 +0,0 @@
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var obj = {};
var foo = "foo";
var bar = "bar";
// constants
const MULTIPLIER = 5;
// classes
class Foo {
constructor() {
this.foo = "bar";
}
}
class Bar extends Foo {
constructor() {
super();
}
// default parameters
go(foo = "bar", bar = "foo") {
}
// not supported by jstransform
//get foo() {
// return this._foo;
//}
//set foo(val) {
// this._foo = val + " foo!";
//}
}
// arrow functions
arr.map(x => x * x);
// block binding
for (let key in arr) {
let val = arr[key];
console.log(key, val);
}
// computed property names
obj = {
["foo" + bar]: "foobar"
};
// destructuring
var [a, [b], c, d] = ["hello", [", ", "junk"], ["world"]];
console.log(a + b + c);
// array comprehension
// [for (i of [1, 2, 3]) i * i]; // not supported by es6now
// for-of
for (var i of [1, 2, 3]) {
console.log(i * i);
}
// property method assignment
obj = {
foo() {
return "foobar";
},
get bar() {
return this._bar;
},
set bar(val) {
this._bar = val;
}
};
// property name shorthand
function f(x, y) {
return { x, y };
}
// rest parameters
function printList(name, ...items) {
console.log("list %s has the following items", name);
items.forEach(function (item) {
console.log(item);
});
}
// spread
function add(x, y) {
return x + y;
}
var numbers = [5, 10];
add(...numbers);
// template literals
var x = 5;
var y = 10;
console.log(`${x} + ${y} = ${x + y}`);

View File

@@ -1,168 +0,0 @@
Error.stackTraceLimit = Infinity;
var jsTrans = require("jstransform");
var traceur = require("traceur");
//var es6tr = require("es6-transpiler");
var es6now = require("es6now");
//var esnext = require("esnext");
var to5 = require("../lib/6to5");
//var uglify = require("uglify-js");
var matcha = require("matcha");
var path = require("path");
var fs = require("fs");
var _ = require("lodash");
var readResolve = function (filename) {
try {
filename = require.resolve(filename);
} catch (err) {
return null;
}
return fs.readFileSync(filename, "utf8");
};
var getVersion = function (name) {
return require(name + "/package.json").version;
};
var jsTransVisitors = [];
_.each([
"arrow-function-visitors", "class-visitors", "destructuring-visitors",
"object-concise-method-visitors", "object-short-notation-visitors",
"rest-param-visitors", "template-visitors"
], function (name) {
var mod = require("jstransform/visitors/es6-" + name);
jsTransVisitors = jsTransVisitors.concat(mod.visitorList);
});
var compilers = {
"6to5": {
version: getVersion(".."),
compile: function (code, filename) {
return to5.transform(code, { filename: filename }).code;
}
},
traceur: {
runtime: readResolve("traceur/bin/traceur-runtime.js"),
compile: function (code) {
return traceur.compile(code, {
modules: "commonjs",
experimental: true
});
}
},
/*esnext: {
runtime: readResolve("esnext/node_modules/regenerator/runtime.js") || readResolve("regenerator/runtime.js"),
compile: function (code) {
return esnext.compile(code).code;
}
},*/
es6now: {
runtime: readResolve("es6now/runtime/ES6.js"),
compile: function (code) {
return es6now.translate(code);
}
},
/*"es6-transpiler": {
compile: function (code) {
var result = es6tr.run({ src: code });
if (result.errors.length) throw new Error(result.join("; "));
return result.src;
}
},*/
jstransform: {
compile: function (code) {
return jsTrans.transform(jsTransVisitors, code).code;
}
}
};
// versions
//var uglifyTitle = "uglify v" + getVersion("uglify-js");
_.each(compilers, function (compiler, name) {
compiler.title = name + " v" + (compiler.version || getVersion(name));
});
//
var sizeBenchmark = function (code, loc, name, compiler) {
var log = function (output, title) {
title = [compiler.title].concat(title || []).join(" + ");
var text;
var color;
if (output.stack) {
text = "error";
color = "red";
} else {
var kilo = (output.length / 1024).toFixed(2);
text = kilo + "KB";
color = "cyan";
}
text = matcha.utils.color(matcha.utils.padBefore(text, 22), color);
console.log(text, matcha.utils.color("» " + title, "gray"));
if (output.stack) {
console.error(output.stack);
}
};
var go = function (getOutput, title) {
var code;
try {
code = getOutput();
} catch (err) {
log(err, title);
return;
}
log(code, title);
};
var output;
go(function () {
return output = compiler.compile(code, loc);
});
if (!output) return;
//go(function () {
// return uglify.minify(output, { fromString: true }).code;
//}, uglifyTitle);
};
//
_.each(fs.readdirSync(__dirname + "/fixtures"), function (name) {
var alias = path.basename(name, path.extname(name));
suite(alias, function () {
set("delay", 0);
var loc = __dirname + "/fixtures/" + name;
var code = fs.readFileSync(loc, "utf8");
before(function () {
_.each(compilers, function (compiler, name) {
sizeBenchmark(code, loc, name, compiler);
});
});
_.each(compilers, function (compiler) {
bench(compiler.title, function () {
compiler.compile(code, loc);
});
});
});
});

View File

@@ -1,5 +1,7 @@
var transform = module.exports = require("./transformation/transform");
transform.version = require("../../package").version;
transform.transform = transform;
transform.run = function (code, opts) {

View File

@@ -48,6 +48,7 @@ File.normaliseOptions = function (opts) {
_.defaults(opts, {
experimental: false,
reactCompat: false,
playground: false,
whitespace: true,
moduleIds: opts.amdModuleIds || false,

View File

@@ -3,6 +3,8 @@ var util = require("./util");
var fs = require("fs");
var _ = require("lodash");
exports.version = require("../../package").version;
exports.types = require("./types");
exports.runtime = require("./runtime-generator");

View File

@@ -9,7 +9,11 @@ function DefaultFormatter(file) {
this.file = file;
this.localExports = this.getLocalExports();
this.localImports = this.getLocalImports();
this.remapAssignments();
this.checkCollisions();
}
DefaultFormatter.prototype.getLocalExports = function () {
@@ -27,6 +31,53 @@ DefaultFormatter.prototype.getLocalExports = function () {
return localExports;
};
DefaultFormatter.prototype.getLocalImports = function () {
var localImports = {};
traverse(this.file.ast, {
enter: function (node) {
if (t.isImportDeclaration(node)) {
_.extend(localImports, t.getIds(node, true));
}
}
});
return localImports;
};
DefaultFormatter.prototype.checkCollisions = function () {
// todo: all check export collissions
var localImports = this.localImports;
var file = this.file;
var isLocalReference = function (node) {
return t.isIdentifier(node) && _.has(localImports, node.name) && localImports[node.name] !== node;
};
var check = function (node) {
if (isLocalReference(node)) {
throw file.errorWithNode(node, "Illegal assignment of module import");
}
};
traverse(file.ast, {
enter: function (node) {
if (t.isAssignmentExpression(node)) {
var left = node.left;
if (t.isMemberExpression(left)) {
while (left.object) left = left.object;
}
check(left);
} else if (t.isDeclaration(node)) {
_.each(t.getIds(node, true), check);
}
}
});
};
DefaultFormatter.prototype.remapExportAssignment = function (node) {
return t.assignmentExpression(
"=",

View File

@@ -1,6 +1,7 @@
module.exports = AMDFormatter;
var DefaultFormatter = require("./_default");
var CommonFormatter = require("./common");
var util = require("../../util");
var t = require("../../types");
var _ = require("lodash");
@@ -30,12 +31,15 @@ AMDFormatter.prototype.transform = function (ast) {
// build an array of module names
var names = [t.literal("exports")].concat(this.buildDependencyLiterals());
var names = [t.literal("exports")];
if (this.passModuleArg) names.push(t.literal("module"));
names = names.concat(this.buildDependencyLiterals());
names = t.arrayExpression(names);
// build up define container
var params = _.values(this.ids);
if (this.passModuleArg) params.unshift(t.identifier("module"));
params.unshift(t.identifier("exports"));
var container = t.functionExpression(null, params, t.blockStatement(body));
@@ -96,6 +100,14 @@ AMDFormatter.prototype.importSpecifier = function (specifier, node, nodes) {
]));
};
AMDFormatter.prototype.exportDeclaration = function (node) {
if (node.default) {
this.passModuleArg = true;
}
CommonFormatter.prototype.exportDeclaration.apply(this, arguments);
};
AMDFormatter.prototype.exportSpecifier = function (specifier, node, nodes) {
var self = this;
return this._exportSpecifier(function () {

View File

@@ -61,7 +61,7 @@ CommonJSFormatter.prototype.importDeclaration = function (node, nodes) {
};
CommonJSFormatter.prototype.exportDeclaration = function (node, nodes) {
if (node.default) {
if (node.default && !this.exportIdentifier) {
var declar = node.declaration;
var assign;

View File

@@ -25,22 +25,37 @@ UMDFormatter.prototype.transform = function (ast) {
// factory
var ids = _.values(this.ids);
var args = [t.identifier("exports")].concat(ids);
var args = [t.identifier("exports")];
if (this.passModuleArg) args.push(t.identifier("module"));
args = args.concat(ids);
var factory = t.functionExpression(null, args, t.blockStatement(body));
// runner
var defineArgs = [t.arrayExpression([t.literal("exports")].concat(names))];
var defineArgs = [t.literal("exports")];
if (this.passModuleArg) defineArgs.push(t.literal("module"));
defineArgs = defineArgs.concat(names);
defineArgs = [t.arrayExpression(defineArgs)];
// typeof exports !== "undefined" && typeof module !== "undefined"
var testExports = t.binaryExpression("!==", t.unaryExpression("typeof", t.identifier("exports"), true), t.literal("undefined")),
testModule = t.binaryExpression("!==", t.unaryExpression("typeof", t.identifier("module"), true), t.literal("undefined")),
commonTests = this.passModuleArg ? t.logicalExpression("&&", testExports, testModule) : testExports;
var commonArgs = [t.identifier("exports")];
if (this.passModuleArg) commonArgs.push(t.identifier("module"));
commonArgs = commonArgs.concat(names.map(function (name) {
return t.callExpression(t.identifier("require"), [name]);
}));
var moduleName = this.getModuleName();
if (moduleName) defineArgs.unshift(t.literal(moduleName));
var runner = util.template("umd-runner-body", {
AMD_ARGUMENTS: defineArgs,
COMMON_ARGUMENTS: names.map(function (name) {
return t.callExpression(t.identifier("require"), [name]);
})
COMMON_TEST: commonTests,
COMMON_ARGUMENTS: commonArgs
});
//

View File

@@ -1,7 +1,7 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(AMD_ARGUMENTS, factory);
} else if (typeof exports !== "undefined") {
factory(exports, COMMON_ARGUMENTS);
} else if (COMMON_TEST) {
factory(COMMON_ARGUMENTS);
}
});

View File

@@ -36,8 +36,13 @@ exports.XJSAttribute = {
}
};
var isTag = function(tagName) {
return (/^[a-z]|\-/).test(tagName);
};
exports.XJSOpeningElement = {
exit: function (node) {
exit: function (node, parent, file) {
var reactCompat = file.opts.reactCompat;
var tagExpr = node.name;
var args = [];
@@ -48,10 +53,12 @@ exports.XJSOpeningElement = {
tagName = tagExpr.value;
}
if (tagName && (/[a-z]/.exec(tagName[0]) || tagName.indexOf("-") >= 0)) {
args.push(t.literal(tagName));
} else {
args.push(tagExpr);
if (!reactCompat) {
if (tagName && isTag(tagName)) {
args.push(t.literal(tagName));
} else {
args.push(tagExpr);
}
}
var props = node.attributes;
@@ -96,8 +103,30 @@ exports.XJSOpeningElement = {
args.push(props);
tagExpr = t.memberExpression(t.identifier("React"), t.identifier("createElement"));
return t.callExpression(tagExpr, args);
if (reactCompat) {
if (tagName && isTag(tagName)) {
return t.callExpression(
t.memberExpression(
t.memberExpression(
t.identifier('React'),
t.identifier('DOM'),
false
),
tagExpr,
t.isLiteral(tagExpr)
),
args
);
} else {
return t.callExpression(
tagExpr,
args
);
}
} else {
tagExpr = t.memberExpression(t.identifier("React"), t.identifier("createElement"));
return t.callExpression(tagExpr, args);
}
}
};

View File

@@ -355,16 +355,24 @@ t.getIds = function (node, map, ignoreTypes) {
if (!id) continue;
if (_.contains(ignoreTypes, id.type)) continue;
var nodeKey = t.getIds.nodes[id.type];
var nodeKeys = t.getIds.nodes[id.type];
var arrKeys = t.getIds.arrays[id.type];
var i, key;
if (t.isIdentifier(id)) {
ids[id.name] = id;
} else if (nodeKey) {
if (id[nodeKey]) search.push(id[nodeKey]);
} else if (nodeKeys) {
for (i in nodeKeys) {
key = nodeKeys[i];
if (id[key]) {
search.push(id[key]);
break;
}
}
} else if (arrKeys) {
for (var i in arrKeys) {
var key = arrKeys[i];
for (i in arrKeys) {
key = arrKeys[i];
search = search.concat(id[key] || []);
}
}
@@ -375,15 +383,16 @@ t.getIds = function (node, map, ignoreTypes) {
};
t.getIds.nodes = {
AssignmentExpression: "left",
ImportSpecifier: "name",
ExportSpecifier: "name",
VariableDeclarator: "id",
FunctionDeclaration: "id",
ClassDeclaration: "id",
MemeberExpression: "object",
SpreadElement: "argument",
Property: "value"
AssignmentExpression: ["left"],
ImportBatchSpecifier: ["name"],
ImportSpecifier: ["name", "id"],
ExportSpecifier: ["name", "id"],
VariableDeclarator: ["id"],
FunctionDeclaration: ["id"],
ClassDeclaration: ["id"],
MemeberExpression: ["object"],
SpreadElement: ["argument"],
Property: ["value"]
};
t.getIds.arrays = {

View File

@@ -1,7 +1,7 @@
{
"name": "6to5",
"description": "Turn ES6 code into readable vanilla ES5 with source maps",
"version": "2.6.3",
"version": "2.7.1",
"author": "Sebastian McKenzie <sebmck@gmail.com>",
"homepage": "https://github.com/6to5/6to5",
"repository": {
@@ -43,7 +43,7 @@
"ast-types": "~0.6.1",
"chokidar": "0.11.1",
"commander": "2.5.0",
"core-js": "^0.4.0",
"core-js": "^0.4.1",
"estraverse": "1.8.0",
"esutils": "1.1.6",
"esvalid": "^1.1.0",

View File

@@ -1,17 +1,17 @@
define(["exports"], function (exports) {
define(["exports", "module"], function (exports, module) {
"use strict";
exports["default"] = foo;
exports["default"] = 42;
exports["default"] = {};
exports["default"] = [];
exports["default"] = foo;
exports["default"] = function () {};
module.exports = foo;
module.exports = 42;
module.exports = {};
module.exports = [];
module.exports = foo;
module.exports = function () {};
exports["default"] = function () {};
module.exports = function () {};
function foo() {}
var Foo = function Foo() {};
exports["default"] = Foo;
});
module.exports = Foo;
});

View File

@@ -1,2 +1,2 @@
import foo from "foo";
import {default as foo} from "foo";
import {default as foo2} from "foo";

View File

@@ -7,5 +7,5 @@ define(["exports", "foo"], function (exports, _foo) {
var foo = _interopRequire(_foo);
var foo = _interopRequire(_foo);
});
var foo2 = _interopRequire(_foo);
});

View File

@@ -1,4 +1,4 @@
import {bar} from "foo";
import {bar, baz} from "foo";
import {bar as baz} from "foo";
import {bar as baz, xyz} from "foo";
import {bar2, baz} from "foo";
import {bar as baz2} from "foo";
import {bar as baz3, xyz} from "foo";

View File

@@ -2,9 +2,9 @@ define(["exports", "foo"], function (exports, _foo) {
"use strict";
var bar = _foo.bar;
var bar = _foo.bar;
var bar2 = _foo.bar2;
var baz = _foo.baz;
var baz = _foo.bar;
var baz = _foo.bar;
var baz2 = _foo.bar;
var baz3 = _foo.bar;
var xyz = _foo.xyz;
});
});

View File

@@ -2,11 +2,11 @@ import "foo";
import "foo-bar";
import "./directory/foo-bar";
import foo from "foo";
import * as foo from "foo";
import * as foo2 from "foo";
import {bar} from "foo";
import {foo as bar} from "foo";
import {foo as bar2} from "foo";
export {test};
export var test = 5;
export var test2 = 5;
export default test;

View File

@@ -1,4 +1,4 @@
define(["exports", "foo", "foo-bar", "./directory/foo-bar"], function (exports, _foo, _fooBar, _directoryFooBar) {
define(["exports", "module", "foo", "foo-bar", "./directory/foo-bar"], function (exports, module, _foo, _fooBar, _directoryFooBar) {
"use strict";
var _interopRequire = function (obj) {
@@ -7,11 +7,11 @@ define(["exports", "foo", "foo-bar", "./directory/foo-bar"], function (exports,
var foo = _interopRequire(_foo);
var foo = _foo;
var foo2 = _foo;
var bar = _foo.bar;
var bar = _foo.foo;
var bar2 = _foo.foo;
exports.test = test;
var test = exports.test = 5;
var test2 = exports.test2 = 5;
exports["default"] = test;
});
module.exports = test;
});

View File

@@ -0,0 +1,2 @@
import { foo } from "foo";
var foo;

View File

@@ -0,0 +1,3 @@
{
"throws": "Illegal assignment of module import"
}

View File

@@ -0,0 +1,2 @@
import { foo } from "foo";
foo.bar = 1;

View File

@@ -0,0 +1,3 @@
{
"throws": "Illegal assignment of module import"
}

View File

@@ -0,0 +1,2 @@
import * as foo from "foo";
foo = 1;

View File

@@ -0,0 +1,3 @@
{
"throws": "Illegal assignment of module import"
}

View File

@@ -0,0 +1,2 @@
import * as foo from "foo";
var foo;

View File

@@ -0,0 +1,3 @@
{
"throws": "Illegal assignment of module import"
}

View File

@@ -0,0 +1,2 @@
import { foo as bar } from "foo";
var bar;

View File

@@ -0,0 +1,3 @@
{
"throws": "Illegal assignment of module import"
}

View File

@@ -0,0 +1,2 @@
import { foo as bar } from "foo";
bar = 1;

View File

@@ -0,0 +1,3 @@
{
"throws": "Illegal assignment of module import"
}

View File

@@ -0,0 +1,2 @@
import { foo } from "foo";
import { foo } from "bar";

View File

@@ -0,0 +1,3 @@
{
"throws": "Illegal assignment of module import"
}

View File

@@ -0,0 +1,2 @@
import { foo as bar } from "foo";
import { foo as bar } from "bar";

View File

@@ -0,0 +1,3 @@
{
"throws": "Illegal assignment of module import"
}

View File

@@ -0,0 +1,2 @@
import { foo } from "foo";
foo = 1;

View File

@@ -0,0 +1,3 @@
{
"throws": "Illegal assignment of module import"
}

View File

@@ -1,2 +1,2 @@
import foo from "foo";
import {default as foo} from "foo";
import {default as foo2} from "foo";

View File

@@ -6,4 +6,4 @@ var _interopRequire = function (obj) {
var foo = _interopRequire(require("foo"));
var foo = _interopRequire(require("foo"));
var foo2 = _interopRequire(require("foo"));

View File

@@ -1,4 +1,4 @@
import {bar} from "foo";
import {bar, baz} from "foo";
import {bar as baz} from "foo";
import {bar as baz, xyz} from "foo";
import {bar2, baz} from "foo";
import {bar as baz2} from "foo";
import {bar as baz3, xyz} from "foo";

View File

@@ -1,8 +1,8 @@
"use strict";
var bar = require("foo").bar;
var bar = require("foo").bar;
var bar2 = require("foo").bar2;
var baz = require("foo").baz;
var baz = require("foo").bar;
var baz = require("foo").bar;
var baz2 = require("foo").bar;
var baz3 = require("foo").bar;
var xyz = require("foo").xyz;

View File

@@ -2,9 +2,9 @@ import "foo";
import "foo-bar";
import "./directory/foo-bar";
import foo from "foo";
import * as foo from "foo";
import * as foo2 from "foo";
import {bar} from "foo";
import {foo as bar} from "foo";
import {foo as bar2} from "foo";
export {test};
export var test = 5;

View File

@@ -18,9 +18,9 @@ require("./directory/foo-bar");
var foo = _interopRequire(require("foo"));
var foo = _interopRequireWildcard(require("foo"));
var foo2 = _interopRequireWildcard(require("foo"));
var bar = require("foo").bar;
var bar = require("foo").foo;
var bar2 = require("foo").foo;
exports.test = test;
var test = exports.test = 5;

View File

@@ -1,2 +1,2 @@
import foo from "foo";
import {default as foo} from "foo";
import {default as foo2} from "foo";

View File

@@ -1,4 +1,4 @@
import {bar} from "foo";
import {bar, baz} from "foo";
import {bar as baz} from "foo";
import {bar as baz, xyz} from "foo";
import {bar2, baz} from "foo";
import {bar as baz2} from "foo";
import {bar as baz3, xyz} from "foo";

View File

@@ -2,11 +2,11 @@ import "foo";
import "foo-bar";
import "./directory/foo-bar";
import foo from "foo";
import * as foo from "foo";
import * as foo2 from "foo";
import {bar} from "foo";
import {foo as bar} from "foo";
import {foo as bar2} from "foo";
export {test};
export var test = 5;
export var test2 = 5;
export default test;

View File

@@ -1,3 +1,3 @@
"use strict";
var test = 5;
var test2 = 5;

View File

@@ -1,2 +1,2 @@
import foo from "foo";
import {default as foo} from "foo";
import {default as foo2} from "foo";

View File

@@ -1,12 +1,12 @@
System.register(["foo"], function (_export) {
"use strict";
var foo, foo;
var foo, foo2;
return {
setters: [function (_foo) {
foo = _foo["default"];
foo = _foo["default"];
foo2 = _foo["default"];
}],
execute: function () {}
};
});
});

View File

@@ -1,4 +1,4 @@
import {bar} from "foo";
import {bar, baz} from "foo";
import {bar as baz} from "foo";
import {bar as baz, xyz} from "foo";
import {bar2, baz} from "foo";
import {bar as baz2} from "foo";
import {bar as baz3, xyz} from "foo";

View File

@@ -1,16 +1,16 @@
System.register(["foo"], function (_export) {
"use strict";
var bar, bar, baz, baz, baz, xyz;
var bar, bar2, baz, baz2, baz3, xyz;
return {
setters: [function (_foo) {
bar = _foo.bar;
bar = _foo.bar;
bar2 = _foo.bar2;
baz = _foo.baz;
baz = _foo.bar;
baz = _foo.bar;
baz2 = _foo.bar;
baz3 = _foo.bar;
xyz = _foo.xyz;
}],
execute: function () {}
};
});
});

View File

@@ -2,11 +2,11 @@ import "foo";
import "foo-bar";
import "./directory/foo-bar";
import foo from "foo";
import * as foo from "foo";
import * as foo2 from "foo";
import {bar} from "foo";
import {foo as bar} from "foo";
import {foo as bar2} from "foo";
export {test};
export var test = 5;
export var test2 = 5;
export default test;

View File

@@ -1,19 +1,19 @@
System.register(["foo", "foo-bar", "./directory/foo-bar"], function (_export) {
"use strict";
var foo, foo, bar, bar, test;
var foo, foo2, bar, bar2, test2;
return {
setters: [function (_foo) {
foo = _foo["default"];
foo = _foo;
foo2 = _foo;
bar = _foo.bar;
bar = _foo.foo;
bar2 = _foo.foo;
}, function (_fooBar) {}, function (_directoryFooBar) {}],
execute: function () {
_export("test", test);
test = _export("test", 5);
test2 = _export("test2", 5);
_export("default", test);
}
};
});
});

View File

@@ -1,23 +1,23 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports"], factory);
} else if (typeof exports !== "undefined") {
factory(exports);
define(["exports", "module"], factory);
} else if (typeof exports !== "undefined" && typeof module !== "undefined") {
factory(exports, module);
}
})(function (exports) {
})(function (exports, module) {
"use strict";
exports["default"] = foo;
exports["default"] = 42;
exports["default"] = {};
exports["default"] = [];
exports["default"] = foo;
exports["default"] = function () {};
module.exports = foo;
module.exports = 42;
module.exports = {};
module.exports = [];
module.exports = foo;
module.exports = function () {};
exports["default"] = function () {};
module.exports = function () {};
function foo() {}
var Foo = function Foo() {};
exports["default"] = Foo;
});
module.exports = Foo;
});

View File

@@ -1,2 +1,2 @@
import foo from "foo";
import {default as foo} from "foo";
import {default as foo2} from "foo";

View File

@@ -13,5 +13,5 @@
var foo = _interopRequire(_foo);
var foo = _interopRequire(_foo);
});
var foo2 = _interopRequire(_foo);
});

View File

@@ -1,4 +1,4 @@
import {bar} from "foo";
import {bar, baz} from "foo";
import {bar as baz} from "foo";
import {bar as baz, xyz} from "foo";
import {bar2, baz} from "foo";
import {bar as baz2} from "foo";
import {bar as baz3, xyz} from "foo";

View File

@@ -8,9 +8,9 @@
"use strict";
var bar = _foo.bar;
var bar = _foo.bar;
var bar2 = _foo.bar2;
var baz = _foo.baz;
var baz = _foo.bar;
var baz = _foo.bar;
var baz2 = _foo.bar;
var baz3 = _foo.bar;
var xyz = _foo.xyz;
});
});

View File

@@ -2,11 +2,11 @@ import "foo";
import "foo-bar";
import "./directory/foo-bar";
import foo from "foo";
import * as foo from "foo";
import * as foo2 from "foo";
import {bar} from "foo";
import {foo as bar} from "foo";
import {foo as bar2} from "foo";
export {test};
export var test = 5;
export var test2 = 5;
export default test;

View File

@@ -1,10 +1,10 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "foo", "foo-bar", "./directory/foo-bar"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("foo"), require("foo-bar"), require("./directory/foo-bar"));
define(["exports", "module", "foo", "foo-bar", "./directory/foo-bar"], factory);
} else if (typeof exports !== "undefined" && typeof module !== "undefined") {
factory(exports, module, require("foo"), require("foo-bar"), require("./directory/foo-bar"));
}
})(function (exports, _foo, _fooBar, _directoryFooBar) {
})(function (exports, module, _foo, _fooBar, _directoryFooBar) {
"use strict";
var _interopRequire = function (obj) {
@@ -13,11 +13,11 @@
var foo = _interopRequire(_foo);
var foo = _foo;
var foo2 = _foo;
var bar = _foo.bar;
var bar = _foo.foo;
var bar2 = _foo.foo;
exports.test = test;
var test = exports.test = 5;
var test2 = exports.test2 = 5;
exports["default"] = test;
});
module.exports = test;
});

View File

@@ -0,0 +1,3 @@
var x = <Component foo="bar">
<Namespace.Component />
</Component>

View File

@@ -0,0 +1,3 @@
var x = Component({
foo: "bar"
}, Namespace.Component(null));

View File

@@ -0,0 +1,3 @@
{
"reactCompat": true
}

View File

@@ -0,0 +1 @@
var x = <div foo="bar"><font-face></font-face></div>;

View File

@@ -0,0 +1,3 @@
var x = React.DOM.div({
foo: "bar"
}, React.DOM["font-face"](null));

View File

@@ -0,0 +1,3 @@
{
"reactCompat": true
}

View File

@@ -12,7 +12,7 @@ var _ = require("lodash");
var regeneratorLoc = __dirname + "/../vendor/regenerator";
if (!fs.existsSync(regeneratorLoc)) {
console.error("No vendor/regenerator - run `git submodule update --init && cd vendor/regenerator && npm install`");
console.error("No vendor/regenerator - run `make bootstrap`");
process.exit(1);
}

59
test/test262.js Normal file
View File

@@ -0,0 +1,59 @@
if (process.env.SIMPLE_6TO5_TESTS) return;
var transform = require("../lib/6to5/transformation/transform");
var readdir = require("fs-readdir-recursive");
var path = require("path");
var fs = require("fs");
var _ = require("lodash");
var test262Loc = __dirname + "/../vendor/test262";
if (!fs.existsSync(test262Loc)) {
console.error("No vendor/test262 - run `make bootstrap`");
process.exit(1);
}
var read = function (loc) {
return readdir(loc).map(function (filename) {
return path.join(loc, filename);
});
};
var exec = function (loc) {
try {
var file = fs.readFileSync(loc, "utf8");
// this normalises syntax and early runtime reference errors since they're
// both thrown as SyntaxErrors in acorn
// SyntaxError: var null;
// ReferenceError: 1++; (runtime)
var lazyError = /negative: (\S+)/.test(file);
var compiled = transform(file, {
filename: loc,
blacklist: ["useStrict"]
});
global.eval(compiled);
} catch (err) {
if (err && lazyError && err instanceof SyntaxError) {
return;
} else {
throw err;
}
}
};
// harness
var harness = read(test262Loc + "/harness");
_.each(harness, exec);
// tests!
var tests = read(test262Loc + "/test");
_.each(tests, function (loc) {
var alias = path.relative(test262Loc + "/test", loc);
alias = alias.replace(/\.([^\.]+)$/g, "");
test(alias, function () {
this.timeout(0);
exec(loc);
});
});

View File

@@ -5,7 +5,7 @@ var _ = require("lodash");
var traceurLoc = __dirname + "/../vendor/traceur";
if (!fs.existsSync(traceurLoc)) {
console.error("No vendor/traceur - run `git submodule update --init`");
console.error("No vendor/traceur - run `make bootstrap`");
process.exit(1);
}

1
vendor/test262 vendored Submodule

Submodule vendor/test262 added at d075338699