Compare commits

...

23 Commits

Author SHA1 Message Date
Sebastian McKenzie
34335018e9 v1.13.12 2014-11-25 19:03:48 +11:00
Sebastian McKenzie
136bddab33 temporarily disable es7-modules-system tests 2014-11-25 19:02:49 +11:00
Sebastian McKenzie
b2951c5462 remove SpreadProperty definition 2014-11-25 19:01:22 +11:00
Sebastian McKenzie
07de6f5f4a clean up Scope reference addition 2014-11-25 18:59:45 +11:00
Sebastian McKenzie
99ea00ca18 simplify generator context id 2014-11-25 18:59:36 +11:00
Sebastian McKenzie
ab5c6a38eb add VirtualPropertyExpression and SpreadProperty to ast-types 2014-11-25 18:59:26 +11:00
Sebastian McKenzie
52cee84625 add 1.13.12 changelog 2014-11-25 18:57:43 +11:00
Sebastian McKenzie
ba5992621d Merge branch 'guybedford-system' 2014-11-25 14:59:57 +11:00
Sebastian McKenzie
cdae98f653 Merge branch 'system' of github.com:guybedford/6to5 into guybedford-system 2014-11-25 14:59:47 +11:00
Sebastian McKenzie
81434bb557 add types.isDynamic so we can scan a node to see if it's ~safe~ to include it twice 2014-11-25 11:44:53 +11:00
Sebastian McKenzie
3af0fc6fb7 ignore XJSEmptyExpression - fixes #214 2014-11-25 11:44:35 +11:00
guybedford
3f60062ab6 system tests updates for live bindings and function hoisting 2014-11-24 16:05:54 +02:00
Sebastian McKenzie
76499bb26e update modules docs 2014-11-24 10:33:43 +11:00
Sebastian McKenzie
44f2f701e1 v1.13.11 2014-11-24 10:23:56 +11:00
Sebastian McKenzie
032bc0af5e fix util.regexify tests 2014-11-24 10:23:00 +11:00
Sebastian McKenzie
0e822a7e54 remove unused variables 2014-11-24 10:21:01 +11:00
Sebastian McKenzie
51e521f0e0 add 1.13.11 changelog 2014-11-24 10:19:40 +11:00
Sebastian McKenzie
e5ce69d6af clean up register module formatter and rename it to system 2014-11-24 10:19:06 +11:00
Sebastian McKenzie
e3b8fa93e2 export as module.exports if there are no other ExportDeclarations in commonInterop module formatter @guybedford 2014-11-24 10:05:50 +11:00
Sebastian McKenzie
f4ce3a23ad fix explicit arguments reference for rest parameters - fixes #210 2014-11-24 10:05:49 +11:00
Sebastian McKenzie
39f4696ac7 fix util.regexify on falsy values - fixes #208 2014-11-24 10:05:49 +11:00
Sebastian McKenzie
4a9918ec6b Merge pull request #209 from douglasduteil/feat-modules-add-register-module-type
Add "register" module formatter
2014-11-24 10:05:29 +11:00
Douglas Duteil
c87e14f6a9 feat(modules): add "register" module type
Inspired by https://github.com/ModuleLoader/es6-module-loader/wiki/System.register-Explained
2014-11-23 22:54:01 +01:00
46 changed files with 767 additions and 76 deletions

View File

