Compare commits

...

77 Commits

Author SHA1 Message Date
Sebastian McKenzie
3815913537 v1.12.18 2014-11-16 21:01:12 +11:00
Sebastian McKenzie
e5c18749f0 add changelog for 1.12.18 2014-11-16 21:00:00 +11:00
Sebastian McKenzie
b7458f949c Merge pull request #177 from josh/browser-global
Prefer module provided `global` rather than `window` reference
2014-11-16 20:58:12 +11:00
Sebastian McKenzie
69302b314f add sprockets-es6 to plugins 2014-11-16 20:55:56 +11:00
Joshua Peek
0c57a00fdb Check if attachEvent is defined 2014-11-16 01:41:56 -08:00
Joshua Peek
3bec8b0311 Prefer module global reference rather than window 2014-11-16 01:41:16 -08:00
Sebastian McKenzie
6a88e05362 v1.12.17 2014-11-16 19:29:25 +11:00
Sebastian McKenzie
e3bd2dff8d remove unused path variable 2014-11-16 19:27:49 +11:00
Sebastian McKenzie
ef82171254 update amd/umd modules documentation 2014-11-16 19:27:15 +11:00
Sebastian McKenzie
00d94fd810 update changelog with additional new options 2014-11-16 19:26:03 +11:00
Sebastian McKenzie
d929d3c5eb remove duplicate i variable from traverse 2014-11-16 19:24:58 +11:00
Sebastian McKenzie
5c1ee86b97 remove filenameRelative from bin/6to5* since it's unneccesary 2014-11-16 19:24:47 +11:00
Sebastian McKenzie
5409691a3a update umd and amd tests with new moduleName option 2014-11-16 19:22:37 +11:00
Sebastian McKenzie
24964ac454 add filenameRelative to bin/6to5* 2014-11-16 19:20:08 +11:00
Sebastian McKenzie
faa81ab85b add 1.12.17 changelog 2014-11-16 19:19:57 +11:00
Sebastian McKenzie
d4bc082bb9 add new filenameRelative, sourceRoot and moduleRoot option documentation 2014-11-16 19:19:46 +11:00
Sebastian McKenzie
3777af6bbd add filenameRelative default and make sourceFileName and sourceMapName inherit form it 2014-11-16 19:19:25 +11:00
Sebastian McKenzie
1f258e9e9c add sourceRoot to source map 2014-11-16 19:19:07 +11:00
Sebastian McKenzie
50333c879c add comments and change single quotes in amd formatter getModuleName 2014-11-16 19:18:56 +11:00
Sebastian McKenzie
105e6ac379 add filenameRelative to tests 2014-11-16 19:18:30 +11:00
Sebastian McKenzie
dadab64e39 Merge pull request #176 from darvelo/master
Generate moduleNames for AMD/UMD
2014-11-16 19:00:56 +11:00
Sebastian McKenzie
2b82f2bcc2 ignore unknown nodes in traversal 2014-11-16 18:52:54 +11:00
Sebastian McKenzie
f1183505b1 optimise traverse, improves traversal speed by 50% 2014-11-16 18:50:07 +11:00
Sebastian McKenzie
fa3b24e5b4 don't lazy set templates, can't even remember why i did this 2014-11-16 18:49:29 +11:00
Sebastian McKenzie
5789447068 add loc option to exec test 2014-11-16 18:48:32 +11:00
David Arvelo
f1f7321590 Generate moduleNames for AMD/UMD 2014-11-16 02:38:00 -05:00
Sebastian McKenzie
9ff4df6dae v1.12.16 2014-11-16 14:39:15 +11:00
Sebastian McKenzie
0dbb24c922 remove unused i variable in default parameters transformer 2014-11-16 14:37:26 +11:00
Sebastian McKenzie
a027d2b9cf add 1.12.16 changelog 2014-11-16 14:34:42 +11:00
Sebastian McKenzie
e290990371 scope: remove unused references instance property 2014-11-16 14:34:29 +11:00
Sebastian McKenzie
d0a2bd170e clean up constants transformer 2014-11-16 14:33:37 +11:00
Sebastian McKenzie
69db46f96b move down and clump constants and let scoping transformer positions 2014-11-16 14:33:29 +11:00
Sebastian McKenzie
27ba4b2bba scope: switch over declaration building to info so we can build multiple things 2014-11-16 14:33:16 +11:00
Sebastian McKenzie
b337c1ab06 test/transformation: use full location as filename 2014-11-16 14:32:40 +11:00
Sebastian McKenzie
a1895b4bb4 implement temporal dead zone for default parameters - fixes #169 2014-11-16 14:32:03 +11:00
Sebastian McKenzie
00483917f0 fix comments not being retained from MethodDefinition in classes 2014-11-16 11:30:05 +11:00
Sebastian McKenzie
d09bafaf8c Merge pull request #172 from thejameskyle/docs-whitespace
Add newline to keep marked from parsing incorrectly
2014-11-16 10:32:04 +11:00
James Kyle
a7ef02c781 Add newline to keep marked from parsing incorrectly 2014-11-15 15:31:16 -08:00
Sebastian McKenzie
94cd45c269 v1.12.15 2014-11-15 11:42:06 +11:00
Sebastian McKenzie
424bab97d0 update acorn-6to5 - fixes #165 2014-11-15 11:40:34 +11:00
Sebastian McKenzie
a1bdd804e2 v1.12.14 2014-11-15 11:30:37 +11:00
Sebastian McKenzie
10c051890b fix changelog version 2014-11-15 11:29:41 +11:00
Sebastian McKenzie
ac49d0a335 v1.12.4 2014-11-15 11:29:06 +11:00
Sebastian McKenzie
b56f1800e5 update regenerator-6to5 2014-11-15 11:27:29 +11:00
Sebastian McKenzie
49ef92c586 add changelog for v1.12.4 2014-11-15 11:23:42 +11:00
Sebastian McKenzie
542fe89123 fix up tests to work with new member expression keyword generator 2014-11-15 11:23:16 +11:00
Sebastian McKenzie
5b118c0c3f add _property-literals test 2014-11-15 11:13:10 +11:00
Sebastian McKenzie
8503916799 add _memberExpressionKeywords transformer that turns keyword identifiers to computed literals 2014-11-15 11:13:02 +11:00
Sebastian McKenzie
206c828a56 more react compliant whitespace - #165 2014-11-15 11:00:32 +11:00
Sebastian McKenzie
7a261a1db1 fix duplicate let scoping in functions - fixes #166 2014-11-15 09:47:48 +11:00
Sebastian McKenzie
c9d9a085f1 v1.12.13 2014-11-15 03:08:35 +11:00
Sebastian McKenzie
6d1953d9c3 fix constants transformer not accurately checking nodes 2014-11-15 03:07:33 +11:00
Sebastian McKenzie
92621d71c7 remove unused variable 2014-11-15 03:01:58 +11:00
Sebastian McKenzie
dc01731c25 add changelog for 1.12.13 2014-11-15 03:01:01 +11:00
Sebastian McKenzie
9fb8a80f60 support raw property on tagged template literals - closes #164 2014-11-15 03:00:53 +11:00
Sebastian McKenzie
85c2de57e4 fix for-head duplication testing and replacement - fixes #162 2014-11-15 02:50:05 +11:00
Sebastian McKenzie
58fac2e2be support duplicate constants within different block scopes - fixes #161 2014-11-15 02:49:49 +11:00
Sebastian McKenzie
682806f1ca instead of ignoring dot tests, add them as pending 2014-11-15 02:49:28 +11:00
Sebastian McKenzie
47c6f74251 v1.12.12 2014-11-14 23:15:14 +11:00
Sebastian McKenzie
37f360c72d make scope tracker more reliable to handle all edgecases 2014-11-14 23:13:58 +11:00
Sebastian McKenzie
e5a8c95b62 v1.12.11 2014-11-14 19:39:25 +11:00
Sebastian McKenzie
921d459f13 fix transformation let scoping hoisting test 2014-11-14 19:38:29 +11:00
Sebastian McKenzie
58898932e6 shift letScoping to before forOf transformer 2014-11-14 19:35:07 +11:00
Sebastian McKenzie
c7b45116c4 fix generation of integer Literals in MemberExpression 2014-11-14 19:34:54 +11:00
Sebastian McKenzie
32ddd638ba Revert "expose moduleName option - closes #158"
This reverts commit fdd1451d53.
2014-11-14 18:33:11 +11:00
Sebastian McKenzie
0eb3cda2d4 add 1.12.11 changelog 2014-11-14 17:20:05 +11:00
Sebastian McKenzie
2acb24d43d block scope classes 2014-11-14 17:19:46 +11:00
Sebastian McKenzie
fdd1451d53 expose moduleName option - closes #158 2014-11-14 17:19:39 +11:00
Sebastian McKenzie
43e2f121a6 remove nodes replacing in util.template 2014-11-14 09:28:23 +11:00
Sebastian McKenzie
297e55ba63 Revert "fix up types.toStatement and return an expressionStatement if all else fails"
This reverts commit 740193b1e2.
2014-11-14 09:28:04 +11:00
Sebastian McKenzie
38396dadd5 remove unused nodes.inherits in util.template 2014-11-14 09:15:29 +11:00
Sebastian McKenzie
f75f045026 turn custom runtime into a proper identifier 2014-11-14 09:15:00 +11:00
Sebastian McKenzie
740193b1e2 fix up types.toStatement and return an expressionStatement if all else fails 2014-11-14 09:14:49 +11:00
Sebastian McKenzie
b9fe1475c2 add basic api test 2014-11-14 09:13:00 +11:00
Sebastian McKenzie
6065220f9b add runtime test 2014-11-14 09:12:54 +11:00
Sebastian McKenzie
715884662e fix basic unicode-regex test 2014-11-14 09:12:49 +11:00
Sebastian McKenzie
11780c28ff add let scoping hoisting test 2014-11-14 09:12:38 +11:00
82 changed files with 673 additions and 272 deletions

