diff --git a/.babelrc b/.babelrc index f3b952604a7d..f9a07bc9ff29 100644 --- a/.babelrc +++ b/.babelrc @@ -1,6 +1,5 @@ { - "experimental": true, - "playground": true, - "loose": true, + "stage": 0, + "loose": ["all"], "blacklist": ["es6.tailCall"] } diff --git a/package.json b/package.json index 7dc776128946..2eb81dd5532e 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "user-home": "^1.1.1" }, "devDependencies": { - "babel": "4.7.13", + "babel": "5.1.13", "browserify": "^9.0.8", "chai": "^2.2.0", "eslint": "^0.18.0", diff --git a/src/acorn/index.js b/src/acorn/index.js new file mode 100644 index 000000000000..1bae528e73e4 --- /dev/null +++ b/src/acorn/index.js @@ -0,0 +1,3 @@ +export * from "./src/index"; +import "./plugins/flow"; +import "./plugins/jsx"; diff --git a/src/acorn/package.json b/src/acorn/package.json index c2cc60b77c15..4067160963ec 100755 --- a/src/acorn/package.json +++ b/src/acorn/package.json @@ -2,7 +2,7 @@ "name": "acorn", "description": "ECMAScript parser", "homepage": "https://github.com/marijnh/acorn", - "main": "src/index.js", + "main": "index.js", "version": "1.0.0", "engines": { "node": ">=0.4.0" diff --git a/src/acorn/plugins/flow.js b/src/acorn/plugins/flow.js index 4f57bf078d56..1c4fdcce3874 100644 --- a/src/acorn/plugins/flow.js +++ b/src/acorn/plugins/flow.js @@ -1,4 +1,4 @@ -var acorn = require("..") +var acorn = require("../src/index") var pp = acorn.Parser.prototype var tt = acorn.tokTypes diff --git a/src/acorn/plugins/jsx.js b/src/acorn/plugins/jsx.js index 2d249a17a2d8..cf6c327fc052 100644 --- a/src/acorn/plugins/jsx.js +++ b/src/acorn/plugins/jsx.js @@ -1,4 +1,4 @@ -var acorn = require("..") +var acorn = require("../src/index") var tt = acorn.tokTypes; var tc = acorn.tokContexts; diff --git a/src/acorn/src/index.js b/src/acorn/src/index.js index f4fabd338c12..4aa982fa19b6 100755 --- a/src/acorn/src/index.js +++ b/src/acorn/src/index.js @@ -38,9 +38,6 @@ export {isIdentifierChar, isIdentifierStart} from "./identifier" export {Token} from "./tokenize" export {isNewLine, lineBreak, lineBreakG} from "./whitespace" -import "../plugins/flow"; -import "../plugins/jsx"; - export const version = "1.0.0" // The main exported interface (under `self.acorn` when in the diff --git a/src/babel/api/browser.js b/src/babel/api/browser.js index 1a8ed4630c35..d90ec4ec7142 100644 --- a/src/babel/api/browser.js +++ b/src/babel/api/browser.js @@ -11,7 +11,7 @@ transform.run = function (code, opts = {}) { }; transform.load = function (url, callback, opts = {}, hold) { - opts.filename ||= url; + opts.filename = opts.filename || url; var xhr = global.ActiveXObject ? new global.ActiveXObject("Microsoft.XMLHTTP") : new global.XMLHttpRequest(); xhr.open("GET", url, true); diff --git a/src/babel/generation/buffer.js b/src/babel/generation/buffer.js index 2e909cf5256b..bb47b6a753ea 100644 --- a/src/babel/generation/buffer.js +++ b/src/babel/generation/buffer.js @@ -77,7 +77,7 @@ export default class Buffer { return; } - removeLast ||= false; + removeLast = removeLast || false; if (isNumber(i)) { i = Math.min(2, i); diff --git a/src/babel/generation/index.js b/src/babel/generation/index.js index ef4bf56f622b..7e35ed694a83 100644 --- a/src/babel/generation/index.js +++ b/src/babel/generation/index.js @@ -12,7 +12,7 @@ import * as t from "../types"; class CodeGenerator { constructor(ast, opts, code) { - opts ||= {}; + opts = opts || {}; this.comments = ast.comments || []; this.tokens = ast.tokens || []; diff --git a/src/babel/generation/node/whitespace.js b/src/babel/generation/node/whitespace.js index 1db5d42d4295..6befad891c74 100644 --- a/src/babel/generation/node/whitespace.js +++ b/src/babel/generation/node/whitespace.js @@ -16,7 +16,7 @@ function crawl(node, state = {}) { } else if (t.isFunction(node)) { state.hasFunction = true; } else if (t.isIdentifier(node)) { - state.hasHelper ||= isHelper(node.callee); + state.hasHelper = state.hasHelper || isHelper(node.callee); } return state; diff --git a/src/babel/tools/resolve-rc.js b/src/babel/tools/resolve-rc.js index 78fe34e14e91..eb3b0334cd1a 100644 --- a/src/babel/tools/resolve-rc.js +++ b/src/babel/tools/resolve-rc.js @@ -33,7 +33,7 @@ export default function (loc, opts = {}) { var json; try { - json = jsons[content] ||= JSON.parse(stripJsonComments(content)); + json = jsons[content] = jsons[content] || JSON.parse(stripJsonComments(content)); } catch (err) { err.message = `${file}: ${err.message}`; throw err; @@ -47,7 +47,7 @@ export default function (loc, opts = {}) { var c = a.slice(0); for (var v of b) { if (a.indexOf(v) < 0) { - c.push(v); + c.push(v); } } return c; diff --git a/src/babel/transformation/file/index.js b/src/babel/transformation/file/index.js index d9df3fdb92cc..159dd396fe5d 100644 --- a/src/babel/transformation/file/index.js +++ b/src/babel/transformation/file/index.js @@ -134,7 +134,7 @@ export default class File { if (optionParser) val = optionParser(key, val); if (option.alias) { - opts[option.alias] ||= val; + opts[option.alias] = opts[option.alias] || val; } else { opts[key] = val; } @@ -349,7 +349,7 @@ export default class File { } addImport(source: string, name?: string, type?: string): Object { - name ||= source; + name = name || source; var id = this.dynamicImportIds[name]; if (!id) { @@ -361,7 +361,7 @@ export default class File { declar._blockHoist = 3; if (type) { - var modules = this.dynamicImportTypes[type] ||= []; + var modules = this.dynamicImportTypes[type] = this.dynamicImportTypes[type] || []; modules.push(declar); } @@ -379,7 +379,7 @@ export default class File { attachAuxiliaryComment(node: Object): Object { var comment = this.opts.auxiliaryComment; if (comment) { - node.leadingComments ||= []; + node.leadingComments = node.leadingComments || []; node.leadingComments.push({ type: "Line", value: " " + comment diff --git a/src/babel/transformation/helpers/define-map.js b/src/babel/transformation/helpers/define-map.js index d6acd8e93eba..6d5efda84948 100644 --- a/src/babel/transformation/helpers/define-map.js +++ b/src/babel/transformation/helpers/define-map.js @@ -15,7 +15,7 @@ export function push(mutatorMap, node, kind, file) { // - map._inherits ||= []; + map._inherits = map._inherits || []; map._inherits.push(node); map._key = node.key; @@ -25,7 +25,7 @@ export function push(mutatorMap, node, kind, file) { } if (node.decorators) { - var decorators = map.decorators ||= t.arrayExpression([]); + var decorators = map.decorators = map.decorators || t.arrayExpression([]); decorators.elements = decorators.elements.concat(node.decorators.map(dec => dec.expression)); } diff --git a/src/babel/transformation/helpers/remap-async-to-generator.js b/src/babel/transformation/helpers/remap-async-to-generator.js index 56faaeb7ab32..93c5d320dc38 100644 --- a/src/babel/transformation/helpers/remap-async-to-generator.js +++ b/src/babel/transformation/helpers/remap-async-to-generator.js @@ -20,7 +20,7 @@ var referenceVisitor = { enter(node, parent, scope, state) { var name = state.id.name; if (t.isReferencedIdentifier(node, parent, { name: name }) && scope.bindingIdentifierEquals(name, state.id)) { - return state.ref ||= scope.generateUidIdentifier(name); + return state.ref = state.ref || scope.generateUidIdentifier(name); } } }; diff --git a/src/babel/transformation/helpers/replace-supers.js b/src/babel/transformation/helpers/replace-supers.js index a57da1569f48..3e43881227ca 100644 --- a/src/babel/transformation/helpers/replace-supers.js +++ b/src/babel/transformation/helpers/replace-supers.js @@ -218,7 +218,7 @@ export default class ReplaceSupers { return this.setSuperProperty(node.left.property, node.right, node.left.computed, getThisReference()); } else { // super.age += 2; -> var _ref = super.age; super.age = _ref + 2; - ref ||= path.scope.generateUidIdentifier("ref"); + ref = ref || path.scope.generateUidIdentifier("ref"); return [ t.variableDeclaration("var", [ t.variableDeclarator(ref, node.left) diff --git a/src/babel/transformation/index.js b/src/babel/transformation/index.js index 8d244aa51a63..4e6494e8f169 100644 --- a/src/babel/transformation/index.js +++ b/src/babel/transformation/index.js @@ -60,7 +60,7 @@ import rawTransformers from "./transformers"; each(rawTransformers, function (transformer, key) { var namespace = key.split(".")[0]; - transform.namespaces[namespace] ||= []; + transform.namespaces[namespace] = transform.namespaces[namespace] || []; transform.namespaces[namespace].push(key); transform.transformerNamespaces[key] = namespace; diff --git a/src/babel/transformation/modules/_default.js b/src/babel/transformation/modules/_default.js index 6d237a54c9a0..9c511b07ff4a 100644 --- a/src/babel/transformation/modules/_default.js +++ b/src/babel/transformation/modules/_default.js @@ -166,7 +166,7 @@ export default class DefaultFormatter { } _addExport(name, exported) { - var info = this.localExports[name] ||= { + var info = this.localExports[name] = this.localExports[name] || { binding: this.scope.getBindingIdentifier(name), exported: [] }; diff --git a/src/babel/transformation/modules/common.js b/src/babel/transformation/modules/common.js index 0679e2ed76eb..3f43eda36fbd 100644 --- a/src/babel/transformation/modules/common.js +++ b/src/babel/transformation/modules/common.js @@ -114,7 +114,7 @@ export default class CommonJSFormatter extends DefaultFormatter { uid = this.scope.generateUidBasedOnNode(node, "import"); } - uid ||= node.specifiers[0].local; + uid = uid || node.specifiers[0].local; var declar = t.variableDeclaration("var", [ t.variableDeclarator(uid, call) diff --git a/src/babel/transformation/modules/system.js b/src/babel/transformation/modules/system.js index 74e5d022f317..4813084446b2 100644 --- a/src/babel/transformation/modules/system.js +++ b/src/babel/transformation/modules/system.js @@ -77,11 +77,11 @@ var runnerSettersVisitor = { export default class SystemFormatter extends AMDFormatter { constructor(file) { + super(file); + this.exportIdentifier = file.scope.generateUidIdentifier("export"); this.noInteropRequireExport = true; this.noInteropRequireImport = true; - - DefaultFormatter.apply(this, arguments); } _addImportSource(node, exportNode) { diff --git a/src/babel/transformation/transformer.js b/src/babel/transformation/transformer.js index 361a329078a3..f895b285f887 100644 --- a/src/babel/transformation/transformer.js +++ b/src/babel/transformation/transformer.js @@ -39,7 +39,7 @@ export default class Transformer { // this.handlers = this.normalize(transformer); - this.opts ||= {}; + this.opts = this.opts || {}; this.key = transformerKey; // diff --git a/src/babel/transformation/transformers/es6/block-scoping.js b/src/babel/transformation/transformers/es6/block-scoping.js index 4c2bea586a7e..1b81d95232f6 100644 --- a/src/babel/transformation/transformers/es6/block-scoping.js +++ b/src/babel/transformation/transformers/es6/block-scoping.js @@ -14,7 +14,7 @@ function isLet(node, parent) { if (isLetInitable(node, parent)) { for (var i = 0; i < node.declarations.length; i++) { var declar = node.declarations[i]; - declar.init ||= t.identifier("undefined"); + declar.init = declar.init || t.identifier("undefined"); } } @@ -611,7 +611,7 @@ class BlockScoping { for (var i = 0; i < cases.length; i++) { var caseConsequent = cases[i].consequent[0]; if (t.isBreakStatement(caseConsequent) && !caseConsequent.label) { - caseConsequent.label = this.loopLabel ||= this.file.scope.generateUidIdentifier("loop"); + caseConsequent.label = this.loopLabel = this.loopLabel || this.file.scope.generateUidIdentifier("loop"); } } diff --git a/src/babel/transformation/transformers/es6/classes.js b/src/babel/transformation/transformers/es6/classes.js index 7bb21f85b808..332b0767b384 100644 --- a/src/babel/transformation/transformers/es6/classes.js +++ b/src/babel/transformation/transformers/es6/classes.js @@ -558,11 +558,11 @@ class ClassTransformer { var body; var target; if (node.static) { - initializers = this.staticInitializersId ||= this.scope.generateUidIdentifier("staticInitializers"); + initializers = this.staticInitializersId = this.staticInitializersId || this.scope.generateUidIdentifier("staticInitializers"); body = this.staticPropBody; target = this.classRef; } else { - initializers = this.instanceInitializersId ||= this.scope.generateUidIdentifier("instanceInitializers"); + initializers = this.instanceInitializersId = this.instanceInitializersId || this.scope.generateUidIdentifier("instanceInitializers"); body = this.instancePropBody; target = t.thisExpression(); } @@ -575,7 +575,7 @@ class ClassTransformer { ]) )); } else { - node.value ||= t.identifier("undefined"); + node.value = node.value || t.identifier("undefined"); if (node.static) { // can just be added to the static map diff --git a/src/babel/transformation/transformers/es6/destructuring.js b/src/babel/transformation/transformers/es6/destructuring.js index c6adc78b6c98..108eda311b73 100644 --- a/src/babel/transformation/transformers/es6/destructuring.js +++ b/src/babel/transformation/transformers/es6/destructuring.js @@ -200,7 +200,7 @@ export function VariableDeclaration(node, parent, scope, file) { for (i = 0; i < nodes.length; i++) { node = nodes[i]; - declar ||= t.variableDeclaration(node.kind, []); + declar = declar || t.variableDeclaration(node.kind, []); if (!t.isVariableDeclaration(node) && declar.kind !== node.kind) { throw file.errorWithNode(node, messages.get("invalidParentForThisNode")); diff --git a/src/babel/transformation/transformers/es6/object-super.js b/src/babel/transformation/transformers/es6/object-super.js index 7a08bdb3b39d..b261520da29a 100644 --- a/src/babel/transformation/transformers/es6/object-super.js +++ b/src/babel/transformation/transformers/es6/object-super.js @@ -32,7 +32,7 @@ function Property(path, node, scope, getObjectRef, file) { export function ObjectExpression(node, parent, scope, file) { var objectRef; - var getObjectRef = () => objectRef ||= scope.generateUidIdentifier("obj"); + var getObjectRef = () => objectRef = objectRef || scope.generateUidIdentifier("obj"); var propPaths = this.get("properties"); for (var i = 0; i < node.properties.length; i++) { diff --git a/src/babel/transformation/transformers/es6/tail-call.js b/src/babel/transformation/transformers/es6/tail-call.js index 91f6d3040b81..7e894b020068 100644 --- a/src/babel/transformation/transformers/es6/tail-call.js +++ b/src/babel/transformation/transformers/es6/tail-call.js @@ -101,23 +101,23 @@ class TailCallTransformer { } getArgumentsId() { - return this.argumentsId ||= this.scope.generateUidIdentifier("arguments"); + return this.argumentsId = this.argumentsId || this.scope.generateUidIdentifier("arguments"); } getThisId() { - return this.thisId ||= this.scope.generateUidIdentifier("this"); + return this.thisId = this.thisId || this.scope.generateUidIdentifier("this"); } getLeftId() { - return this.leftId ||= this.scope.generateUidIdentifier("left"); + return this.leftId = this.leftId || this.scope.generateUidIdentifier("left"); } getFunctionId() { - return this.functionId ||= this.scope.generateUidIdentifier("function"); + return this.functionId = this.functionId || this.scope.generateUidIdentifier("function"); } getAgainId() { - return this.againId ||= this.scope.generateUidIdentifier("again"); + return this.againId = this.againId || this.scope.generateUidIdentifier("again"); } getParams() { diff --git a/src/babel/transformation/transformers/internal/shadow-functions.js b/src/babel/transformation/transformers/internal/shadow-functions.js index f1c201d2d89b..4eb4e5e375fc 100644 --- a/src/babel/transformation/transformers/internal/shadow-functions.js +++ b/src/babel/transformation/transformers/internal/shadow-functions.js @@ -52,11 +52,11 @@ function aliasFunction(getBody, path, scope) { var state = { getArgumentsId() { - return argumentsId ||= scope.generateUidIdentifier("arguments"); + return argumentsId = argumentsId || scope.generateUidIdentifier("arguments"); }, getThisId() { - return thisId ||= scope.generateUidIdentifier("this"); + return thisId = thisId || scope.generateUidIdentifier("this"); } }; @@ -67,7 +67,7 @@ function aliasFunction(getBody, path, scope) { var body; var pushDeclaration = function (id, init) { - body ||= getBody(); + body = body || getBody(); body.unshift(t.variableDeclaration("var", [ t.variableDeclarator(id, init) ])); diff --git a/src/babel/transformation/transformers/internal/validation.js b/src/babel/transformation/transformers/internal/validation.js index c21b524294fa..8fab413fdd30 100644 --- a/src/babel/transformation/transformers/internal/validation.js +++ b/src/babel/transformation/transformers/internal/validation.js @@ -21,7 +21,7 @@ export function MethodDefinition(node) { var isConstructor = !node.computed && t.isIdentifier(node.key, { name: "constructor" }); // get ["constructor"]() {} - isConstructor ||= t.isLiteral(node.key, { value: "constructor" }); + isConstructor = isConstructor || t.isLiteral(node.key, { value: "constructor" }); if (isConstructor) { throw this.errorWithNode(messages.get("classesIllegalConstructorKind")); diff --git a/src/babel/traversal/index.js b/src/babel/traversal/index.js index 65112715d2bd..c70f4b2c32c7 100644 --- a/src/babel/traversal/index.js +++ b/src/babel/traversal/index.js @@ -122,7 +122,8 @@ traverse.explode = function (obj) { var aliases = t.FLIPPED_ALIAS_KEYS[type]; if (aliases) { for (var i = 0; i < aliases.length; i++) { - obj[aliases[i]] ||= fns; + var alias = aliases[i]; + obj[alias] = obj[alias] || fns; } } } diff --git a/src/babel/traversal/path/index.js b/src/babel/traversal/path/index.js index b7d6ffc201ee..185ab3757a0b 100644 --- a/src/babel/traversal/path/index.js +++ b/src/babel/traversal/path/index.js @@ -47,7 +47,7 @@ export default class TraversalPath { static get(parentPath: TraversalPath, context?: TraversalContext, parent, container, key, file?: File) { var targetNode = container[key]; - var paths = container._paths ||= []; + var paths = container._paths = container._paths || []; var path; for (var i = 0; i < paths.length; i++) { @@ -613,7 +613,7 @@ export default class TraversalPath { var match = prop.isnt("computed") && key.isIdentifier({ name: targetName }); // { "foo": "obj" } or { ["foo"]: "obj" } - match ||= key.isLiteral({ value: targetName }); + match = match || key.isLiteral({ value: targetName }); if (match) return prop.get("value"); } diff --git a/src/babel/traversal/scope.js b/src/babel/traversal/scope.js index a8e89724facc..2a844429222d 100644 --- a/src/babel/traversal/scope.js +++ b/src/babel/traversal/scope.js @@ -242,8 +242,8 @@ export default class Scope { if (kind === "hoisted" && local.kind === "let") return; var duplicate = false; - duplicate ||= kind === "let" || kind === "const" || local.kind === "let" || local.kind === "const" || local.kind === "module"; - duplicate ||= local.kind === "param" && (kind === "let" || kind === "const"); + if (!duplicate) duplicate = kind === "let" || kind === "const" || local.kind === "let" || local.kind === "const" || local.kind === "module"; + if (!duplicate) duplicate = local.kind === "param" && (kind === "let" || kind === "const"); if (duplicate) { throw this.file.errorWithNode(id, messages.get("scopeDuplicateDeclaration", name), TypeError); @@ -255,7 +255,7 @@ export default class Scope { */ rename(oldName: string, newName: string, block?) { - newName ||= this.generateUidIdentifier(oldName).name; + newName = newName || this.generateUidIdentifier(oldName).name; var info = this.getBinding(oldName); if (!info) return; diff --git a/src/babel/types/index.js b/src/babel/types/index.js index e731f40aded8..3b31d8868886 100644 --- a/src/babel/types/index.js +++ b/src/babel/types/index.js @@ -17,7 +17,7 @@ function registerType(type: string, skipAliasCheck?: boolean) { }; t[`assert${type}`] = function (node, opts) { - opts ||= {}; + opts = opts || {}; if (!is(node, opts)) { throw new Error(`Expected type ${JSON.stringify(type)} with option ${JSON.stringify(opts)}`); } @@ -42,7 +42,7 @@ each(t.VISITOR_KEYS, function (keys, type) { each(t.ALIAS_KEYS, function (aliases, type) { each(aliases, function (alias) { - var types = t.FLIPPED_ALIAS_KEYS[alias] ||= []; + var types = t.FLIPPED_ALIAS_KEYS[alias] = t.FLIPPED_ALIAS_KEYS[alias] || []; types.push(type); }); });