@@ -1,3 +1,14 @@
# 1.13.12
* Ignore `XJSEmptyExpression`s in `react` transformer output.
# 1.13.11
* Fix `util.regexify` on falsy values.
* Fix `_aliasFunction` with rest parameters.
* Export as `module.exports` instead of `exports.default` if there are no other `ExportDeclaration`s in `commonInterop` module formatter.
* Add `system` module formatter. Thanks [@douglasduteil](https://github.com/douglasduteil).
# 1.13.10
* Add support for `AssignmentExpression` destructuring outside of `ExpressionStatement`.

View File

@@ -15,6 +15,13 @@ to5.transform('import "foo";', { modules: "common" });
## Formats
* [AMD](#amd)
* [Common (Default)](#common-default)
* [Common](#common)
* [Ignore](#ignore)
* [System](#system)
* [UMD](#umd)
### Common (Default)
**In**
@@ -51,6 +58,69 @@ var test = 5; exports.test = test;
exports.default = test;
```
### Common interop
**In**
```javascript
import "foo";
import foo from "foo";
import * as foo from "foo";
import {bar} from "foo";
import {foo as bar} from "foo";
export {test};
export var test = 5;
export default test;
```
**Out**
```javascript
var _interopRequire = function (obj) {
return obj && (obj["default"] || obj);
};
require("foo");
var foo = _interopRequire(require("foo"));
var foo = require("foo");
var bar = require("foo").bar;
var bar = require("foo").foo;
exports.test = test;
var test = exports.test = 5;
exports["default"] = test;
```
#### module.exports behaviour
If there exist no other non-default `export`s then `default exports` are
exported as `module.exports` instead of `exports.default`.
**In**
```javascript
export default function foo() {
}
```
**Out**
```javascript
module.exports = foo;
function foo() {
}
```
### AMD
**In**
@@ -135,6 +205,41 @@ function bar() {
}
```
### System
**In**
```javascript
import foo from "foo";
export function bar() {
return foo("foobar");
}
```
**Out**
```javascript
System.register("bar", ["foo"], function (_export) {
"use strict";
var __moduleName = "bar";
var foo;
function bar() {
return foo("foobar");
}
return {
setters: [function (m) {
foo = m.default;
}],
execute: function () {
_export("bar", bar);
}
};
});
```
## Custom
You can alternatively specify module names instead of one of the built-in types.

View File

@@ -10,9 +10,7 @@ var t = require("./types");
var _ = require("lodash");
function File(opts) {
this.opts = File.normaliseOptions(opts);
this.moduleFormatter = this.getModuleFormatter(this.opts.modules);
this.opts = File.normaliseOptions(opts);
this.uids = {};
this.ast = {};
}
@@ -168,6 +166,7 @@ File.prototype.parse = function (code) {
File.prototype.transform = function (ast) {
this.ast = ast;
this.scope = new Scope(ast.program);
this.moduleFormatter = this.getModuleFormatter(this.opts.modules);
var self = this;

View File

@@ -3,6 +3,7 @@ var _ = require("lodash");
var types = require("ast-types");
var def = types.Type.def;
var or = types.Type.or;
// Program wrapper
def("File")
@@ -16,12 +17,19 @@ def("ParenthesizedExpression")
.build("expression")
.field("expression", def("Expression"));
// Same as ImportNamespaceSpecifier but `id` is `name`
// Acorn - Same as ImportNamespaceSpecifier but `id` is `name`
def("ImportBatchSpecifier")
.bases("Specifier")
.build("name")
.field("name", def("Identifier"));
// Abstract references
def("VirtualPropertyExpression")
.bases("Expression")
.build("object", "property")
.field("object", def("Expression"))
.field("property", or(def("Identifier"), def("Expression")));
types.finalize();
var estraverse = require("estraverse");

View File

@@ -0,0 +1 @@
module.exports = VALUE;

View File

@@ -0,0 +1 @@
System.register(MODULE_NAME, MODULE_DEPENDENCIES, MODULE_BODY);

View File

@@ -41,34 +41,11 @@ AMDFormatter.prototype.transform = function (ast) {
};
AMDFormatter.prototype.getModuleName = function () {
var opts = this.file.opts;
var filenameRelative = opts.filenameRelative;
var moduleName = "";
if (!opts.amdModuleIds) {
if (this.file.opts.amdModuleIds) {
return CommonJSFormatter.prototype.getModuleName.apply(this, arguments);
} else {
return null;
}
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) {

View File

@@ -4,8 +4,9 @@ var CommonJSFormatter = require("./common");
var util = require("../../util");
var t = require("../../types");
function CommonJSInteropFormatter(file) {
this.file = file;
function CommonJSInteropFormatter() {
this.has = false;
CommonJSFormatter.apply(this, arguments);
}
util.inherits(CommonJSInteropFormatter, CommonJSFormatter);
@@ -26,3 +27,27 @@ CommonJSInteropFormatter.prototype.importSpecifier = function (specifier, node,
CommonJSFormatter.prototype.importSpecifier.apply(this, arguments);
}
};
CommonJSInteropFormatter.prototype.export = function (node, nodes) {
if (node.default && !this.has) {
var declar = node.declaration;
// module.exports = VALUE;
var assign = util.template("exports-default-module", {
VALUE: this._pushStatement(declar, nodes)
}, true);
// hoist to the top if this default is a function
nodes.push(this._hoistExport(declar, assign));
return;
} else {
this.has = true;
}
CommonJSFormatter.prototype.export.apply(this, arguments);
};
CommonJSInteropFormatter.prototype.exportSpecifier = function () {
this.has = true;
CommonJSFormatter.prototype.exportSpecifier.apply(this, arguments);
};

View File

@@ -7,6 +7,33 @@ function CommonJSFormatter(file) {
this.file = file;
}
CommonJSFormatter.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;
};
CommonJSFormatter.prototype.import = function (node, nodes) {
// import "foo";
nodes.push(util.template("require", {
@@ -38,23 +65,32 @@ CommonJSFormatter.prototype.importSpecifier = function (specifier, node, nodes)
}));
};
CommonJSFormatter.prototype._hoistExport = function (declar, assign) {
if (t.isFunctionDeclaration(declar)) {
assign._blockHoist = true;
}
return assign;
};
CommonJSFormatter.prototype._pushStatement = function (ref, nodes) {
if (t.isClass(ref) || t.isFunction(ref)) {
if (ref.id) {
nodes.push(t.toStatement(ref));
ref = ref.id;
}
}
return ref;
};
CommonJSFormatter.prototype.export = function (node, nodes) {
var declar = node.declaration;
if (node.default) {
var ref = declar;
if (t.isClass(ref) || t.isFunction(ref)) {
if (ref.id) {
nodes.push(t.toStatement(ref));
ref = ref.id;
}
}
nodes.push(util.template("exports-default", {
//inherits: node,
VALUE: ref
VALUE: this._pushStatement(declar, nodes)
}, true));
} else {
var assign;
@@ -83,9 +119,7 @@ CommonJSFormatter.prototype.export = function (node, nodes) {
nodes.push(t.toStatement(declar));
nodes.push(assign);
if (t.isFunctionDeclaration(declar)) {
assign._blockHoist = true;
}
this._hoistExport(declar, assign);
}
}
};
@@ -126,7 +160,7 @@ CommonJSFormatter.prototype._exportSpecifier = function (getRef, specifier, node
};
CommonJSFormatter.prototype.exportSpecifier = function (specifier, node, nodes) {
return this._exportSpecifier(function () {
this._exportSpecifier(function () {
return t.callExpression(t.identifier("require"), [node.source]);
}, specifier, node, nodes);
};

View File

@@ -0,0 +1,202 @@
module.exports = SystemFormatter;
var util = require("../../util");
var t = require("../../types");
var _ = require("lodash");
var SETTER_MODULE_NAMESPACE = t.identifier("m");
var DEFAULT_IDENTIFIER = t.identifier("default");
var NULL_SETTER = t.literal(null);
function SystemFormatter(file) {
this.exportedStatements = [];
this.importedModule = {};
this.exportIdentifier = file.generateUidIdentifier("export");
this.file = file;
}
SystemFormatter.prototype.transform = function (ast) {
var program = ast.program;
var body = program.body;
// extract the module name
var moduleName = this.file.opts.filename
.replace(/^.*\//, "").replace(/\..*$/, "");
// build an array of module names
var dependencies = Object.keys(this.importedModule).map(t.literal);
// generate the __moduleName variable
var moduleNameVariableNode = t.variableDeclaration("var", [
t.variableDeclarator(
t.identifier("__moduleName"),
t.literal(moduleName)
)
]);
body.splice(1, 0, moduleNameVariableNode);
// generate an array of import variables
var declaredSetters = _(this.importedModule)
.map()
.flatten()
.pluck("variableName")
.pluck("name")
.uniq()
.map(t.identifier)
.map(function (name) {
return t.variableDeclarator(name);
})
.value();
if (declaredSetters.length) {
body.splice(2, 0, t.variableDeclaration("var", declaredSetters));
}
// generate the execute function expression
var executeFunctionExpression = t.functionExpression(
null, [], t.blockStatement(this.exportedStatements)
);
// generate the execute function expression
var settersArrayExpression = t.arrayExpression(this._buildSetters());
// generate the return statement
var moduleReturnStatement = t.returnStatement(t.objectExpression([
t.property("init", t.identifier("setters"), settersArrayExpression),
t.property("init", t.identifier("execute"), executeFunctionExpression)
]));
body.push(moduleReturnStatement);
// runner
var runner = util.template("register", {
MODULE_NAME: t.literal(moduleName),
MODULE_DEPENDENCIES: t.arrayExpression(dependencies),
MODULE_BODY: t.functionExpression(
null,
[this.exportIdentifier],
t.blockStatement(body)
)
});
program.body = [t.expressionStatement(runner)];
};
SystemFormatter.prototype._buildSetters = function () {
// generate setters array expression elements
return _.map(this.importedModule, function (specs) {
if (!specs.length) {
return NULL_SETTER;
}
var expressionStatements = _.map(specs, function (spec) {
var right = SETTER_MODULE_NAMESPACE;
if (!spec.isBatch) {
right = t.memberExpression(right, spec.key);
}
return t.expressionStatement(
t.assignmentExpression("=", spec.variableName, right
)
);
});
return t.functionExpression(
null, [SETTER_MODULE_NAMESPACE], t.blockStatement(expressionStatements)
);
});
};
SystemFormatter.prototype.import = function (node) {
var MODULE_NAME = node.source.value;
this.importedModule[MODULE_NAME] = this.importedModule[MODULE_NAME] || [];
};
SystemFormatter.prototype.importSpecifier = function (specifier, node) {
var variableName = t.getSpecifierName(specifier);
// import foo from "foo";
if (specifier.default) {
specifier.id = DEFAULT_IDENTIFIER;
}
var MODULE_NAME = node.source.value;
this.importedModule[MODULE_NAME] = this.importedModule[MODULE_NAME] || [];
this.importedModule[MODULE_NAME].push({
variableName: variableName,
isBatch: specifier.type === "ImportBatchSpecifier",
key: specifier.id
});
};
SystemFormatter.prototype._export = function (name, identifier) {
this.exportedStatements.push(t.expressionStatement(
t.callExpression(this.exportIdentifier, [t.literal(name), identifier])
));
};
SystemFormatter.prototype.export = function (node, nodes) {
var declar = node.declaration;
var variableName, identifier;
if (node.default) {
// export default foo
variableName = DEFAULT_IDENTIFIER.name;
if (t.isClass(declar) || t.isFunction(declar)) {
if (!declar.id) {
declar.id = this.file.generateUidIdentifier("anonymous");
}
nodes.push(t.toStatement(declar));
declar = declar.id;
}
identifier = declar;
} else if (t.isVariableDeclaration(declar)) {
// export var foo
variableName = declar.declarations[0].id.name;
identifier = declar.declarations[0].id;
nodes.push(declar);
} else {
// export function foo () {}
variableName = declar.id.name;
identifier = declar.id;
nodes.push(declar);
}
this._export(variableName, identifier);
};
SystemFormatter.prototype.exportSpecifier = function (specifier, node) {
var variableName = t.getSpecifierName(specifier);
if (node.source) {
if (t.isExportBatchSpecifier(specifier)) {
// export * from "foo";
var exportIdentifier = t.identifier("exports");
this.exportedStatements.push(
t.variableDeclaration("var", [
t.variableDeclarator(exportIdentifier, this.exportIdentifier)
])
);
this.exportedStatements.push(util.template("exports-wildcard", {
OBJECT: t.identifier(node.source.value)
}, true));
} else {
// export { foo } from "test";
this._export(variableName.name, t.memberExpression(
t.identifier(node.source.value),
specifier.id
));
}
} else {
// export { foo };
this._export(variableName.name, specifier.id);
}
};

View File

@@ -22,6 +22,7 @@ transform.transformers = {};
transform.moduleFormatters = {
common: require("./modules/common"),
commonInterop: require("./modules/common-interop"),
system: require("./modules/system"),
ignore: require("./modules/ignore"),
amd: require("./modules/amd"),
umd: require("./modules/umd")

View File

@@ -31,7 +31,7 @@ var go = function (getBody, node, file, scope) {
return false;
}
if (node._ignoreAliasFunctions) return;
if (node._ignoreAliasFunctions) return false;
var getId;

View File

@@ -56,7 +56,7 @@ var visitor = function (path, file) {
);
var innerFnId = t.identifier(node.id.name + "$");
var contextId = file.generateUidIdentifier("context$", scope);
var contextId = file.generateUidIdentifier("context", scope);
var vars = hoist(path);
var emitter = new Emitter(contextId);

View File

@@ -5,10 +5,10 @@ exports.ImportDeclaration = function (node, parent, file) {
if (node.specifiers.length) {
_.each(node.specifiers, function (specifier) {
file.moduleFormatter.importSpecifier(specifier, node, nodes);
file.moduleFormatter.importSpecifier(specifier, node, nodes, parent);
});
} else {
file.moduleFormatter.import(node, nodes);
file.moduleFormatter.import(node, nodes, parent);
}
return nodes;
@@ -18,10 +18,10 @@ exports.ExportDeclaration = function (node, parent, file) {
var nodes = [];
if (node.declaration) {
file.moduleFormatter.export(node, nodes);
file.moduleFormatter.export(node, nodes, parent);
} else {
_.each(node.specifiers, function (specifier) {
file.moduleFormatter.exportSpecifier(specifier, node, nodes);
file.moduleFormatter.exportSpecifier(specifier, node, nodes, parent);
});
}

View File

@@ -29,7 +29,7 @@ exports.AssignmentExpression = function (node, parent, file, scope) {
// we need to return `node.right`
if (!t.isExpressionStatement(parent)) {
// `node.right` isn't a simple identifier so we need to reference it
if (!t.isIdentifier(value)) {
if (t.isDynamic(value)) {
var tempName = file.generateUid("temp");
temp = value = t.identifier(tempName);
scope.push(tempName, temp);
@@ -70,7 +70,7 @@ exports.CallExpression = function (node, parent, file, scope) {
if (!t.isVirtualPropertyExpression(callee)) return;
var temp;
if (!t.isIdentifier(callee.object)) {
if (t.isDynamic(callee.object)) {
// we need to save `callee.object` so we can call it again
var tempName = file.generateUid("temp");
temp = t.identifier(tempName);

View File

@@ -132,6 +132,8 @@ exports.XJSElement = {
}
});
return;
} else if (t.isXJSEmptyExpression(child)) {
return;
}

View File

@@ -21,15 +21,19 @@ function Scope(block, parent) {
this.references = this.getReferences();
}
Scope.add = function (node, references) {
if (!node) return;
_.merge(references, t.getIds(node, true));
};
Scope.prototype.getReferences = function () {
var block = this.block;
if (block._scopeReferences) return block._scopeReferences;
var self = this;
var references = block._scopeReferences = {};
var add = function (node) {
self.add(node, references);
Scope.add(node, references);
};
// ForStatement - left, init
@@ -116,9 +120,8 @@ Scope.prototype.push = function (name, id, init) {
}
};
Scope.prototype.add = function (node, references) {
if (!node) return;
_.merge(references || this.references, t.getIds(node, true));
Scope.prototype.add = function (node) {
Scope.add(node, this.references);
};
Scope.prototype.get = function (id) {

View File

@@ -87,6 +87,16 @@ t.shallowEqual = function (actual, expected) {
//
t.isDynamic = function (node) {
if (t.isIdentifier(node) || t.isLiteral(node) || t.isThisExpression(node)) {
return false;
} else if (t.isMemberExpression(node)) {
return t.isDynamic(node.object) || t.isDynamic(node.property);
} else {
return true;
}
};
t.isReferenced = function (node, parent) {
// we're a property key so we aren't referenced
if (t.isProperty(parent) && parent.key === node) return false;

View File

@@ -38,9 +38,9 @@ exports.list = function (val) {
};
exports.regexify = function (val) {
if (!val) return new RegExp;
if (!val) return new RegExp(/.^/);
if (_.isArray(val)) val = val.join("|");
if (_.isString(val)) return new RegExp(val || "");
if (_.isString(val)) return new RegExp(val);
if (_.isRegExp(val)) return val;
throw new TypeError("illegal type for regexify");
};

View File

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

View File

@@ -0,0 +1,8 @@
export default 42;
export default {};
export default [];
export default foo;
export default function () {}
export default class {}
export default function foo () {}
export default class Foo {}

View File

@@ -0,0 +1,32 @@
System.register("actual", [], function (_export) {
"use strict";
var __moduleName = "actual";
function _anonymous() {}
var _anonymous2;
function foo() {}
var Foo;
return {
setters: [],
execute: function () {
_export("default", 42);
_export("default", {});
_export("default", []);
_export("default", foo);
_export("default", _anonymous);
_export("default", _anonymous2 = function _anonymous2() {});
_export("default", foo);
_export("default", Foo = function Foo() {});
}
};
});

View File

@@ -0,0 +1,6 @@
export * from "foo";
export {foo} from "foo";
export {foo, bar} from "foo";
export {foo as bar} from "foo";
export {foo as default} from "foo";
export {foo as default, bar} from "foo";

View File

@@ -0,0 +1,34 @@
System.register("actual", ["foo"], function (_export) {
"use strict";
var __moduleName = "actual";
var _localExports = ['foo', 'bar', 'default'];
return {
setters: [
function(m) {
_export("foo", m.foo);
_export("foo", m.foo);
_export("bar", m.bar);
_export("bar", m.foo);
_export("default", m.foo);
_export("default", m.foo);
_export("bar", m.bar);
for (var p in m) {
if (_localExports.indexOf(i) == -1)
_export(p, m[p]);
}
}
],
execute: function () {
}
};
});

View File

@@ -0,0 +1,5 @@
export {foo};
export {foo, bar};
export {foo as bar};
export {foo as default};
export {foo as default, bar};

View File

@@ -0,0 +1,26 @@
System.register("actual", [], function (_export) {
"use strict";
var __moduleName = "actual";
return {
setters: [
function(m) {
_export("foo", m.foo);
_export("foo", m.foo);
_export("bar", m.bar);
_export("bar", m.foo);
_export("default", m.foo);
_export("default", m.foo);
_export("bar", m.bar);
}],
execute: function () {
}
};
});

View File

@@ -0,0 +1,8 @@
export var foo = 1;
export var foo2 = function () {};
export var foo3;
export let foo4 = 2;
export let foo5;
export const foo6 = 3;
export function foo7 () {}
export class foo8 {}

View File

@@ -0,0 +1,37 @@
System.register("actual", [], function (_export) {
"use strict";
var __moduleName = "actual";
var foo;
var foo2;
var foo3;
var foo4;
var foo5;
var foo6;
function foo7() {}
_export("foo7", foo7);
var foo8;
return {
setters: [],
execute: function () {
_export("foo", foo = 1);
_export("foo2", foo2 = function () {});
_export("foo3", foo3);
_export("foo4", foo4 = 2);
_export("foo5", foo5);
_export("foo6", foo6 = 3);
_export("foo7", foo7);
_export("foo8", foo8 = function foo8() {});
}
};
});

View File

@@ -0,0 +1,11 @@
import { isEven } from "./evens";
export function nextOdd(n) {
return isEven(n) ? n + 1 : n + 2;
}
export var isOdd = (function (isEven) {
return function (n) {
return !isEven(n);
};
})(isEven);

View File

@@ -0,0 +1,25 @@
System.register("actual", ["./evens"], function (_export) {
"use strict";
var __moduleName = "actual";
var isEven;
function nextOdd(n) {
return isEven(n) ? n + 1 : n + 2;
}
_export("nextOdd", nextOdd);
var isOdd;
return {
setters: [function (m) {
isEven = m.isEven;
}],
execute: function () {
_export("isOdd", isOdd = (function (isEven) {
return function (n) {
return !isEven(n);
};
})(isEven));
}
};
});

View File

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

View File

@@ -0,0 +1,14 @@
System.register("actual", ["foo"], function (_export) {
"use strict";
var __moduleName = "actual";
var foo;
return {
setters: [function (m) {
foo = m.default;
foo = m.default;
}],
execute: function () {}
};
});

View File

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

View File

@@ -0,0 +1,13 @@
System.register("actual", ["foo"], function (_export) {
"use strict";
var __moduleName = "actual";
var foo;
return {
setters: [function (m) {
foo = m;
}],
execute: function () {}
};
});

View File

@@ -0,0 +1 @@
import foo, {baz as xyz} from "foo";

View File

@@ -0,0 +1,14 @@
System.register("actual", ["foo"], function (_export) {
"use strict";
var __moduleName = "actual";
var foo, xyz;
return {
setters: [function (m) {
foo = m.default;
xyz = m.baz;
}],
execute: function () {}
};
});

View File

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

View File

@@ -0,0 +1,18 @@
System.register("actual", ["foo"], function (_export) {
"use strict";
var __moduleName = "actual";
var bar, baz, xyz;
return {
setters: [function (m) {
bar = m.bar;
bar = m.bar;
baz = m.baz;
baz = m.bar;
baz = m.bar;
xyz = m.xyz;
}],
execute: function () {}
};
});

View File

@@ -0,0 +1,3 @@
import "foo";
import "foo-bar";
import "./directory/foo-bar";

View File

@@ -0,0 +1,10 @@
System.register("actual", ["foo", "foo-bar", "./directory/foo-bar"], function (_export) {
"use strict";
var __moduleName = "actual";
return {
setters: [null, null, null],
execute: function () {}
};
});

View File

@@ -0,0 +1,3 @@
{
"modules": "system"
}

View File

@@ -0,0 +1,12 @@
import "foo";
import "foo-bar";
import "./directory/foo-bar";
import foo from "foo";
import * as foo from "foo";
import {bar} from "foo";
import {foo as bar} from "foo";
export {test};
export var test = 5;
export default test;

View File

@@ -0,0 +1,24 @@
System.register("actual", ["foo", "foo-bar", "./directory/foo-bar"], function (_export) {
"use strict";
var __moduleName = "actual";
var foo, bar;
var test;
return {
setters: [function (m) {
foo = m.default;
foo = m;
bar = m.bar;
bar = m.foo;
}, null, null],
execute: function () {
_export("test", test);
_export("test", test = 5);
_export("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 () {};
module.exports = foo;
module.exports = 42;
module.exports = {};
module.exports = [];
module.exports = foo;
module.exports = function () {};
module.exports = function () {};
function foo() {}
exports["default"] = foo;
var Foo = function Foo() {};
exports["default"] = Foo;
module.exports = Foo;

View File

@@ -1,6 +1,5 @@
"use strict";
var _arguments = arguments;
var _argumentsToArray = function (args) {
var target = new Array(args.length);
for (var i = 0; i < args.length; i++) {
@@ -11,5 +10,5 @@ var _argumentsToArray = function (args) {
};
var concat = function () {
var arrs = _argumentsToArray(_arguments);
var arrs = _argumentsToArray(arguments);
};

View File

@@ -58,10 +58,10 @@ suite("util", function () {
});
test("regexify", function () {
assert.deepEqual(util.regexify(undefined), /(?:)/);
assert.deepEqual(util.regexify(false), /(?:)/);
assert.deepEqual(util.regexify(null), /(?:)/);
assert.deepEqual(util.regexify(""), /(?:)/);
assert.deepEqual(util.regexify(undefined), /.^/);
assert.deepEqual(util.regexify(false), /.^/);
assert.deepEqual(util.regexify(null), /.^/);
assert.deepEqual(util.regexify(""), /.^/);
assert.deepEqual(util.regexify(["foo", "bar"]), /foo|bar/);
assert.deepEqual(util.regexify("foobar"), /foobar/);
assert.deepEqual(util.regexify(/foobar/), /foobar/);
@@ -82,6 +82,8 @@ suite("util", function () {
assert.equal(t.toIdentifier("swag-lord"), "swagLord");
});
test("isDynamic");
test("isReferenced");
test("removeProperties");