View File

@@ -1,3 +1,43 @@
# 1.12.18
* Use `global` reference instead of `window`.
# 1.12.17
* Add `moduleName`, `sourceRoot` and `filenameRelative` options - thanks @darvelo!
* Traversal optimisations.
# 1.12.16
* Fix comments not being retained from `MethodDefinition` in classes.
* Add temporal dead zone in default parameters.
# 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.

View File

@@ -133,11 +133,13 @@ for (var i of [1, 2, 3]) {
## Generators
```javascript
```
## Generator comprehension
```javascript
```
## Let scoping
@@ -151,6 +153,7 @@ for (let i in arr) {
## Modules
```javascript
```
## Numeric literals

View File

@@ -66,7 +66,7 @@ export function bar() {
**Out**
```javascript
define(["exports", "foo"], function (exports, _foo) {
define("filename", ["exports", "foo"], function (exports, _foo) {
exports.bar = bar;
var foo = _foo.default;
@@ -94,7 +94,7 @@ export function bar() {
```javascript
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "foo"], factory);
define("filename", ["exports", "foo"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("foo"));
}
@@ -111,7 +111,6 @@ export function bar() {
### Ignore
**In**
```javascript

View File

@@ -11,5 +11,5 @@
- [Jest](https://github.com/6to5/6to5-jest)
- [Karma](https://github.com/shuhei/karma-6to5-preprocessor)
- [Mocha](https://github.com/6to5/6to5-mocha)
- [Rails](https://github.com/6to5/6to5-rails)
- [Rails](https://github.com/josh/sprockets-es6) or via [browserify-rails](https://github.com/6to5/6to5-rails)
- [webpack](https://github.com/Couto/6to5-loader)

View File

@@ -83,6 +83,10 @@ to5.transformFile("filename.js", options, function (err, result) {
// Default: "unknown"
filename: "filename",
// Filename relative to `sourceRoot`
// Default: `filename` option.
filenameRelative: "",
// List of transformers to EXCLUDE.
// Run `6to5 --help` to see a full list of transformers.
blacklist: [],
@@ -103,13 +107,20 @@ to5.transformFile("filename.js", options, function (err, result) {
sourceMap: true,
// Set `file` on returned source map.
// Default: `filename` option.
// Default: `filenameRelative` option.
sourceMapName: "filename",
// Set `sources[0]` on returned source map.
// Default: `filename` option.
// Default: `filenameRelative` option.
sourceFileName: "filename",
// The root from which all sources are relative
sourceRoot: "assets/scripts",
// Optional prefix for the AMD module formatter that will be prepend to the
// filename on module definitions
moduleRoot: "my-app",
// Optionally replace all 6to5 helper declarations with a referenece to this
// variable. If set to `true` then the default namespace is used "to5Runtime".
// Default: false

View File

@@ -12,7 +12,7 @@ transform.load = function (url, callback, opts, hold) {
opts = opts || {};
opts.filename = opts.filename || url;
var xhr = window.ActiveXObject ? new window.ActiveXObject("Microsoft.XMLHTTP") : new window.XMLHttpRequest();
var xhr = global.ActiveXObject ? new global.ActiveXObject("Microsoft.XMLHTTP") : new global.XMLHttpRequest();
xhr.open("GET", url, true);
if ("overrideMimeType" in xhr) xhr.overrideMimeType("text/plain");
@@ -60,7 +60,7 @@ var runScripts = function () {
}
};
var _scripts = window.document.getElementsByTagName("script");
var _scripts = global.document.getElementsByTagName("script");
for (var i in _scripts) {
var _script = _scripts[i];
if (types.indexOf(_script.type) >= 0) scripts.push(_script);
@@ -73,8 +73,8 @@ var runScripts = function () {
exec();
};
if (window.addEventListener) {
window.addEventListener("DOMContentLoaded", runScripts, false);
} else {
window.attachEvent("onload", runScripts);
if (global.addEventListener) {
global.addEventListener("DOMContentLoaded", runScripts, false);
} else if (global.attachEvent) {
global.attachEvent("onload", runScripts);
}

View File

@@ -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 || {});
@@ -38,8 +39,12 @@ File.normaliseOptions = function (opts) {
opts.filename = opts.filename.replace(/\\/g, "/");
_.defaults(opts, {
sourceFileName: opts.filename,
sourceMapName: opts.filename
filenameRelative: opts.filename
});
_.defaults(opts, {
sourceFileName: opts.filenameRelative,
sourceMapName: opts.filenameRelative
});
if (opts.runtime === true) {

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -9,7 +9,8 @@ function SourceMap(position, opts, code) {
if (opts.sourceMap) {
this.map = new sourceMap.SourceMapGenerator({
file: opts.sourceMapName
file: opts.sourceMapName,
sourceRoot: opts.sourceRoot
});
this.map.setSourceContent(opts.sourceFileName, code);

View File

@@ -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));

View File

@@ -0,0 +1,4 @@
(function (strings, raw) {
return Object.defineProperties(strings, { raw: { value: raw } });
});

View File

@@ -29,12 +29,41 @@ AMDFormatter.prototype.transform = function (ast) {
var params = _.values(this.ids);
params.unshift(t.identifier("exports"));
var moduleName = this.getModuleName();
var container = t.functionExpression(null, params, t.blockStatement(body));
var call = t.callExpression(t.identifier("define"), [names, container]);
var call = t.callExpression(t.identifier("define"), [t.literal(moduleName), names, container]);
program.body = [t.expressionStatement(call)];
};
AMDFormatter.prototype.getModuleName = function () {
var opts = this.file.opts;
var filenameRelative = opts.filenameRelative;
var moduleName = "";
if (opts.moduleRoot) {
moduleName = opts.moduleRoot + "/";
}
if (!opts.filenameRelative) {
return moduleName + opts.filename.replace(/^\//, "");
}
if (opts.sourceRoot) {
// remove sourceRoot from filename
var sourceRootRegEx = new RegExp("^" + opts.sourceRoot + "\/?");
filenameRelative = filenameRelative.replace(sourceRootRegEx, "");
}
// remove extension
filenameRelative = filenameRelative.replace(/\.(.*?)$/, "");
moduleName += filenameRelative;
return moduleName;
};
AMDFormatter.prototype._push = function (node) {
var id = node.source.value;
var ids = this.ids;

View File

@@ -32,8 +32,10 @@ UMDFormatter.prototype.transform = function (ast) {
// runner
var moduleName = this.getModuleName();
var runner = util.template("umd-runner-body", {
AMD_ARGUMENTS: t.arrayExpression([t.literal("exports")].concat(names)),
AMD_ARGUMENTS: [t.literal(moduleName), t.arrayExpression([t.literal("exports")].concat(names))],
COMMON_ARGUMENTS: names.map(function (name) {
return t.callExpression(t.identifier("require"), [name]);

View File

@@ -27,37 +27,39 @@ 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"),
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"),
unicodeRegex: require("./transformers/unicode-regex"),
react: require("./transformers/react"),
constants: require("./transformers/constants"),
letScoping: require("./transformers/let-scoping"),
_aliasFunctions: require("./transformers/_alias-functions"),
_blockHoist: require("./transformers/_block-hoist"),
_declarations: require("./transformers/_declarations"),
react: require("./transformers/react"),
generators: require("./transformers/generators"),
useStrict: require("./transformers/use-strict"),
_aliasFunctions: require("./transformers/_alias-functions"),
_blockHoist: require("./transformers/_block-hoist"),
_declarations: require("./transformers/_declarations"),
_moduleFormatter: require("./transformers/_module-formatter")
generators: require("./transformers/generators"),
useStrict: require("./transformers/use-strict"),
_memberExpressionKeywords: require("./transformers/_member-expression-keywords"),
_moduleFormatter: require("./transformers/_module-formatter")
}, function (transformer, key) {
transform.transformers[key] = new Transformer(key, transformer);
});

View File

@@ -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;
}
};

View File

@@ -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())
]);
};
@@ -254,6 +254,7 @@ Class.prototype.pushConstructor = function (method) {
this.hasConstructor = true;
t.inherits(construct, fn);
t.inheritsComments(construct, method);
construct.defaults = fn.defaults;
construct.params = fn.params;

View File

@@ -7,26 +7,30 @@ exports.BlockStatement =
exports.ForInStatement =
exports.ForOfStatement =
exports.ForStatement = function (node, parent, file) {
var constants = [];
var constants = {};
var check = function (node, names) {
_.each(names, function (name) {
if (constants.indexOf(name) >= 0) {
throw file.errorWithNode(node, name + " is read-only");
}
var check = function (parent, names) {
_.each(names, function (nameNode, name) {
if (!_.has(constants, name)) return;
if (parent && t.isBlockStatement(parent) && parent !== constants[name]) return;
throw file.errorWithNode(nameNode, name + " is read-only");
});
};
var getIds = function (node) {
return t.getIds(node, false, ["MemberExpression"]);
return t.getIds(node, true, ["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);
_.each(getIds(declar), function (nameNode, name) {
var names = {};
names[name] = nameNode;
check(parent, names);
constants[name] = parent;
});
declar._ignoreConstant = true;
@@ -37,13 +41,14 @@ 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.isVariableDeclaration(child)) return;
if (t.isVariableDeclarator(child) || t.isDeclaration(child) || t.isAssignmentExpression(child)) {
check(child, getIds(child));
check(parent, getIds(child));
}
});
};

View File

@@ -1,21 +1,70 @@
var util = require("../../util");
var t = require("../../types");
var _ = require("lodash");
var traverse = require("../../traverse");
var util = require("../../util");
var t = require("../../types");
var _ = require("lodash");
exports.Function = function (node) {
exports.Function = function (node, parent, file, scope) {
if (!node.defaults || !node.defaults.length) return;
t.ensureBlock(node);
var ids = node.params.map(function (param) {
return t.getIds(param);
});
var closure = false;
_.each(node.defaults, function (def, i) {
if (!def) return;
var param = node.params[i];
node.body.body.unshift(util.template("if-undefined-set-to", {
VARIABLE: param,
DEFAULT: def
// temporal dead zone check - here we prevent accessing of params that
// are to the right - ie. uninitialized parameters
_.each(ids.slice(i), function (ids) {
var check = function (node, parent) {
if (!t.isIdentifier(node) || !t.isReferenced(node, parent)) return;
if (_.contains(ids, node.name)) {
throw file.errorWithNode(node, "Temporal dead zone - accessing a variable before it's initialized");
}
if (scope.has(node.name)) {
closure = true;
}
};
check(def, node);
traverse(def, check);
});
// we're accessing a variable that's already defined within this function
var has = scope.get(param.name);
if (has && !_.contains(node.params, has)) {
closure = true;
}
});
var body = [];
_.each(node.defaults, function (def, i) {
if (!def) return;
body.push(util.template("if-undefined-set-to", {
VARIABLE: node.params[i],
DEFAULT: def
}, true));
});
if (closure) {
var container = t.functionExpression(null, [], node.body, node.generator);
container._aliasFunction = true;
body.push(t.returnStatement(t.callExpression(container, [])));
node.body = t.blockStatement(body);
} else {
node.body.body = body.concat(node.body.body);
}
node.defaults = [];
};

View File

@@ -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);
});
});

View File

@@ -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);
});

View File

@@ -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);

View File

@@ -29,25 +29,32 @@ function traverse(parent, callbacks, opts) {
// normalise callbacks
if (_.isFunction(callbacks)) callbacks = { enter: callbacks };
_.each(keys, function (key) {
for (var i in keys) {
var key = keys[i];
var nodes = parent[key];
if (!nodes) return;
if (!nodes) continue;
var updated = false;
var handle = function (obj, key) {
var node = obj[key];
if (!node) return;
// type is blacklisted
if (_.contains(blacklistTypes, node.type)) return;
if (blacklistTypes.indexOf(node.type) > -1) return;
// replace node
var maybeReplace = function (result) {
if (result === false) return;
if (result != null) node = obj[key] = result;
if (result != null) {
updated = true;
node = obj[key] = result;
}
};
//
var opts2 = _.clone(opts);
var opts2 = { scope: opts.scope, blacklist: opts.blacklist };
if (t.isScope(node)) opts2.scope = new Scope(opts.scope, node);
// enter
@@ -69,15 +76,15 @@ function traverse(parent, callbacks, opts) {
};
if (_.isArray(nodes)) {
_.each(nodes, function (node, i) {
for (i in nodes) {
handle(nodes, i);
});
}
parent[key] = _.flatten(parent[key]);
if (updated) parent[key] = _.flatten(parent[key]);
} else {
handle(parent, key);
}
});
}
}
traverse.removeProperties = function (tree) {

View File

@@ -4,54 +4,93 @@ 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;
this.ids = this.getIds();
this.getIds();
this.info = this.getInfo();
this.declarations = this.info.declarations;
}
Scope.prototype.getIds = function () {
Scope.prototype.getInfo = function () {
var block = this.block;
if (block._scopeIds) return block._scopeIds;
if (block._scope) return block._scope;
var self = this;
var ids = block._scopeIds = {};
var info = block._scope = {
declarations: {}
};
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;
}
var add = function (node) {
self.addDeclaration(node, info.declarations);
};
if (t.isDeclaration(node)) {
self.add(node, ids);
} else if (t.isFunction(node)) {
return false;
}
// ForStatement - left, init
if (t.isFor(block)) {
_.each(FOR_KEYS, function (key) {
var node = block[key];
if (t.isLet(node)) add(node);
});
} else if (t.isCatchClause(block)) {
self.add(block.param, ids);
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)) add(node);
});
}
// CatchClause - param
if (t.isCatchClause(block)) {
add(block.param);
}
// 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)) add(declar);
});
}
// 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)) {
add(node);
}
});
}
// Function - params, rest
if (t.isFunction(block)) {
add(block.rest);
_.each(block.params, function (param) {
self.add(param, ids);
add(param);
});
}
return ids;
return info;
};
Scope.prototype.add = function (node, ids) {
_.merge(ids || this.ids, t.getIds(node, true));
Scope.prototype.addDeclaration = function (node, declarations) {
if (!node) return;
_.merge(declarations || this.declarations, t.getIds(node, true));
};
Scope.prototype.get = function (id) {
@@ -59,7 +98,7 @@ Scope.prototype.get = function (id) {
};
Scope.prototype.getOwn = function (id) {
return _.has(this.ids, id) && this.ids[id];
return _.has(this.declarations, id) && this.declarations[id];
};
Scope.prototype.parentGet = function (id) {

View File

@@ -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"],

View File

@@ -70,6 +70,9 @@ t.isReferenced = function (node, parent) {
// we're a property key so we aren't referenced
if (t.isProperty(parent) && parent.key === node) return false;
// we're a variable declarator id so we aren't referenced
if (t.isVariableDeclarator(parent) && parent.id === node) return false;
var isMemberExpression = t.isMemberExpression(parent);
// we're in a member expression and we're the computed property so we're referenced
@@ -161,7 +164,7 @@ t.toBlock = function (node, parent) {
t.getIds = function (node, map, ignoreTypes) {
ignoreTypes = ignoreTypes || [];
var search = [node];
var search = [].concat(node);
var ids = {};
while (search.length) {
@@ -206,13 +209,32 @@ t.getIds.arrays = {
ObjectPattern: "properties"
};
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.removeComments = function (child) {
delete child.leadingComments;
delete child.trailingComments;
return child;
};
t.inheritsComments = function (child, parent) {
child.leadingComments = _.compact([].concat(child.leadingComments, parent.leadingComments));
child.trailingComments = _.compact([].concat(child.trailingComments, parent.trailingComments));
return child;
};
t.inherits = function (child, parent) {
child.loc = parent.loc;
child.end = parent.end;
child.range = parent.range;
child.start = parent.start;
child.leadingComments = parent.leadingComments;
child.trailingComments = parent.trailingComments;
child.loc = parent.loc;
child.end = parent.end;
child.range = parent.range;
child.start = parent.start;
t.inheritsComments(child, parent);
return child;
};

View File

@@ -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);
@@ -102,8 +106,13 @@ exports.buildDefineProperties = function (mutatorMap) {
if (key[0] === "_") return;
node = _.clone(node);
var inheritNode = node;
if (t.isMethodDefinition(node)) node = node.value;
mapNode.properties.push(t.property("init", t.identifier(key), node));
var prop = t.property("init", t.identifier(key), node);
t.inheritsComments(prop, inheritNode);
t.removeComments(inheritNode);
mapNode.properties.push(prop);
});
objExpr.properties.push(propNode);
@@ -123,23 +132,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 +153,6 @@ exports.template = function (name, nodes, keepExpression) {
if (t.isParenthesizedExpression(node)) node = node.expression;
}
if (inherits) {
node = t.inherits(node, inherits);
}
return node;
};
@@ -277,9 +276,5 @@ try {
} catch (err) {
if (err.code !== "MODULE_NOT_FOUND") throw err;
Object.defineProperty(exports, "templates", {
get: function () {
return exports.templates = loadTemplates();
}
});
exports.templates = loadTemplates();
}

View File

@@ -1,7 +1,7 @@
{
"name": "6to5",
"description": "Turn ES6 code into readable vanilla ES5 with source maps",
"version": "1.12.10",
"version": "1.12.18",
"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": {

View File

@@ -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;
@@ -50,8 +48,9 @@ exports.get = function (entryName) {
var execLoc = taskDir + "/exec.js";
var taskOpts = _.merge({
filename: actualLocAlias,
sourceMapName: expectLocAlias
filenameRelative: expectLocAlias,
sourceFileName: actualLocAlias,
sourceMapName: expectLocAlias
}, _.cloneDeep(suite.options));
var taskOptsLoc = taskDir + "/options.json";
@@ -59,8 +58,10 @@ exports.get = function (entryName) {
var test = {
title: humanise(taskName),
disabled: taskName[0] === ".",
options: taskOpts,
exec: {
loc: execLoc,
code: readFile(execLoc),
filename: execLocAlias,
},

17
test/api.js Normal file
View 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/);
});
});

View File

@@ -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);

View File

@@ -1,8 +1,8 @@
"use strict";
var t = function (t, f) {
if (f === undefined) f = 5;
if (t === undefined) t = "foo";
if (f === undefined) f = 5;
return t + " bar " + f;
};

View File

@@ -0,0 +1 @@
function foo(a=b, b) {}

View File

@@ -0,0 +1,3 @@
{
"throws": "Temporal dead zone - accessing a variable before it's initialized"
}

View File

@@ -0,0 +1,4 @@
assert.equal((function(a, b=a++){
function b(){}
return a;
})(1), 2);

View File

@@ -0,0 +1 @@
function foo(a=a) {}

View File

@@ -0,0 +1,3 @@
{
"throws": "Temporal dead zone - accessing a variable before it's initialized"
}

View File

@@ -0,0 +1,6 @@
let x = 1;
{
let x = 2;
assert.equal(x, 2);
}
assert.equal(x, 1);

View File

@@ -0,0 +1,10 @@
function test () {
let value = "outer";
return (function () {
let value = "inner";
return value;
})();
}
assert(test(), "inner");

View File

@@ -0,0 +1,5 @@
let x = [0];
for (let x of x) {
assert.equal(x, 0);
}
assert.deepEqual(x, [0]);

View File

@@ -0,0 +1,5 @@
assert.equal((function(){
let a = 1;
for (let a = 0; a < 8; a++) {}
return a;
}()), 1);

View File

@@ -0,0 +1,6 @@
for (let i of [1, 2, 3]) {
var x = 5;
fns.push(function () {
return i * x;
});
}

View 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;
});
})();
}

View File

@@ -0,0 +1,4 @@
test.catch;
test.catch["foo"];
test["catch"];
test["catch"]["foo"];

View File

@@ -0,0 +1,6 @@
"use strict";
test["catch"];
test["catch"]["foo"];
test["catch"];
test["catch"]["foo"];

View File

@@ -0,0 +1,6 @@
var obj = {
"test": "foob",
"!@#$": "foob",
"33rd": "foob",
fooBar: "foob"
};

View File

@@ -0,0 +1,8 @@
"use strict";
var obj = {
test: "foob",
"!@#$": "foob",
"33rd": "foob",
fooBar: "foob"
};

View File

@@ -1,15 +1,15 @@
define(["exports"], function (exports) {
define("modules-amd/exports-default/expected", ["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;
});

View File

@@ -1,4 +1,4 @@
define(["exports", "foo"], function (exports, _foo) {
define("modules-amd/exports-from/expected", ["exports", "foo"], function (exports, _foo) {
"use strict";
(function (obj) {
@@ -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;
});

View File

@@ -1,11 +1,11 @@
define(["exports"], function (exports) {
define("modules-amd/exports-named/expected", ["exports"], function (exports) {
"use strict";
exports.foo = foo;
exports.foo = foo;
exports.bar = bar;
exports.bar = foo;
exports.default = foo;
exports.default = foo;
exports["default"] = foo;
exports["default"] = foo;
exports.bar = bar;
});

View File

@@ -1,4 +1,4 @@
define(["exports"], function (exports) {
define("modules-amd/exports-variable/expected", ["exports"], function (exports) {
"use strict";
exports.foo7 = foo7;
@@ -12,4 +12,4 @@ define(["exports"], function (exports) {
var foo8 = function foo8() {};
exports.foo8 = foo8;
});
});

View File

@@ -1,4 +1,4 @@
define(["exports", "./evens"], function (exports, _evens) {
define("modules-amd/hoist-function-exports/expected", ["exports", "./evens"], function (exports, _evens) {
"use strict";
exports.nextOdd = nextOdd;
@@ -12,4 +12,4 @@ define(["exports", "./evens"], function (exports, _evens) {
return !isEven(n);
};
})(isEven);
});
});

View File

@@ -1,6 +1,6 @@
define(["exports", "foo"], function (exports, _foo) {
define("modules-amd/imports-default/expected", ["exports", "foo"], function (exports, _foo) {
"use strict";
var foo = _foo.default;
var foo = _foo.default;
var foo = _foo["default"];
var foo = _foo["default"];
});

View File

@@ -1,4 +1,4 @@
define(["exports", "foo"], function (exports, _foo) {
define("modules-amd/imports-glob/expected", ["exports", "foo"], function (exports, _foo) {
"use strict";
var foo = _foo;

View File

@@ -1,6 +1,6 @@
define(["exports", "foo"], function (exports, _foo) {
define("modules-amd/imports-mixing/expected", ["exports", "foo"], function (exports, _foo) {
"use strict";
var foo = _foo.default;
var foo = _foo["default"];
var xyz = _foo.baz;
});

View File

@@ -1,4 +1,4 @@
define(["exports", "foo"], function (exports, _foo) {
define("modules-amd/imports-named/expected", ["exports", "foo"], function (exports, _foo) {
"use strict";
var bar = _foo.bar;

View File

@@ -1,3 +1,3 @@
define(["exports", "foo", "foo-bar", "./directory/foo-bar"], function (exports, _foo, _fooBar, _directoryFooBar) {
define("modules-amd/imports/expected", ["exports", "foo", "foo-bar", "./directory/foo-bar"], function (exports, _foo, _fooBar, _directoryFooBar) {
"use strict";
});
});

View File

@@ -1,12 +1,12 @@
define(["exports", "foo", "foo-bar", "./directory/foo-bar"], function (exports, _foo, _fooBar, _directoryFooBar) {
define("modules-amd/overview/expected", ["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;
});

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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"];

View File

@@ -1,4 +1,4 @@
"use strict";
var foo = require("foo").default;
var foo = require("foo")["default"];
var xyz = require("foo").baz;

View File

@@ -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;

View File

@@ -1,21 +1,21 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports"], factory);
define("modules-umd/exports-default/expected", ["exports"], factory);
} else if (typeof exports !== "undefined") {
factory(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;
});

View File

@@ -1,6 +1,6 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "foo"], factory);
define("modules-umd/exports-from/expected", ["exports", "foo"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("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;
});
});

View File

@@ -1,6 +1,6 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports"], factory);
define("modules-umd/exports-named/expected", ["exports"], factory);
} else if (typeof exports !== "undefined") {
factory(exports);
}
@@ -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;
});

View File

@@ -1,6 +1,6 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports"], factory);
define("modules-umd/exports-variable/expected", ["exports"], factory);
} else if (typeof exports !== "undefined") {
factory(exports);
}
@@ -18,4 +18,4 @@
var foo8 = function foo8() {};
exports.foo8 = foo8;
});
});

View File

@@ -1,6 +1,6 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "./evens"], factory);
define("modules-umd/hoist-function-exports/expected", ["exports", "./evens"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("./evens"));
}
@@ -18,4 +18,4 @@
return !isEven(n);
};
})(isEven);
});
});

View File

@@ -1,12 +1,12 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "foo"], factory);
define("modules-umd/imports-default/expected", ["exports", "foo"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("foo"));
}
})(function (exports, _foo) {
"use strict";
var foo = _foo.default;
var foo = _foo.default;
var foo = _foo["default"];
var foo = _foo["default"];
});

View File

@@ -1,6 +1,6 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "foo"], factory);
define("modules-umd/imports-glob/expected", ["exports", "foo"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("foo"));
}

View File

@@ -1,12 +1,12 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "foo"], factory);
define("modules-umd/imports-mixing/expected", ["exports", "foo"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("foo"));
}
})(function (exports, _foo) {
"use strict";
var foo = _foo.default;
var foo = _foo["default"];
var xyz = _foo.baz;
});

View File

@@ -1,6 +1,6 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "foo"], factory);
define("modules-umd/imports-named/expected", ["exports", "foo"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("foo"));
}

View File

@@ -1,9 +1,9 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "foo", "foo-bar", "./directory/foo-bar"], factory);
define("modules-umd/imports/expected", ["exports", "foo", "foo-bar", "./directory/foo-bar"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("foo"), require("foo-bar"), require("./directory/foo-bar"));
}
})(function (exports, _foo, _fooBar, _directoryFooBar) {
"use strict";
});
});

View File

@@ -1,18 +1,18 @@
(function (factory) {
if (typeof define === "function" && define.amd) {
define(["exports", "foo", "foo-bar", "./directory/foo-bar"], factory);
define("modules-umd/overview/expected", ["exports", "foo", "foo-bar", "./directory/foo-bar"], factory);
} else if (typeof exports !== "undefined") {
factory(exports, require("foo"), require("foo-bar"), require("./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;
});

View File

@@ -1 +1 @@
var foo = bar`a${ 42 }b ${_.foobar()}`;
var foo = bar`wow\na${ 42 }b ${_.foobar()}`;

View File

@@ -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());

View File

@@ -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);

View File

@@ -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
View 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/));
});
});

View File

@@ -9,21 +9,20 @@ var _ = require("lodash");
var run = function (task) {
var actual = task.actual;
var expect = task.expect;
var opts = task.options;
var exec = task.exec;
var getOpts = function (filename) {
var getOpts = function (self) {
return _.merge({
whtiespace: true,
filename: filename
}, opts);
filename: self.loc
}, task.options);
};
var execCode = exec.code;
var result;
if (execCode) {
result = transform(execCode, getOpts(exec.filename));
result = transform(execCode, getOpts(exec));
execCode = result.code;
require("../lib/6to5/polyfill");
@@ -39,7 +38,7 @@ var run = function (task) {
var actualCode = actual.code;
var expectCode = expect.code;
result = transform(actualCode, getOpts(actual.filename));
result = transform(actualCode, getOpts(actual));
actualCode = result.code;
chai.expect(actualCode).to.be.equal(expectCode, actual.loc + " !== " + expect.loc);
@@ -64,7 +63,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);
};